move everything to new NOMMU helpers, except udhcp
authorDenis Vlasenko <vda.linux@googlemail.com>
Mon, 26 Mar 2007 13:20:54 +0000 (13:20 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Mon, 26 Mar 2007 13:20:54 +0000 (13:20 -0000)
debianutils/start_stop_daemon.c
miscutils/crond.c
miscutils/watchdog.c
networking/dnsd.c
networking/httpd.c
networking/inetd.c
networking/isrv_identd.c
networking/telnetd.c
networking/zcip.c
sysklogd/klogd.c
sysklogd/syslogd.c

index 1862f113db8b013bebba379703b25aa26eab34a0..60a78793e1f7adcec9e4086a1da95c2f985f176a 100644 (file)
@@ -299,8 +299,7 @@ int start_stop_daemon_main(int argc, char **argv)
        }
        *--argv = startas;
        if (opt & OPT_BACKGROUND) {
-               setsid();
-               bb_daemonize();
+               bb_daemonize(0);
        }
        if (opt & OPT_MAKEPID) {
                /* user wants _us_ to make the pidfile */
index 1ab0038e0390951449b7379972934879803083e0..9d511f960f3a370a4767b2fabe7fdb6e9c5d7a05 100644 (file)
@@ -136,75 +136,43 @@ int crond_main(int ac, char **av)
 {
        unsigned opt;
        char *lopt, *Lopt, *copt;
+       USE_DEBUG_CROND_OPTION(char *dopt;)
 
-#if ENABLE_DEBUG_CROND_OPTION
-       char *dopt;
-
-       opt_complementary = "f-b:b-f:S-L:L-S:d-l";
-#else
-       opt_complementary = "f-b:b-f:S-L:L-S";
-#endif
-
+       opt_complementary = "f-b:b-f:S-L:L-S" USE_DEBUG_CROND_OPTION(":d-l");
        opterr = 0;                     /* disable getopt 'errors' message. */
-       opt = getopt32(ac, av, "l:L:fbSc:"
-#if ENABLE_DEBUG_CROND_OPTION
-                                                       "d:"
-#endif
-                                                       , &lopt, &Lopt, &copt
-#if ENABLE_DEBUG_CROND_OPTION
-                                                       , &dopt
-#endif
-               );
-       if (opt & 1) {
+       opt = getopt32(ac, av, "l:L:fbSc:" USE_DEBUG_CROND_OPTION("d:"),
+                       &lopt, &Lopt, &copt USE_DEBUG_CROND_OPTION(, &dopt));
+       if (opt & 1) /* -l */
                LogLevel = xatou(lopt);
-       }
-       if (opt & 2) {
-               if (*Lopt != 0) {
+       if (opt & 2) /* -L */
+               if (*Lopt)
                        LogFile = Lopt;
-               }
-       }
-       if (opt & 32) {
-               if (*copt != 0) {
+       if (opt & 32) /* -c */
+               if (*copt)
                        CDir = copt;
-               }
-       }
 #if ENABLE_DEBUG_CROND_OPTION
-       if (opt & 64) {
+       if (opt & 64) { /* -d */
                DebugOpt = xatou(dopt);
                LogLevel = 0;
        }
 #endif
 
-       /*
-        * change directory
-        */
-
-       xchdir(CDir);
-       signal(SIGHUP, SIG_IGN);        /* hmm.. but, if kill -HUP original
-                                                                * version - his died. ;(
-                                                                */
-       /*
-        * close stdin and stdout, stderr.
+       /* close stdin and stdout, stderr.
         * close unused descriptors -  don't need.
         * optional detach from controlling terminal
         */
+       if (!(opt & 4))
+               bb_daemonize_or_rexec(DAEMON_CLOSE_EXTRA_FDS, av);
 
-       if (!(opt & 4)) {
-#ifdef BB_NOMMU
-               if (!re_execed)
-                       vfork_daemon_rexec(1, 0, av);
-#else
-               xdaemon(1, 0);
-#endif
-       }
+       xchdir(CDir);
+       signal(SIGHUP, SIG_IGN); /* ? original crond dies on HUP... */
 
-       (void) startlogger();   /* need if syslog mode selected */
+       startlogger();  /* need if syslog mode selected */
 
        /*
         * main loop - synchronize to 1 second after the minute, minimum sleep
         *             of 1 second.
         */
-
        crondlog("\011%s " VERSION " dillon, started, log level %d\n",
                         applet_name, LogLevel);
 
index e3d77d17eed165a4daeb069cf80f554d059a8fb3..28ae9bdb04a485097fb819a7a01d51431985ef51 100644 (file)
@@ -29,29 +29,21 @@ int watchdog_main(int argc, char **argv)
        unsigned timer_duration = 30; /* Userspace timer duration, in seconds */
        char *t_arg;
 
+       opt_complementary = "=1"; /* must have 1 argument */
        opts = getopt32(argc, argv, "Ft:", &t_arg);
 
        if (opts & OPT_TIMER)
                timer_duration = xatou(t_arg);
 
-       /* We're only interested in the watchdog device .. */
-       if (optind < argc - 1 || argc == 1)
-               bb_show_usage();
-
        if (!(opts & OPT_FOREGROUND)) {
-#ifdef BB_NOMMU
-               if (!re_execed)
-                       vfork_daemon_rexec(0, 1, argv);
-#else
-               xdaemon(0, 1);
-#endif
+               bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
        }
 
        signal(SIGHUP, watchdog_shutdown);
        signal(SIGINT, watchdog_shutdown);
 
        /* Use known fd # - avoid needing global 'int fd' */
-       dup2(xopen(argv[argc - 1], O_WRONLY), 3);
+       xmove_fd(xopen(argv[argc - 1], O_WRONLY), 3);
 
        while (1) {
                /*
@@ -63,6 +55,5 @@ int watchdog_main(int argc, char **argv)
        }
 
        watchdog_shutdown(0);
-
        /* return EXIT_SUCCESS; */
 }
index c9c7b3a7c4f5ce664e8134608fb2758f07537a74..8807bbedc8d1661064285516b1be59711f587024 100644 (file)
@@ -353,12 +353,7 @@ int dnsd_main(int argc, char **argv)
        }
 
        if (OPT_daemon) {
-#ifdef BB_NOMMU
-               if (!re_execed)
-                       vfork_daemon_rexec(1, 0, argv);
-#else
-               xdaemon(1, 0);
-#endif
+               bb_daemonize_or_rexec(DAEMON_CLOSE_EXTRA_FDS, argv);
                openlog(applet_name, LOG_PID, LOG_DAEMON);
                logmode = LOGMODE_SYSLOG;
        }
index 72b03de792b0671fd5619485caa0ae11fad18541..b8d9b6b6fae5c62e3535989cb91a51b0aed4e9a6 100644 (file)
@@ -2044,6 +2044,6 @@ int httpd_main(int argc, char *argv[])
                return miniHttpd_inetd();
 
        if (!(opt & OPT_FOREGROUND))
-               xdaemon(1, 0);     /* don't change current directory */
+               bb_daemonize(0);     /* don't change current directory */
        return miniHttpd(config->server_socket);
 }
index 83123463f9db84a9dc1caffacc9840ea07325d14..4faa4203a767f65320db189da8b9839202522ebe 100644 (file)
@@ -1274,30 +1274,24 @@ int inetd_main(int argc, char *argv[])
        LastArg = envp[-1] + strlen(envp[-1]);
 #endif
 
-       opt = getopt32(argc, argv, "R:f", &stoomany);
-       if(opt & 1) {
-               toomany = xatoi_u(stoomany);
-       }
-       argc -= optind;
-       argv += optind;
-
        uid = getuid();
        if (uid != 0)
                config_filename = NULL;
-       if (argc > 0)
+
+       opt = getopt32(argc, argv, "R:f", &stoomany);
+       if (opt & 1)
+               toomany = xatoi_u(stoomany);
+       argv += optind;
+       argc -= optind;
+       if (argc)
                config_filename = argv[0];
        if (config_filename == NULL)
                bb_error_msg_and_die("non-root must specify a config file");
 
-#ifdef BB_NOMMU
-       if (!(opt & 2)) {
-               if (!re_execed)
-                       vfork_daemon_rexec(0, 0, argv);
-       }
-       bb_sanitize_stdio();
-#else
-       bb_sanitize_stdio_maybe_daemonize(!(opt & 2));
-#endif
+       if (!(opt & 2))
+               bb_daemonize_or_rexec(0, argv - optind);
+       else
+               bb_sanitize_stdio();
        openlog(applet_name, LOG_PID | LOG_NOWAIT, LOG_DAEMON);
        logmode = LOGMODE_SYSLOG;
 
index f9ab0b2c0e291648591a8c95fa56afeaff1912bc..c230c7ec30c20eab0ec6b699a7f9e7f527b0a007 100644 (file)
@@ -112,7 +112,9 @@ int fakeidentd_main(int argc, char **argv)
                bogouser = argv[optind];
 
        /* Daemonize if no -f and no -i and no -w */
-       bb_sanitize_stdio_maybe_daemonize(!(opt & OPT_fiw));
+       if (!(opt & OPT_fiw));
+               bb_daemonize_or_rexec(0, argv);
+
        /* Where to log in inetd modes? "Classic" inetd
         * probably has its stderr /dev/null'ed (we need log to syslog?),
         * but daemontools-like utilities usually expect that children
index ef9b1ac74dee9ff2f84df6814486d6f981b06aa6..5c0463bab6ef51a6b1b260fcd2f3254de62ca3bc 100644 (file)
@@ -415,7 +415,7 @@ int telnetd_main(int argc, char **argv)
                master_fd = create_and_bind_stream_or_die(opt_bindaddr, portnbr);
                xlisten(master_fd, 1);
                if (!(opt & OPT_FOREGROUND))
-                       xdaemon(0, 0);
+                       bb_daemonize(DAEMON_CHDIR_ROOT);
        }
 #else
        sessions = make_new_session();
index c50d5abafef60884e53ab813c1d4f7b6ec6af265..c0cf665ddee6264ef8f27bd0c150e2f8b09fc18b 100644 (file)
@@ -271,9 +271,8 @@ int zcip_main(int argc, char *argv[])
 
        // daemonize now; don't delay system startup
        if (!FOREGROUND) {
-               /* bb_daemonize(); - bad, will close fd! */
 //NOMMU
-               xdaemon(0, 0);
+               bb_daemonize(DAEMON_CHDIR_ROOT);
                bb_info_msg("start, interface %s", intf);
        }
 
index fc0ed303769ca835244de37b8c2e015c97d11e15..62425394c9df54e065b5ca70bb492d07667652a8 100644 (file)
@@ -50,12 +50,7 @@ int klogd_main(int argc, char **argv)
        }
 
        if (!(option_mask32 & OPT_FOREGROUND)) {
-#ifdef BB_NOMMU
-               if (!re_execed)
-                       vfork_daemon_rexec(0, 1, argv);
-#else
-               bb_daemonize();
-#endif
+               bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
        }
 
        openlog("kernel", 0, LOG_KERN);
index 437212372948361f7e5bb08e0a36d90c32c26451..51627bd823de1d46234562888bef87c7119686e5 100644 (file)
@@ -642,12 +642,7 @@ int syslogd_main(int argc, char **argv)
        }
 
        if (!(option_mask32 & OPT_nofork)) {
-#ifdef BB_NOMMU
-               if (!re_execed)
-                       vfork_daemon_rexec(0, 1, argv);
-#else
-               bb_daemonize();
-#endif
+               bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
        }
        umask(0);
        do_syslogd();