Pārlūkot izejas kodu

check for connect failure in syslog log opening

based on patch by Dima Krasner, with minor improvements for code size.
connect can fail if there is no listening syslogd, in which case a
useless socket was kept open, preventing subsequent syslog call from
attempting to connect again.
Rich Felker 10 gadi atpakaļ
vecāks
revīzija
c574321d75
1 mainītis faili ar 6 papildinājumiem un 2 dzēšanām
  1. 6 2
      src/misc/syslog.c

+ 6 - 2
src/misc/syslog.c

@@ -46,8 +46,12 @@ void closelog(void)
 
 static void __openlog()
 {
-	log_fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
-	if (log_fd >= 0) connect(log_fd, (void *)&log_addr, sizeof log_addr);
+	int fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
+	if (fd < 0) return;
+	if (connect(fd, (void *)&log_addr, sizeof log_addr) < 0)
+		close(fd);
+	else
+		log_fd = fd;
 }
 
 void openlog(const char *ident, int opt, int facility)