X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilclog.c;h=976005266bb108c190096d9bd6134b79c103d838;hb=c257b555225193e54d85daf541d29578b3c93882;hp=4a70cbc5a7d47d0ba6a665f5dafd104d7efb3b5f;hpb=ea35a2214bc62cbdb314cd28f389fd78fe3a31e0;p=silc.git diff --git a/lib/silcutil/silclog.c b/lib/silcutil/silclog.c index 4a70cbc5..97600526 100644 --- a/lib/silcutil/silclog.c +++ b/lib/silcutil/silclog.c @@ -2,9 +2,9 @@ silclog.c - Author: Johnny Mnemonic + Author: Giovanni Giacobbi - Copyright (C) 1997 - 2002 Pekka Riikonen + Copyright (C) 1997 - 2005 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -49,6 +49,9 @@ static struct SilcLogStruct silclogs[SILC_LOG_MAX] = { {"", NULL, 0, "Fatal", SILC_LOG_FATAL, NULL, NULL}, }; +/* Causes logging output to contain timestamps */ +bool silc_log_timestamp = TRUE; + /* If TRUE, log files will be flushed for each log input */ bool silc_log_quick = FALSE; @@ -114,15 +117,17 @@ static void silc_log_checksize(SilcLog log) log->filename, oldfp)); return; } - if (size < log->maxsize) return; + if (size < log->maxsize) + return; /* It's too big */ fprintf(log->fp, "[%s] [%s] Cycling log file, over max " "logsize (%lu kilobytes)\n", - silc_get_time(), log->typename, log->maxsize / 1024); + silc_get_time(0), log->typename, (unsigned long)log->maxsize / 1024); fflush(log->fp); fclose(log->fp); - snprintf(newname, sizeof(newname), "%s.old", log->filename); + memset(newname, 0, sizeof(newname)); + snprintf(newname, sizeof(newname) - 1, "%s.old", log->filename); unlink(newname); /* I heard the following syscall may cause portability issues, but I don't @@ -132,6 +137,9 @@ static void silc_log_checksize(SilcLog log) if (!(log->fp = fopen(log->filename, "w"))) SILC_LOG_WARNING(("Couldn't reopen logfile %s for type \"%s\": %s", log->filename, log->typename, strerror(errno))); +#ifdef HAVE_CHMOD + chmod(log->filename, 0600); +#endif /* HAVE_CHMOD */ } /* Reset a logging channel (close and reopen) */ @@ -220,7 +228,12 @@ void silc_log_output(SilcLogType type, char *string) goto end; found: - fprintf(fp, "[%s] [%s] %s\n", silc_get_time(), typename, string); + /* writes the logging string to the selected channel */ + if (silc_log_timestamp) + fprintf(fp, "[%s] [%s] %s\n", silc_get_time(0), typename, string); + else + fprintf(fp, "[%s] %s\n", typename, string); + if (silc_log_quick || silc_log_starting) { fflush(fp); if (log) /* we may have been redirected to stderr */ @@ -269,6 +282,9 @@ bool silc_log_set_file(SilcLogType type, char *filename, SilcUInt32 maxsize, filename, strerror(errno)); return FALSE; } +#ifdef HAVE_CHMOD + chmod(filename, 0600); +#endif /* HAVE_CHMOD */ } /* clean the logging channel */ @@ -292,7 +308,7 @@ bool silc_log_set_file(SilcLogType type, char *filename, SilcUInt32 maxsize, if (silc_log_scheduled) return TRUE; - /* Add schedule hook with a short delay to make sure we'll use + /* Add schedule hook with a short delay to make sure we'll use right delay */ silc_schedule_task_add(scheduler, 0, silc_log_fflush_callback, (void *) scheduler, 10, 0, @@ -351,7 +367,7 @@ void silc_log_reset_all() { /* Outputs the debug message to stderr. */ -void silc_log_output_debug(char *file, char *function, +void silc_log_output_debug(char *file, const char *function, int line, char *string) { if (!silc_debug) @@ -363,7 +379,7 @@ void silc_log_output_debug(char *file, char *function, goto end; if (silc_log_debug_cb) { - if ((*silc_log_debug_cb)(file, function, line, string, + if ((*silc_log_debug_cb)(file, (char *)function, line, string, silc_log_debug_context)) goto end; } @@ -377,7 +393,7 @@ void silc_log_output_debug(char *file, char *function, /* Hexdumps a message */ -void silc_log_output_hexdump(char *file, char *function, +void silc_log_output_hexdump(char *file, const char *function, int line, void *data_in, SilcUInt32 len, char *string) { @@ -394,7 +410,8 @@ void silc_log_output_hexdump(char *file, char *function, goto end; if (silc_log_hexdump_cb) { - if ((*silc_log_hexdump_cb)(file, function, line, data_in, len, string, + if ((*silc_log_hexdump_cb)(file, (char *)function, line, + data_in, len, string, silc_log_hexdump_context)) goto end; }