* vCtdlLogPrintf(): add the userID when reporting from a system thread
authorWilfried Göesgens <willi@citadel.org>
Thu, 3 Jun 2010 16:54:25 +0000 (16:54 +0000)
committerWilfried Göesgens <willi@citadel.org>
Thu, 3 Jun 2010 16:54:25 +0000 (16:54 +0000)
* use StrBuf if available
* CtdlFillSystemContext(); we need to fill context->curr_user too, else we will loose the user during for example room processing.

citadel/context.c
citadel/context.h
citadel/sysdep.c

index 03638d2992e3b65ed32cb1ce73dbe003072caadf..32287e16d3e4fed7bf9f1c1add0ceb109b60ef2c 100644 (file)
@@ -345,6 +345,7 @@ void RemoveContext (CitContext *con)
 
        FreeStrBuf(&con->MigrateBuf);
        FreeStrBuf(&con->ReadBuf);
+       FreeStrBuf(&con->lBuf);
        CtdlLogPrintf(CTDL_DEBUG, "Done with RemoveContext()\n");
 }
 
@@ -367,7 +368,7 @@ CitContext *CreateNewContext(void) {
                return NULL;
        }
        memset(me, 0, sizeof(CitContext));
-       
+       me->lBuf = NewStrBufPlain(NULL, SIZ);
        /* Give the contaxt a name. Hopefully makes it easier to track */
        strcpy (me->user.fullname, "SYS_notauth");
        
@@ -434,11 +435,14 @@ void CtdlFillSystemContext(CitContext *context, char *name)
        long len;
 
        memset(context, 0, sizeof(CitContext));
+       context->lBuf = NewStrBuf();
        context->internal_pgm = 1;
        context->cs_pid = 0;
        strcpy (sysname, "SYS_");
        strcat (sysname, name);
        len = cutuserkey(sysname);
+       memcpy(context->curr_user, sysname, len + 1);
+
        /* internal_create_user has the side effect of loading the user regardless of wether they
         * already existed or needed to be created
         */
@@ -578,6 +582,7 @@ void InitializeMasterCC(void) {
        memset(&masterCC, 0, sizeof( CitContext));
        masterCC.internal_pgm = 1;
        masterCC.cs_pid = 0;
+       masterCC.lBuf = NewStrBuf ();
 }
 
 
index 7a71d3b96eb04c79bed04a840b071a75995f5ec9..322061e65471e47a135420c28beada3f4000d0b9 100644 (file)
@@ -28,6 +28,8 @@ struct CitContext {
        int state;              /* thread state (see CON_ values below) */
        int kill_me;            /* Set to nonzero to flag for termination */
 
+       StrBuf *lBuf;
+
        const char *Pos;        /* Our read position inside of the ReadBuf */
        StrBuf *ReadBuf;        /* Our block buffered read buffer */
        StrBuf *MigrateBuf;        /* Our block buffered read buffer */
index d9f34470e52fb0332b409d448025b52569035f5e..deb7f91826729ffa3c38790c1753a5f048f92d23 100644 (file)
@@ -49,6 +49,7 @@
 #include <errno.h>
 #include <stdarg.h>
 #include <grp.h>
+#define SHOW_ME_VAPPEND_PRINTF
 #include <libcitadel.h>
 #include "citadel.h"
 #include "server.h"
@@ -106,7 +107,6 @@ void CtdlLogPrintf(enum LogLevel loglevel, const char *format, ...) {
 
 void vCtdlLogPrintf(enum LogLevel loglevel, const char *format, va_list arg_ptr)
 {
-       char buf[SIZ], buf2[SIZ];
 
        if (enable_syslog) {
                vsyslog((syslog_facility | loglevel), format, arg_ptr);
@@ -120,30 +120,62 @@ void vCtdlLogPrintf(enum LogLevel loglevel, const char *format, va_list arg_ptr)
                struct timeval tv;
                struct tm tim;
                time_t unixtime;
+               StrBuf *lBuf;
                CitContext *CCC = CC;
-
+               
                gettimeofday(&tv, NULL);
                /* Promote to time_t; types differ on some OSes (like darwin) */
                unixtime = tv.tv_sec;
                localtime_r(&unixtime, &tim);
-               if ((CCC != NULL) && (CCC->cs_pid != 0)) {
-                       sprintf(buf,
-                               "%04d/%02d/%02d %2d:%02d:%02d.%06ld [%3d] ",
-                               tim.tm_year + 1900, tim.tm_mon + 1,
-                               tim.tm_mday, tim.tm_hour, tim.tm_min,
-                               tim.tm_sec, (long)tv.tv_usec,
-                               CCC->cs_pid);
-               } else {
-                       sprintf(buf,
-                               "%04d/%02d/%02d %2d:%02d:%02d.%06ld ",
-                               tim.tm_year + 1900, tim.tm_mon + 1,
-                               tim.tm_mday, tim.tm_hour, tim.tm_min,
-                               tim.tm_sec, (long)tv.tv_usec);
-               }
-               vsnprintf(buf2, SIZ, format, arg_ptr);   
 
-               fprintf(stderr, "%s%s", buf, buf2);
+               if (CCC != NULL)
+                       lBuf = CCC->lBuf;
+               else 
+                       lBuf = NewStrBuf();
+               if (lBuf == NULL) {
+                       char buf[SIZ], buf2[SIZ];
+                       
+                       if ((CCC != NULL) && (CCC->cs_pid != 0)) {
+                               sprintf(buf,
+                                       "%04d/%02d/%02d %2d:%02d:%02d.%06ld xx [%3d] ",
+                                       tim.tm_year + 1900, tim.tm_mon + 1,
+                                       tim.tm_mday, tim.tm_hour, tim.tm_min,
+                                       tim.tm_sec, (long)tv.tv_usec,
+                                       CCC->cs_pid);
+                       } else {
+                               sprintf(buf,
+                                       "%04d/%02d/%02d %2d:%02d:%02d.%06ld xx ",
+                                       tim.tm_year + 1900, tim.tm_mon + 1,
+                                       tim.tm_mday, tim.tm_hour, tim.tm_min,
+                                       tim.tm_sec, (long)tv.tv_usec);
+                       }
+                       vsnprintf(buf2, SIZ, format, arg_ptr);   
+
+                       fprintf(stderr, "%s%s", buf, buf2);
+               }
+               else {
+                       StrBufPrintf(lBuf,
+                                    "%04d/%02d/%02d %2d:%02d:%02d.%06ld ",
+                                    tim.tm_year + 1900, tim.tm_mon + 1,
+                                    tim.tm_mday, tim.tm_hour, tim.tm_min,
+                                    tim.tm_sec, (long)tv.tv_usec);
+                               
+                       if (CCC != NULL) {
+                               if (CCC->cs_pid != 0)
+                                       StrBufAppendPrintf(lBuf,
+                                                          "[%3d] ",
+                                                          CCC->cs_pid);
+                               else if (CCC->user.usernum != 0)
+                                       StrBufAppendPrintf(lBuf,
+                                                          "[:%d] ",
+                                                          CCC->user.usernum);
+                       }
+                       StrBufVAppendPrintf(lBuf, format, arg_ptr);   
+                       fwrite(ChrPtr(lBuf), 1, StrLength(lBuf), stderr);
+               }
                fflush(stderr);
+               if (CCC == NULL) FreeStrBuf(&lBuf);
+
        }
 }