aboutsummaryrefslogblamecommitdiffstats
path: root/main/fprobe/fprobe-1.1-pidfile-sanity.patch
blob: e7c10bd98d0d2f5c864fe3a42285dc4b40989a56 (plain) (tree)















































                                                                                                               
If we are using the chroot() option or the setuid options, we must create the
pidfile before doing the chroot OR the setreuid. It's actually best for
start-stop-daemon if we create the pidfile from the master side of the fork()
before it exits, since most of the startup checks happen after the chroot()
unfortunetly.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>

diff -Nuar fprobe-1.1.orig/src/fprobe.c fprobe-1.1/src/fprobe.c
--- fprobe-1.1.orig/src/fprobe.c	2005-01-30 08:43:35.000000000 +0000
+++ fprobe-1.1/src/fprobe.c	2008-03-16 20:51:24.000000000 +0000
@@ -1379,7 +1379,8 @@
 
 	my_log_open(ident, verbosity, log_dest);
 	if (!(log_dest & 2)) {
-		switch (fork()) {
+		pid_t childpid = fork();
+		switch (childpid) {
 			case -1:
 				fprintf(stderr, "fork(): %s", strerror(errno));
 				exit(1);
@@ -1392,6 +1393,12 @@
 				break;
 
 			default:
+				if (!(pidfile = fopen(pidfilepath, "w")))
+					my_log(LOG_ERR, "Can't create pid file. fopen(): %s", strerror(errno));
+				else {
+					fprintf(pidfile, "%ld\n", (long) childpid);
+					fclose(pidfile);
+				}
 				exit(0);
 		}
 	} else {
@@ -1548,13 +1555,6 @@
 		}
 	}
 
-	if (!(pidfile = fopen(pidfilepath, "w")))
-		my_log(LOG_ERR, "Can't create pid file. fopen(): %s", strerror(errno));
-	else {
-		fprintf(pidfile, "%ld\n", (long) pid);
-		fclose(pidfile);
-	}
-
 	my_log(LOG_INFO, "pid: %d", pid);
 	my_log(LOG_INFO, "interface: %s, datalink: %s (%d)",
 		dev, dlt[link_type_idx].descr, link_type);