Prechádzať zdrojové kódy

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.
Eric Andersen 22 rokov pred
rodič
commit
0808658202
1 zmenil súbory, kde vykonal 39 pridanie a 33 odobranie
  1. 39 33
      libc/misc/syslog/syslog.c

+ 39 - 33
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;
 }
 
 /*