aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2012-12-10 14:49:39 -0500
committerMike Frysinger <vapier@gentoo.org>2012-12-19 15:53:33 -0500
commit12677acf0a0bda4a863279ece65eccda6c36d6b1 (patch)
treec93e3cece76881ebfbc09747fc841db94f2797d5
parent393c395ca50d0b95003d5adfc6d1ca95763cc732 (diff)
downloadbusybox-w32-12677acf0a0bda4a863279ece65eccda6c36d6b1.tar.gz
busybox-w32-12677acf0a0bda4a863279ece65eccda6c36d6b1.tar.bz2
busybox-w32-12677acf0a0bda4a863279ece65eccda6c36d6b1.zip
CONFIG_PID_FILE_PATH: new configuration option for pidfile paths
We set a default path for the directory where pidfiles are create when FEATURE_PIDFILE is selected. The default has no effect on applets which must specify a pidfile path on the command line to run, and it can be overridden by applets which optionally allow the user to specify the pidfile path. We also add pidfile write/remove support for klogd, ntpd and watchdog. For syslogd, we add a missing remove_pidfile() for better cleanup on daemon exit. Signed-off-by: Anthony G. Basile <blueness@gentoo.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r--Config.in13
-rw-r--r--miscutils/crond.c2
-rw-r--r--miscutils/watchdog.c3
-rw-r--r--networking/ifplugd.c2
-rw-r--r--networking/inetd.c6
-rw-r--r--networking/ntpd.c3
-rw-r--r--sysklogd/klogd.c3
-rw-r--r--sysklogd/syslogd.c5
-rw-r--r--util-linux/acpid.c2
9 files changed, 30 insertions, 9 deletions
diff --git a/Config.in b/Config.in
index 17bdc895a..b3fd65bd9 100644
--- a/Config.in
+++ b/Config.in
@@ -310,7 +310,18 @@ config FEATURE_PIDFILE
310 default y 310 default y
311 help 311 help
312 This option makes some applets (e.g. crond, syslogd, inetd) write 312 This option makes some applets (e.g. crond, syslogd, inetd) write
313 a pidfile in /var/run. Some applications rely on them. 313 a pidfile at the configured PID_FILE_PATH. It has no effect
314 on applets which require pidfiles to run.
315
316config PID_FILE_PATH
317 string "Path to directory for pidfile"
318 default "/var/run"
319 depends on FEATURE_PIDFILE
320 help
321 This is the default path where pidfiles are created. Applets which
322 allow you to set the pidfile path on the command line will override
323 this value. The option has no effect on applets that require you to
324 specify a pidfile path.
314 325
315config FEATURE_SUID 326config FEATURE_SUID
316 bool "Support for SUID/SGID handling" 327 bool "Support for SUID/SGID handling"
diff --git a/miscutils/crond.c b/miscutils/crond.c
index a0b73c774..582dc991a 100644
--- a/miscutils/crond.c
+++ b/miscutils/crond.c
@@ -885,7 +885,7 @@ int crond_main(int argc UNUSED_PARAM, char **argv)
885 xsetenv("SHELL", DEFAULT_SHELL); /* once, for all future children */ 885 xsetenv("SHELL", DEFAULT_SHELL); /* once, for all future children */
886 crondlog(LVL8 "crond (busybox "BB_VER") started, log level %d", G.log_level); 886 crondlog(LVL8 "crond (busybox "BB_VER") started, log level %d", G.log_level);
887 rescan_crontab_dir(); 887 rescan_crontab_dir();
888 write_pidfile("/var/run/crond.pid"); 888 write_pidfile(CONFIG_PID_FILE_PATH "/crond.pid");
889 889
890 /* Main loop */ 890 /* Main loop */
891 t2 = time(NULL); 891 t2 = time(NULL);
diff --git a/miscutils/watchdog.c b/miscutils/watchdog.c
index ee28dc30d..d3a76edf0 100644
--- a/miscutils/watchdog.c
+++ b/miscutils/watchdog.c
@@ -31,6 +31,7 @@ static void watchdog_shutdown(int sig UNUSED_PARAM)
31{ 31{
32 static const char V = 'V'; 32 static const char V = 'V';
33 33
34 remove_pidfile(CONFIG_PID_FILE_PATH "/watchdog.pid");
34 write(3, &V, 1); /* Magic, see watchdog-api.txt in kernel */ 35 write(3, &V, 1); /* Magic, see watchdog-api.txt in kernel */
35 if (ENABLE_FEATURE_CLEAN_UP) 36 if (ENABLE_FEATURE_CLEAN_UP)
36 close(3); 37 close(3);
@@ -95,6 +96,8 @@ int watchdog_main(int argc, char **argv)
95 stimer_duration, htimer_duration * 1000); 96 stimer_duration, htimer_duration * 1000);
96#endif 97#endif
97 98
99 write_pidfile(CONFIG_PID_FILE_PATH "/watchdog.pid");
100
98 while (1) { 101 while (1) {
99 /* 102 /*
100 * Make sure we clear the counter before sleeping, 103 * Make sure we clear the counter before sleeping,
diff --git a/networking/ifplugd.c b/networking/ifplugd.c
index 88bf448fa..86586f0fe 100644
--- a/networking/ifplugd.c
+++ b/networking/ifplugd.c
@@ -551,7 +551,7 @@ int ifplugd_main(int argc UNUSED_PARAM, char **argv)
551 applet_name = xasprintf("ifplugd(%s)", G.iface); 551 applet_name = xasprintf("ifplugd(%s)", G.iface);
552 552
553#if ENABLE_FEATURE_PIDFILE 553#if ENABLE_FEATURE_PIDFILE
554 pidfile_name = xasprintf(_PATH_VARRUN"ifplugd.%s.pid", G.iface); 554 pidfile_name = xasprintf(CONFIG_PID_FILE_PATH "/ifplugd.%s.pid", G.iface);
555 pid_from_pidfile = read_pid(pidfile_name); 555 pid_from_pidfile = read_pid(pidfile_name);
556 556
557 if (opts & FLAG_KILL) { 557 if (opts & FLAG_KILL) {
diff --git a/networking/inetd.c b/networking/inetd.c
index 00baf6971..584c5e5e4 100644
--- a/networking/inetd.c
+++ b/networking/inetd.c
@@ -186,8 +186,6 @@
186#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN 0 186#define ENABLE_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN 0
187#endif 187#endif
188 188
189#define _PATH_INETDPID "/var/run/inetd.pid"
190
191#define CNT_INTERVAL 60 /* servers in CNT_INTERVAL sec. */ 189#define CNT_INTERVAL 60 /* servers in CNT_INTERVAL sec. */
192#define RETRYTIME 60 /* retry after bind or server fail */ 190#define RETRYTIME 60 /* retry after bind or server fail */
193 191
@@ -1132,7 +1130,7 @@ static void clean_up_and_exit(int sig UNUSED_PARAM)
1132 if (ENABLE_FEATURE_CLEAN_UP) 1130 if (ENABLE_FEATURE_CLEAN_UP)
1133 close(sep->se_fd); 1131 close(sep->se_fd);
1134 } 1132 }
1135 remove_pidfile(_PATH_INETDPID); 1133 remove_pidfile(CONFIG_PID_FILE_PATH "/inetd.pid");
1136 exit(EXIT_SUCCESS); 1134 exit(EXIT_SUCCESS);
1137} 1135}
1138 1136
@@ -1181,7 +1179,7 @@ int inetd_main(int argc UNUSED_PARAM, char **argv)
1181 setgroups(1, &gid); 1179 setgroups(1, &gid);
1182 } 1180 }
1183 1181
1184 write_pidfile(_PATH_INETDPID); 1182 write_pidfile(CONFIG_PID_FILE_PATH "/inetd.pid");
1185 1183
1186 /* never fails under Linux (except if you pass it bad arguments) */ 1184 /* never fails under Linux (except if you pass it bad arguments) */
1187 getrlimit(RLIMIT_NOFILE, &rlim_ofile); 1185 getrlimit(RLIMIT_NOFILE, &rlim_ofile);
diff --git a/networking/ntpd.c b/networking/ntpd.c
index 5b92db6f6..7facf9484 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -2080,6 +2080,8 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
2080 */ 2080 */
2081 cnt = G.peer_cnt * (INITIAL_SAMPLES + 1); 2081 cnt = G.peer_cnt * (INITIAL_SAMPLES + 1);
2082 2082
2083 write_pidfile(CONFIG_PID_FILE_PATH "/ntpd.pid");
2084
2083 while (!bb_got_signal) { 2085 while (!bb_got_signal) {
2084 llist_t *item; 2086 llist_t *item;
2085 unsigned i, j; 2087 unsigned i, j;
@@ -2195,6 +2197,7 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
2195 } 2197 }
2196 } /* while (!bb_got_signal) */ 2198 } /* while (!bb_got_signal) */
2197 2199
2200 remove_pidfile(CONFIG_PID_FILE_PATH "/ntpd.pid");
2198 kill_myself_with_sig(bb_got_signal); 2201 kill_myself_with_sig(bb_got_signal);
2199} 2202}
2200 2203
diff --git a/sysklogd/klogd.c b/sysklogd/klogd.c
index efa0e537a..f59a155b4 100644
--- a/sysklogd/klogd.c
+++ b/sysklogd/klogd.c
@@ -195,6 +195,8 @@ int klogd_main(int argc UNUSED_PARAM, char **argv)
195 195
196 syslog(LOG_NOTICE, "klogd started: %s", bb_banner); 196 syslog(LOG_NOTICE, "klogd started: %s", bb_banner);
197 197
198 write_pidfile(CONFIG_PID_FILE_PATH "/klogd.pid");
199
198 used = 0; 200 used = 0;
199 while (!bb_got_signal) { 201 while (!bb_got_signal) {
200 int n; 202 int n;
@@ -258,6 +260,7 @@ int klogd_main(int argc UNUSED_PARAM, char **argv)
258 260
259 klogd_close(); 261 klogd_close();
260 syslog(LOG_NOTICE, "klogd: exiting"); 262 syslog(LOG_NOTICE, "klogd: exiting");
263 remove_pidfile(CONFIG_PID_FILE_PATH "/klogd.pid");
261 if (bb_got_signal) 264 if (bb_got_signal)
262 kill_myself_with_sig(bb_got_signal); 265 kill_myself_with_sig(bb_got_signal);
263 return EXIT_FAILURE; 266 return EXIT_FAILURE;
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c
index fc380d9f9..5854bcd0f 100644
--- a/sysklogd/syslogd.c
+++ b/sysklogd/syslogd.c
@@ -916,6 +916,7 @@ static void do_syslogd(void)
916 916
917 timestamp_and_log_internal("syslogd exiting"); 917 timestamp_and_log_internal("syslogd exiting");
918 puts("syslogd exiting"); 918 puts("syslogd exiting");
919 remove_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid");
919 if (ENABLE_FEATURE_IPC_SYSLOG) 920 if (ENABLE_FEATURE_IPC_SYSLOG)
920 ipcsyslog_cleanup(); 921 ipcsyslog_cleanup();
921 kill_myself_with_sig(bb_got_signal); 922 kill_myself_with_sig(bb_got_signal);
@@ -979,8 +980,10 @@ int syslogd_main(int argc UNUSED_PARAM, char **argv)
979 if (!(opts & OPT_nofork)) { 980 if (!(opts & OPT_nofork)) {
980 bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv); 981 bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
981 } 982 }
983
982 //umask(0); - why?? 984 //umask(0); - why??
983 write_pidfile("/var/run/syslogd.pid"); 985 write_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid");
986
984 do_syslogd(); 987 do_syslogd();
985 /* return EXIT_SUCCESS; */ 988 /* return EXIT_SUCCESS; */
986} 989}
diff --git a/util-linux/acpid.c b/util-linux/acpid.c
index 5d2792948..38421c2d7 100644
--- a/util-linux/acpid.c
+++ b/util-linux/acpid.c
@@ -235,7 +235,7 @@ int acpid_main(int argc UNUSED_PARAM, char **argv)
235 const char *opt_action = "/etc/acpid.conf"; 235 const char *opt_action = "/etc/acpid.conf";
236 const char *opt_map = "/etc/acpi.map"; 236 const char *opt_map = "/etc/acpi.map";
237#if ENABLE_FEATURE_PIDFILE 237#if ENABLE_FEATURE_PIDFILE
238 const char *opt_pidfile = "/var/run/acpid.pid"; 238 const char *opt_pidfile = CONFIG_PID_FILE_PATH "/acpid.pid";
239#endif 239#endif
240 240
241 INIT_G(); 241 INIT_G();