From 080865820280749a0da0a14957ae3da56f88d901 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Sat, 19 Apr 2003 23:35:01 +0000 Subject: Patch from Marshall M. Midden: It turns out that uClibc's syslog.c does not close sockets when doing retries and when it exits due to errors. This patch fixes it. --- libc/misc/syslog/syslog.c | 72 +++++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 33 deletions(-) (limited to 'libc/misc/syslog') diff --git a/libc/misc/syslog/syslog.c b/libc/misc/syslog/syslog.c index 2320caf25..8822b02a5 100644 --- a/libc/misc/syslog/syslog.c +++ b/libc/misc/syslog/syslog.c @@ -111,7 +111,9 @@ static void closelog_intern(int to_default) { LOCK; - (void) close(LogFile); + if (LogFile != -1) { + (void) close(LogFile); + } LogFile = -1; connected = 0; if (to_default) @@ -264,46 +266,50 @@ getout: void openlog( const char *ident, int logstat, int logfac ) { - int logType = SOCK_DGRAM; - - LOCK; - - if (ident != NULL) - LogTag = ident; - LogStat = logstat; - if (logfac != 0 && (logfac &~ LOG_FACMASK) == 0) - LogFacility = logfac; - if (LogFile == -1) { - SyslogAddr.sa_family = AF_UNIX; - (void)strncpy(SyslogAddr.sa_data, _PATH_LOG, - sizeof(SyslogAddr.sa_data)); + int logType = SOCK_DGRAM; + + LOCK; + + if (ident != NULL) + LogTag = ident; + LogStat = logstat; + if (logfac != 0 && (logfac &~ LOG_FACMASK) == 0) + LogFacility = logfac; + if (LogFile == -1) { + SyslogAddr.sa_family = AF_UNIX; + (void)strncpy(SyslogAddr.sa_data, _PATH_LOG, + sizeof(SyslogAddr.sa_data)); retry: - if (LogStat & LOG_NDELAY) { - if ((LogFile = socket(AF_UNIX, logType, 0)) == -1){ - UNLOCK; - return; - } -/* fcntl(LogFile, F_SETFD, 1); */ - } + if (LogStat & LOG_NDELAY) { + if ((LogFile = socket(AF_UNIX, logType, 0)) == -1){ + UNLOCK; + return; + } + /* fcntl(LogFile, F_SETFD, 1); */ } - if (LogFile != -1 && !connected && -#if 0 - connect(LogFile, &SyslogAddr, sizeof(SyslogAddr.sa_family)+ - strlen(SyslogAddr.sa_data)) != -1 -#else - connect(LogFile, &SyslogAddr, sizeof(SyslogAddr) - - sizeof(SyslogAddr.sa_data) + - strlen(SyslogAddr.sa_data)) != -1 -#endif - ) + } + + if (LogFile != -1 && !connected) { + if (connect(LogFile, &SyslogAddr, sizeof(SyslogAddr) - + sizeof(SyslogAddr.sa_data) + strlen(SyslogAddr.sa_data)) != -1) { - connected = 1; + connected = 1; } else if (logType == SOCK_DGRAM) { logType = SOCK_STREAM; + if (LogFile != -1) { + close(LogFile); + LogFile = -1; + } goto retry; + } else { + if (LogFile != -1) { + close(LogFile); + LogFile = -1; + } } + } - UNLOCK; + UNLOCK; } /* -- cgit v1.2.3