From 96d9bdcc09322528b02e471587bf2d4a4ee029d7 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Tue, 25 Sep 2007 07:38:03 +0000 Subject: more cleanup on thread-safe CRL functions --- ChangeLog | 5 +++++ syslogd.c | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b2319df1..60cfd118 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,11 @@ Version 1.19.7 (rgerhards), 2007-09-1? a NUL character. It is now simply removed. This also caused trailing LF reduction to fail, when it was followed by such a NUL. This is now also handled. +- replaced some non-thread-safe function calls by their thread-safe + counterparts +- fixed a minor memory leak that occured when the %APPNAME% property was + used (I think nobody used that in practice) +- general code cleanup (e.g. compiler warnings, comments) --------------------------------------------------------------------------- Version 1.19.6 (rgerhards), 2007-09-11 - applied patch by varmojfekoj to change signal handling to the new diff --git a/syslogd.c b/syslogd.c index dd8a1f95..016e5d87 100644 --- a/syslogd.c +++ b/syslogd.c @@ -1593,11 +1593,12 @@ void getCurrTime(struct syslogTime *t) { struct timeval tp; struct tm *tm; + struct tm tmBuf; long lBias; assert(t != NULL); gettimeofday(&tp, NULL); - tm = localtime((time_t*) &(tp.tv_sec)); + tm = localtime_r((time_t*) &(tp.tv_sec), &tmBuf); t->year = tm->tm_year + 1900; t->month = tm->tm_mon + 1; @@ -3845,6 +3846,11 @@ finalize_it: * loader for plug-ins. * rgerhards, 2007-07-21 * varmojfekoj added support for dynamically loadable modules on 2007-08-13 + * rgerhards, 2007-09-25: please note that the non-threadsafe function dlerror() is + * called below. This is ok because modules are currently only loaded during + * configuration file processing, which is executed on a single thread. Should we + * change that design at any stage (what is unlikely), we need to find a + * replacement. */ static rsRetVal doModLoad(uchar **pp, __attribute__((unused)) void* pVal) { @@ -4322,6 +4328,8 @@ static void init(void) if(!strcmp(LogPort, "0")) { /* we shall use the default syslog/udp port, so let's * look it up. + * NOTE: getservbyname() is not thread-safe, but this is OK as + * it is called only during init, in single-threading mode. */ sp = getservbyname("syslog", "udp"); if (sp == NULL) { @@ -6295,6 +6303,9 @@ int main(int argc, char **argv) * doesn't have LocalHostName listed, gethostbyname will * return NULL. */ + /* TODO: gethostbyname() is not thread-safe, but replacing it is + * not urgent as we do not run on multiple threads here. rgerhards, 2007-09-25 + */ hent = gethostbyname(LocalHostName); if(hent) { snprintf(LocalHostName, sizeof(LocalHostName), "%s", hent->h_name); -- cgit