1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
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);
|