From 07ebf1e2e622321c65fc0222a982c8b80a8cb08f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Thu, 3 Jun 2010 16:54:25 +0000 Subject: [PATCH] * vCtdlLogPrintf(): add the userID when reporting from a system thread * 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 | 7 ++++- citadel/context.h | 2 ++ citadel/sysdep.c | 68 ++++++++++++++++++++++++++++++++++------------- 3 files changed, 58 insertions(+), 19 deletions(-) diff --git a/citadel/context.c b/citadel/context.c index 03638d299..32287e16d 100644 --- a/citadel/context.c +++ b/citadel/context.c @@ -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 (); } diff --git a/citadel/context.h b/citadel/context.h index 7a71d3b96..322061e65 100644 --- a/citadel/context.h +++ b/citadel/context.h @@ -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 */ diff --git a/citadel/sysdep.c b/citadel/sysdep.c index d9f34470e..deb7f9182 100644 --- a/citadel/sysdep.c +++ b/citadel/sysdep.c @@ -49,6 +49,7 @@ #include #include #include +#define SHOW_ME_VAPPEND_PRINTF #include #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); + } } -- 2.30.2