/* * @(#)log.c--Handle debug message and log messages */ #define MASTER #include "smtprelay.h" #include #include "log.h" int debugLevel = DEBUG_OP; /* Debug level */ int debugNetDump = FALSE; /* Dump network transactions */ char *logId = ""; /* ID for log messages */ char logBuf[4096]; /* General buffer for messages */ void LogPrefix( FILE *F ) { time_t tod; struct tm *tp; tod = time(NULL); tp = localtime(&tod); fprintf( F, "[%s] ", logId ); } void LogMsg(char *str) { LogPrefix(stderr); fprintf(stderr,"%s\n",str); } /* * Log a system error */ extern int sys_nerr; /* extern char *sys_errlist[]; /* -- for linux, avi */ void LogError( char *msg /* message prefix */ ) { char sbuf[4096]; if(errno > sys_nerr) { sprintf( sbuf, "%s%sUnknown error (%d)", msg ? msg : "", msg ? ": " : "", errno ); } else { sprintf( sbuf, "%s%s%s", msg ? msg : "", msg ? ": " : "", sys_errlist[errno] ); } LogMsg(sbuf); } /* * Dump a buffer to the log. * Types are: * LD_HEX Hex dump * LD_ASCII Ascii dump * Or options together to get combinations */ void LogDump( u_char *bp, int bs, int type /* LD_HEX, LD_ASCII */ ) { int i; char ldbuf[64]; char *ldp; while(bs > 0) { if ( type|LD_HEX ) { ldp = ldbuf; for(i=0;i 127) { ldp += sprintf(ldp," . "); } else { ldp += sprintf(ldp," %c ",*(bp+i)); } } LogMsg(ldbuf); } bp += 16; bs -= 16; } }