Contents of /trunk/busybox/patches/busybox-1.20.2-syslogd-systemd.patch
Parent Directory | Revision Log
Revision 1940 -
(show annotations)
(download)
Tue Nov 6 11:56:59 2012 UTC (11 years, 10 months ago) by niro
File size: 3559 byte(s)
Tue Nov 6 11:56:59 2012 UTC (11 years, 10 months ago) by niro
File size: 3559 byte(s)
-socket activiation for syslogd
1 | From 9b3b9790b32d440eb89af5edda70a66b1829e861 Mon Sep 17 00:00:00 2001 |
2 | From: Davide Cavalca <davide@geexbox.org> |
3 | Date: Tue, 25 Jan 2011 01:26:03 +0000 |
4 | Subject: add ENABLE_FEATURE_SYSTEMD and use it in syslogd |
5 | |
6 | Signed-off-by: Davide Cavalca <davide@geexbox.org> |
7 | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> |
8 | --- |
9 | diff --git a/include/libbb.h b/include/libbb.h |
10 | index 968bdcf..32e25a8 100644 |
11 | --- a/include/libbb.h |
12 | +++ b/include/libbb.h |
13 | @@ -1217,6 +1217,12 @@ extern void selinux_preserve_fcontext(int fdesc) FAST_FUNC; |
14 | #endif |
15 | extern void selinux_or_die(void) FAST_FUNC; |
16 | |
17 | + |
18 | +/* systemd support */ |
19 | +#define SD_LISTEN_FDS_START 3 |
20 | +int sd_listen_fds(void); |
21 | + |
22 | + |
23 | /* setup_environment: |
24 | * if chdir pw->pw_dir: ok: else if to_tmp == 1: goto /tmp else: goto / or die |
25 | * if clear_env = 1: cd(pw->pw_dir), clear environment, then set |
26 | diff --git a/libbb/systemd_support.c b/libbb/systemd_support.c |
27 | new file mode 100644 |
28 | index 0000000..981296d |
29 | --- a/dev/null |
30 | +++ b/libbb/systemd_support.c |
31 | @@ -0,0 +1,62 @@ |
32 | +/* |
33 | + * Copyright (C) 2011 Davide Cavalca <davide@geexbox.org> |
34 | + * |
35 | + * Based on http://cgit.freedesktop.org/systemd/tree/src/sd-daemon.c |
36 | + * Copyright 2010 Lennart Poettering |
37 | + * |
38 | + * Permission is hereby granted, free of charge, to any person |
39 | + * obtaining a copy of this software and associated documentation files |
40 | + * (the "Software"), to deal in the Software without restriction, |
41 | + * including without limitation the rights to use, copy, modify, merge, |
42 | + * publish, distribute, sublicense, and/or sell copies of the Software, |
43 | + * and to permit persons to whom the Software is furnished to do so, |
44 | + * subject to the following conditions: |
45 | + * |
46 | + * The above copyright notice and this permission notice shall be |
47 | + * included in all copies or substantial portions of the Software. |
48 | + * |
49 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
50 | + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
51 | + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
52 | + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
53 | + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
54 | + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
55 | + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
56 | + * SOFTWARE. |
57 | + */ |
58 | +#include "libbb.h" |
59 | + |
60 | +//config:config FEATURE_SYSTEMD |
61 | +//config: bool "Enable systemd support" |
62 | +//config: default y |
63 | +//config: help |
64 | +//config: If you plan to use busybox daemons on a system where daemons |
65 | +//config: are controlled by systemd, enable this option. |
66 | +//config: If you don't use systemd, it is still safe to enable it, |
67 | +//config: but yhe downside is increased code size. |
68 | + |
69 | +//kbuild:lib-$(CONFIG_FEATURE_SYSTEMD) += systemd_support.o |
70 | + |
71 | +int sd_listen_fds(void) |
72 | +{ |
73 | + const char *e; |
74 | + int n; |
75 | + int fd; |
76 | + |
77 | + e = getenv("LISTEN_PID"); |
78 | + if (!e) |
79 | + return 0; |
80 | + n = xatoi_positive(e); |
81 | + /* Is this for us? */ |
82 | + if (getpid() != (pid_t) n) |
83 | + return 0; |
84 | + |
85 | + e = getenv("LISTEN_FDS"); |
86 | + if (!e) |
87 | + return 0; |
88 | + n = xatoi_positive(e); |
89 | + for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + n; fd++) |
90 | + close_on_exec_on(fd); |
91 | + |
92 | + return n; |
93 | +} |
94 | diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c |
95 | index fb73095..24cab3b 100644 |
96 | --- a/sysklogd/syslogd.c |
97 | +++ b/sysklogd/syslogd.c |
98 | @@ -512,6 +512,11 @@ static NOINLINE int create_socket(void) |
99 | int sock_fd; |
100 | char *dev_log_name; |
101 | |
102 | +#if ENABLE_FEATURE_SYSTEMD |
103 | + if (sd_listen_fds() == 1) |
104 | + return SD_LISTEN_FDS_START; |
105 | +#endif |
106 | + |
107 | memset(&sunx, 0, sizeof(sunx)); |
108 | sunx.sun_family = AF_UNIX; |
109 | |
110 | -- |
111 | cgit v0.9.0.1-2-gef13 |