Accepting request 58853 from home:mtomaschewski:branches:Base:System
OBS-URL: https://build.opensuse.org/request/show/58853 OBS-URL: https://build.opensuse.org/package/show/Base:System/syslogd?expand=0&rev=34
This commit is contained in:
parent
1d72e2fc3c
commit
3c303d77a1
171
sysklogd-1.4.1-systemd-multi.dif
Normal file
171
sysklogd-1.4.1-systemd-multi.dif
Normal file
@ -0,0 +1,171 @@
|
||||
--- 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];
|
@ -1,3 +1,9 @@
|
||||
-------------------------------------------------------------------
|
||||
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)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Nov 30 11:08:19 CET 2010 - werner@suse.de
|
||||
|
||||
|
@ -61,6 +61,7 @@ Patch21: sysklogd-1.4.1-nofortify.patch
|
||||
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 @@ Authors:
|
||||
%patch22 -p0 -b .sysmap
|
||||
%patch23 -p0 -b .reload
|
||||
%patch24 -p0 -b .sd
|
||||
%patch25 -p0 -b .sd2
|
||||
%patch0 -p0
|
||||
|
||||
%build
|
||||
|
Loading…
x
Reference in New Issue
Block a user