]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
uuidd: implement --no-fork option
authorPetr Uzel <petr.uzel@suse.cz>
Thu, 3 May 2012 19:01:52 +0000 (21:01 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 4 May 2012 13:13:45 +0000 (15:13 +0200)
With this option, uuidd does not daemonize itself but stays
in the foreground.

Signed-off-by: Petr Uzel <petr.uzel@suse.cz>
misc-utils/uuidd.8
misc-utils/uuidd.c

index 07e533bb74da1c207b36b851390c548b9b9af376..e3ccf6f054f7839f28ed6668844b02cb015a5a70 100644 (file)
@@ -39,6 +39,9 @@ the pid file is written to /var/run/uuidd/uuidd.pid.
 .BR \-P , " \-\-no-pid "
 Do not create pid file.
 .TP
+.BR \-F , " \-\-no-fork "
+Do not daemonize using double-fork.
+.TP
 .B \-q
 Suppress some failure messages.
 .TP
index 50ae61fa8b9de71e3254a063304dea748e6cb83c..5e860779b968a7566a8c52de7a036796ddc2996f 100644 (file)
@@ -66,6 +66,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out)
                " -t, --time          test time-based generation\n"
                " -n, --uuids <num>   request number of uuids\n"
                " -P, --no-pid        do not create pid file\n"
+               " -F, --no-fork       do not daemonize using double-fork\n"
                " -d, --debug         run in debugging mode\n"
                " -q, --quiet         turn on quiet mode\n"
                " -V, --version       output version information and exit\n"
@@ -249,7 +250,7 @@ static int create_pidfile(const char *pidfile_path, int quiet)
 }
 
 static void server_loop(const char *socket_path, const char *pidfile_path,
-                       int debug, int timeout, int quiet)
+                       int debug, int timeout, int quiet, int no_fork)
 {
        struct sockaddr_un      my_addr, from_addr;
        socklen_t               fromlen;
@@ -287,7 +288,7 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
         * Make sure the socket isn't using fd numbers 0-2 to avoid it
         * getting closed by create_daemon()
         */
-       while (!debug && s <= 2) {
+       while ((!debug || no_fork) && s <= 2) {
                s = dup(s);
                if (s < 0)
                        err(EXIT_FAILURE, "dup");
@@ -318,7 +319,7 @@ static void server_loop(const char *socket_path, const char *pidfile_path,
        }
 
        cleanup_socket = socket_path;
-       if (!debug)
+       if (!debug && !no_fork)
                create_daemon();
        signal(SIGHUP, terminate_intr);
        signal(SIGINT, terminate_intr);
@@ -462,7 +463,7 @@ int main(int argc, char **argv)
        int             i, c, ret;
        int             debug = 0, do_type = 0, do_kill = 0, num = 0;
        int             timeout = 0, quiet = 0, drop_privs = 0;
-       int             no_pid = 0;
+       int             no_pid = 0, no_fork = 0;
 
        static const struct option longopts[] = {
                {"pid", required_argument, NULL, 'p'},
@@ -473,6 +474,7 @@ int main(int argc, char **argv)
                {"time", no_argument, NULL, 't'},
                {"uuids", required_argument, NULL, 'n'},
                {"no-pid", no_argument, NULL, 'P'},
+               {"no-fork", no_argument, NULL, 'F'},
                {"debug", no_argument, NULL, 'd'},
                {"quiet", no_argument, NULL, 'q'},
                {"version", no_argument, NULL, 'V'},
@@ -486,7 +488,7 @@ int main(int argc, char **argv)
        atexit(close_stdout);
 
        while ((c =
-               getopt_long(argc, argv, "p:s:T:krtn:PdqVh", longopts,
+               getopt_long(argc, argv, "p:s:T:krtn:PFdqVh", longopts,
                            NULL)) != -1) {
                switch (c) {
                case 'd':
@@ -512,6 +514,10 @@ int main(int argc, char **argv)
                        no_pid = 1;
                        drop_privs = 1;
                        break;
+               case 'F':
+                       no_fork = 1;
+                       drop_privs = 1;
+                       break;
                case 'q':
                        quiet++;
                        break;
@@ -637,6 +643,6 @@ int main(int argc, char **argv)
                return EXIT_SUCCESS;
        }
 
-       server_loop(socket_path, pidfile_path, debug, timeout, quiet);
+       server_loop(socket_path, pidfile_path, debug, timeout, quiet, no_fork);
        return EXIT_SUCCESS;
 }