X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=log.c;h=d940df530e914c2ffba4b0e6f3c5ad0ffd890668;hp=3a50a27ce47ab301ae317353f800fed9a2986b8b;hb=92a7d254975db245c3320855515bffc1aebda9e4;hpb=7b1a9fb74228564b5ee07b48c042ee7b9a2260f1 diff --git a/log.c b/log.c index 3a50a27..d940df5 100644 --- a/log.c +++ b/log.c @@ -14,9 +14,20 @@ bool_t secnet_is_daemon=False; uint32_t message_level=M_WARNING|M_ERR|M_SECURITY|M_FATAL; struct log_if *system_log=NULL; -static void vMessage(uint32_t class, const char *message, va_list args) +static void vMessageFallback(uint32_t class, const char *message, va_list args) { FILE *dest=stdout; + /* Messages go to stdout/stderr */ + if (class & message_level) { + if (class&M_FATAL || class&M_ERR || class&M_WARNING) { + dest=stderr; + } + vfprintf(dest,message,args); + } +} + +static void vMessage(uint32_t class, const char *message, va_list args) +{ #define MESSAGE_BUFLEN 1023 static char buff[MESSAGE_BUFLEN+1]={0,}; size_t bp; @@ -27,6 +38,8 @@ static void vMessage(uint32_t class, const char *message, va_list args) bp=strlen(buff); assert(bp < MESSAGE_BUFLEN); vsnprintf(buff+bp,MESSAGE_BUFLEN-bp,message,args); + buff[sizeof(buff)-2] = '\n'; + buff[sizeof(buff)-1] = '\0'; /* Each line is sent separately */ while ((nlp=strchr(buff,'\n'))) { *nlp=0; @@ -34,13 +47,7 @@ static void vMessage(uint32_t class, const char *message, va_list args) memmove(buff,nlp+1,strlen(nlp+1)+1); } } else { - /* Messages go to stdout/stderr */ - if (class & message_level) { - if (class&M_FATAL || class&M_ERR || class&M_WARNING) { - dest=stderr; - } - vfprintf(dest,message,args); - } + vMessageFallback(class,message,args); } } @@ -53,6 +60,15 @@ void Message(uint32_t class, const char *message, ...) va_end(ap); } +static void MessageFallback(uint32_t class, const char *message, ...) +{ + va_list ap; + + va_start(ap,message); + vMessageFallback(class,message,ap); + va_end(ap); +} + static NORETURN(vfatal(int status, bool_t perror, const char *message, va_list args)); @@ -154,11 +170,11 @@ void cfgfile_postreadcheck(struct cloc loc, FILE *f) { assert(loc.file); if (ferror(f)) { - Message(M_FATAL, "error reading config file (%s): %s", + Message(M_FATAL, "error reading config file (%s): %s\n", loc.file, strerror(errno)); exit(current_phase); } else if (feof(f)) { - Message(M_FATAL, "unexpected end of config file (%s)", loc.file); + Message(M_FATAL, "unexpected end of config file (%s)\n", loc.file); exit(current_phase); } } @@ -262,8 +278,8 @@ static void logfile_vlog(void *sst, int class, const char *message, fflush(st->f); } } else { - vMessage(class,message,args); - Message(class,"\n"); + vMessageFallback(class,message,args); + MessageFallback(class,"\n"); } } @@ -391,8 +407,8 @@ static void syslog_vlog(void *sst, int class, const char *message, if (st->open) vsyslog(msgclass_to_syslogpriority(class),message,args); else { - vMessage(class,message,args); - Message(class,"\n"); + vMessageFallback(class,message,args); + MessageFallback(class,"\n"); } }