commit syslogd for openSUSE:Factory
Hello community, here is the log from the commit of package syslogd for openSUSE:Factory checked in at Tue Jan 25 13:29:55 CET 2011. -------- --- syslogd/syslogd.changes 2010-11-30 11:09:34.000000000 +0100 +++ /mounts/work_src_done/STABLE/syslogd/syslogd.changes 2011-01-20 10:42:29.000000000 +0100 @@ -1,0 +2,6 @@ +Thu Jan 20 09:37:15 UTC 2011 - mt@suse.de + +- Improved systemd socket activation support to support multiple + sockets and activation in forking mode (bnc#656104) + +------------------------------------------------------------------- calling whatdependson for head-i586 New: ---- sysklogd-1.4.1-systemd-multi.dif ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ syslogd.spec ++++++ --- /var/tmp/diff_new_pack.mnVDVR/_old 2011-01-25 13:29:34.000000000 +0100 +++ /var/tmp/diff_new_pack.mnVDVR/_new 2011-01-25 13:29:34.000000000 +0100 @@ -1,7 +1,7 @@ # -# spec file for package syslogd (Version 1.4.1) +# spec file for package syslogd # -# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -27,7 +27,7 @@ Provides: syslog AutoReqProv: on Version: 1.4.1 -Release: 726 +Release: 727 Summary: The Syslog daemon Source: sysklogd-1.4.1.tar.bz2 Source1: logrotate.syslog @@ -61,6 +61,7 @@ Patch22: sysklogd-1.4.1-sysmap-prior-to-2.5.patch Patch23: sysklogd-1.4.1-reload.dif Patch24: sysklogd-1.4.1-systemd.dif +Patch25: sysklogd-1.4.1-systemd-multi.dif BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -130,6 +131,7 @@ %patch22 -p0 -b .sysmap %patch23 -p0 -b .reload %patch24 -p0 -b .sd +%patch25 -p0 -b .sd2 %patch0 -p0 %build ++++++ sysklogd-1.4.1-systemd-multi.dif ++++++ --- syslogd.c +++ syslogd.c 2011/01/20 10:55:18 @@ -574,6 +574,9 @@ static volatile sig_atomic_t restart; int nfunix = 1; char *funixn[MAXFUNIX] = { _PATH_LOG }; int funix[MAXFUNIX] = { -1, }; +#if defined(__linux__) +int sd_fds = 0; +#endif #ifdef UT_NAMESIZE # define UNAMESZ UT_NAMESIZE /* length of a login name */ @@ -1000,12 +1003,44 @@ int main(argc, argv) exit(1); } + i = 0; num_fds = getdtablesize(); #if defined(__linux__) - if (sd_listen_fds(0) <= 0) -#endif - for (i = 0; i < num_fds; i++) + /* if (sd_booted()) */ { + const char *e; + char buf[24] = { '\0' }; + char *p = NULL; + unsigned long l; + + /* fork & systemd socket activation: + * fetch listen pid and update to ours, + * when it is set to pid of our parent. + */ + if ( (e = getenv("LISTEN_PID"))) { + errno = 0; + l = strtoul(e, &p, 10); + if (errno == 0 && l > 0 && (!p || !*p)) { + if (getppid() == (pid_t)l) { + snprintf(buf, sizeof(buf), "%d", + getpid()); + setenv("LISTEN_PID", buf, 1); + } + } + } + + /* + * init sd_fds and close all fds, except + * of the fds provided by systemd. + */ + sd_fds = sd_listen_fds(0); + for( ; i < SD_LISTEN_FDS_START; i++) (void) close(i); + if (sd_fds > 0) + i = SD_LISTEN_FDS_START + sd_fds; + } +#endif + for ( ; i < num_fds; i++) + (void) close(i); untty(); break; } @@ -1041,7 +1076,12 @@ int main(argc, argv) dprintf("Pidfile (and pid) already exist.\n"); exit(1); } - } /* if ( !Debug ) */ + } /* if ( !(Debug || NoFork)) */ +#if defined(__linux__) + /* if (sd_booted()) */ { + sd_fds = sd_listen_fds(0); + } +#endif } #endif @@ -1323,54 +1363,30 @@ static int create_unix_socket(const char return -1; #if defined(__linux__) - if (strcmp(path, _PATH_LOG) == 0) { - int r; - - /* Check whether an FD was passed in from systemd. If - * so, it's the /dev/log socket, so use it. */ - - r = sd_listen_fds(0); - if (r < 0) { - logerror("Failed to acquire systemd socket"); + /* + * Check whether an FD was passed in from systemd. + * If so and it matches this socket, so use it. + */ + if (sd_fds < 0) { + logerror("Failed to acquire systemd socket"); #ifndef SYSV - dienow(); + dienow(); #else - return -1; + return -1; #endif - } + } - - if (r > 1) { - logerror("Wrong number of systemd sockets passed"); -#ifndef SYSV - dienow(); -#else - return -1; -#endif - } - - if (r == 1) { - fd = SD_LISTEN_FDS_START; - r = sd_is_socket_unix(fd, SOCK_DGRAM, -1, _PATH_LOG, 0); - if (r < 0) { - logerror("Failed to verify systemd socket type"); -#ifndef SYSV - dienow(); -#else - return -1; -#endif + if (sd_fds > 0) { + for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + sd_fds; fd++) { + if( sd_is_socket_unix(fd, SOCK_DGRAM, -1, path, 0) == 1) { + /* ok, it matches -- just use as is */ + return fd; } - - if (!r) { - logerror("Passed systemd socket of wrong type"); -#ifndef SYSV - dienow(); -#else - return -1; -#endif - } - - return fd; + /* + * otherwise it either didn't matched *this* socket and + * we just continue to check the next one or there were + * an error and we will recreate it bellow. + */ } } #endif @@ -2485,14 +2501,17 @@ void dienow(void) if (InetInuse) close(inetm); /* Clean-up files. */ - i = 0; + for (i = 0; i < nfunix; i++) { + if (funixn[i] && funix[i] != -1) { #if defined(__linux__) - if (sd_listen_fds(0) > 0) - i = 1; + if (sd_fds > 0 && + funix[i] >= SD_LISTEN_FDS_START && + funix[i] < SD_LISTEN_FDS_START + sd_fds) + continue; #endif - for (; i < nfunix; i++) - if (funixn[i] && funix[i] != -1) (void)unlink(funixn[i]); + } + } for (lognum = 0; lognum <= nlogs; lognum++) { f = &Files[lognum]; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@hilbert.suse.de