svn commit: trunk/busybox: debianutils include libbb networking net etc...

vda at busybox.net vda at busybox.net
Thu Aug 2 10:14:31 UTC 2007


Author: vda
Date: 2007-08-02 03:14:29 -0700 (Thu, 02 Aug 2007)
New Revision: 19396

Log:
start_stop_daemon: NOMMU fixes, round 2 by Alex Landau <landau_alex at yahoo.com>
dhcpc: fixed "ifupdown + udhcpc_without_pidpile_creation" bug



Modified:
   trunk/busybox/debianutils/start_stop_daemon.c
   trunk/busybox/include/libbb.h
   trunk/busybox/libbb/pidfile.c
   trunk/busybox/networking/ifupdown.c
   trunk/busybox/networking/udhcp/dhcpc.c


Changeset:
Modified: trunk/busybox/debianutils/start_stop_daemon.c
===================================================================
--- trunk/busybox/debianutils/start_stop_daemon.c	2007-08-01 23:30:54 UTC (rev 19395)
+++ trunk/busybox/debianutils/start_stop_daemon.c	2007-08-02 10:14:29 UTC (rev 19396)
@@ -14,6 +14,8 @@
 #include <getopt.h>
 #include <sys/resource.h>
 
+/* Override ENABLE_FEATURE_PIDFILE */
+#define WANT_PIDFILE 1
 #include "libbb.h"
 
 static int signal_nr = 15;
@@ -46,7 +48,7 @@
 	n = strcmp(execbuf, name);
 	if (ENABLE_FEATURE_CLEAN_UP)
 		free(execbuf);
-	return ~n; /* nonzero (true) if execbuf == name */
+	return !n; /* nonzero (true) if execbuf == name */
 }
 
 static int pid_is_user(int pid, int uid)
@@ -301,10 +303,14 @@
 		pid_t pid = vfork();
 		if (pid < 0) /* error */
 			bb_perror_msg_and_die("vfork");
-		if (pid == 0) /* parent */
-			return 0;
+		if (pid != 0) {
+			/* parent */
+			/* why _exit? the child may have changed the stack,
+			 * so "return 0" may do bad things */
+			_exit(0);
 		}
 		/* child */
+		setsid(); /* detach from controlling tty */
 		/* Redirect stdio to /dev/null, close extra FDs.
 		 * We do not actually daemonize because of DAEMON_ONLY_SANITIZE */
 		bb_daemonize_or_rexec(
@@ -316,11 +322,7 @@
 	}
 	if (opt & OPT_MAKEPID) {
 		/* user wants _us_ to make the pidfile */
-		FILE *pidf = xfopen(pidfile, "w");
-
-		pid_t pidt = getpid();
-		fprintf(pidf, "%d\n", pidt);
-		fclose(pidf);
+		write_pidfile(pidfile);
 	}
 	if (opt & OPT_c) {
 		struct bb_uidgid_t ugid;

Modified: trunk/busybox/include/libbb.h
===================================================================
--- trunk/busybox/include/libbb.h	2007-08-01 23:30:54 UTC (rev 19395)
+++ trunk/busybox/include/libbb.h	2007-08-02 10:14:29 UTC (rev 19396)
@@ -619,8 +619,9 @@
  *   llist_t *llist_add_to(llist_t *old_head, void *data)
  * etc does not result in smaller code... */
 
-
-#if ENABLE_FEATURE_PIDFILE
+/* start_stop_daemon and (udhcpc with ifupdown) are special - they want to
+ * create pidfiles regardless of FEATURE_PIDFILE. */
+#if ENABLE_FEATURE_PIDFILE || defined(WANT_PIDFILE)
 int write_pidfile(const char *path);
 #define remove_pidfile(f) ((void)unlink(f))
 #else

Modified: trunk/busybox/libbb/pidfile.c
===================================================================
--- trunk/busybox/libbb/pidfile.c	2007-08-01 23:30:54 UTC (rev 19395)
+++ trunk/busybox/libbb/pidfile.c	2007-08-02 10:14:29 UTC (rev 19396)
@@ -6,9 +6,11 @@
  *
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
+
+/* Override ENABLE_FEATURE_PIDFILE */
+#define WANT_PIDFILE 1
 #include "libbb.h"
 
-#if ENABLE_FEATURE_PIDFILE
 int write_pidfile(const char *path)
 {
 	int pid_fd;
@@ -26,4 +28,3 @@
 	close(pid_fd);
 	return 1;
 }
-#endif

Modified: trunk/busybox/networking/ifupdown.c
===================================================================
--- trunk/busybox/networking/ifupdown.c	2007-08-01 23:30:54 UTC (rev 19395)
+++ trunk/busybox/networking/ifupdown.c	2007-08-02 10:14:29 UTC (rev 19396)
@@ -536,8 +536,8 @@
 static int bootp_up(struct interface_defn_t *ifd, execfn *exec)
 {
 	return execute("bootpc[[ --bootfile %bootfile%]] --dev %iface%"
-			"[[ --server %server%]][[ --hwaddr %hwaddr%]] "
-			"--returniffail --serverbcast", ifd, exec);
+			"[[ --server %server%]][[ --hwaddr %hwaddr%]]"
+			" --returniffail --serverbcast", ifd, exec);
 }
 
 static int ppp_up(struct interface_defn_t *ifd, execfn *exec)

Modified: trunk/busybox/networking/udhcp/dhcpc.c
===================================================================
--- trunk/busybox/networking/udhcp/dhcpc.c	2007-08-01 23:30:54 UTC (rev 19395)
+++ trunk/busybox/networking/udhcp/dhcpc.c	2007-08-02 10:14:29 UTC (rev 19396)
@@ -11,6 +11,8 @@
 #include <getopt.h>
 #include <syslog.h>
 
+/* Override ENABLE_FEATURE_PIDFILE - ifupdown needs our pidfile to always exist */
+#define WANT_PIDFILE 1
 #include "common.h"
 #include "dhcpd.h"
 #include "dhcpc.h"




More information about the busybox-cvs mailing list