]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
nmbd: use POPT_COMMON_DAEMON
authorRalph Boehme <slow@samba.org>
Fri, 3 Sep 2021 10:14:19 +0000 (12:14 +0200)
committerRalph Boehme <slow@samba.org>
Mon, 6 Sep 2021 13:26:35 +0000 (13:26 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14803

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/nmbd/nmbd.c

index c33d3a441ae2d3bc2c92cb3069d7631590d11b34..d43c52bb406f5321919a5ca9bb23d55e166ef79f 100644 (file)
@@ -771,56 +771,14 @@ static bool open_sockets(bool isdaemon, int port)
 
  int main(int argc, const char *argv[])
 {
-       bool is_daemon = false;
-       bool opt_interactive = false;
-       bool Fork = true;
-       bool no_process_group = false;
+       struct samba_cmdline_daemon_cfg *cmdline_daemon_cfg = NULL;
        bool log_stdout = false;
        poptContext pc;
        char *p_lmhosts = NULL;
        int opt;
        struct messaging_context *msg;
-       enum {
-               OPT_DAEMON = 1000,
-               OPT_INTERACTIVE,
-               OPT_FORK,
-               OPT_NO_PROCESS_GROUP
-       };
        struct poptOption long_options[] = {
                POPT_AUTOHELP
-               {
-                       .longName   = "daemon",
-                       .shortName  = 'D',
-                       .argInfo    = POPT_ARG_NONE,
-                       .arg        = NULL,
-                       .val        = OPT_DAEMON,
-                       .descrip    = "Become a daemon (default)",
-               },
-               {
-                       .longName   = "interactive",
-                       .shortName  = 'i',
-                       .argInfo    = POPT_ARG_NONE,
-                       .arg        = NULL,
-                       .val        = OPT_INTERACTIVE,
-                       .descrip    = "Run interactive (not a daemon)",
-               },
-               {
-                       .longName   = "foreground",
-                       .shortName  = 'F',
-                       .argInfo    = POPT_ARG_NONE,
-                       .arg        = NULL,
-                       .val        = OPT_FORK,
-                       .descrip    = "Run daemon in foreground "
-                                     "(for daemontools, etc.)",
-               },
-               {
-                       .longName   = "no-process-group",
-                       .shortName  = 0,
-                       .argInfo    = POPT_ARG_NONE,
-                       .arg        = NULL,
-                       .val        = OPT_NO_PROCESS_GROUP,
-                       .descrip    = "Don't create a new process group",
-               },
                {
                        .longName   = "hosts",
                        .shortName  = 'H',
@@ -838,6 +796,7 @@ static bool open_sockets(bool isdaemon, int port)
                        .descrip    = "Listen on the specified port",
                },
                POPT_COMMON_SAMBA
+               POPT_COMMON_DAEMON
                POPT_COMMON_VERSION
                POPT_TABLEEND
        };
@@ -870,6 +829,8 @@ static bool open_sockets(bool isdaemon, int port)
                exit(ENOMEM);
        }
 
+       cmdline_daemon_cfg = samba_cmdline_get_daemon_cfg();
+
        global_nmb_port = NMB_PORT;
 
        pc = samba_popt_get_context(getprogname(),
@@ -884,25 +845,9 @@ static bool open_sockets(bool isdaemon, int port)
        }
 
        while ((opt = poptGetNextOpt(pc)) != -1) {
-               switch (opt) {
-               case OPT_DAEMON:
-                       is_daemon = true;
-                       break;
-               case OPT_INTERACTIVE:
-                       opt_interactive = true;
-                       break;
-               case OPT_FORK:
-                       Fork = false;
-                       break;
-               case OPT_NO_PROCESS_GROUP:
-                       no_process_group = true;
-                       break;
-               default:
-                       d_fprintf(stderr, "\nInvalid option %s: %s\n\n",
-                                 poptBadOption(pc, 0), poptStrerror(opt));
-                       poptPrintUsage(pc, stderr, 0);
-                       exit(1);
-               }
+               d_fprintf(stderr, "\nInvalid options\n\n");
+               poptPrintUsage(pc, stderr, 0);
+               exit(1);
        };
        poptFreeContext(pc);
 
@@ -943,27 +888,20 @@ static bool open_sockets(bool isdaemon, int port)
        CatchChild();
 
        log_stdout = (debug_get_log_type() == DEBUG_STDOUT);
-       if ( opt_interactive ) {
-               Fork = False;
+       if ( cmdline_daemon_cfg->interactive ) {
                log_stdout = True;
        }
 
-       if ( log_stdout && Fork ) {
+       if ( log_stdout && cmdline_daemon_cfg->fork ) {
                DEBUG(0,("ERROR: Can't log to stdout (-S) unless daemon is in foreground (-F) or interactive (-i)\n"));
                exit(1);
        }
 
-       if (!log_stdout) {
-               setup_logging( argv[0], DEBUG_FILE);
-       }
-
        reopen_logs();
 
        DEBUG(0,("nmbd version %s started.\n", samba_version_string()));
        DEBUGADD(0,("%s\n", COPYRIGHT_STARTUP_MESSAGE));
 
-       reopen_logs();
-
        if (lp_server_role() == ROLE_ACTIVE_DIRECTORY_DC
            && !lp_parm_bool(-1, "server role check", "inhibit", false)) {
                /* TODO: when we have a merged set of defaults for
@@ -1000,15 +938,17 @@ static bool open_sockets(bool isdaemon, int port)
 
        set_samba_nb_type();
 
-       if (!is_daemon && !is_a_socket(0)) {
+       if (!cmdline_daemon_cfg->daemon && !is_a_socket(0)) {
                DEBUG(3, ("standard input is not a socket, assuming -D option\n"));
-               is_daemon = True;
+               cmdline_daemon_cfg->daemon = true;
        }
 
-       if (is_daemon && !opt_interactive) {
+       if (cmdline_daemon_cfg->daemon && !cmdline_daemon_cfg->interactive) {
                DEBUG(3, ("Becoming a daemon.\n"));
-               become_daemon(Fork, no_process_group, log_stdout);
-       } else if (!opt_interactive) {
+               become_daemon(cmdline_daemon_cfg->fork,
+                             cmdline_daemon_cfg->no_process_group,
+                             log_stdout);
+       } else if (!cmdline_daemon_cfg->interactive) {
                daemon_status("nmbd", "Starting process...");
        }
 
@@ -1017,8 +957,11 @@ static bool open_sockets(bool isdaemon, int port)
         * If we're interactive we want to set our own process group for 
         * signal management.
         */
-       if (opt_interactive && !no_process_group)
+       if (cmdline_daemon_cfg->interactive &&
+           !cmdline_daemon_cfg->no_process_group)
+       {
                setpgid( (pid_t)0, (pid_t)0 );
+       }
 #endif
 
 #ifndef SYNC_DNS
@@ -1059,7 +1002,7 @@ static bool open_sockets(bool isdaemon, int port)
 
        if (!nmbd_setup_sig_term_handler(msg))
                exit_daemon("NMBD failed to setup signal handler", EINVAL);
-       if (!nmbd_setup_stdin_handler(msg, !Fork))
+       if (!nmbd_setup_stdin_handler(msg, !cmdline_daemon_cfg->fork))
                exit_daemon("NMBD failed to setup stdin handler", EINVAL);
        if (!nmbd_setup_sig_hup_handler(msg))
                exit_daemon("NMBD failed to setup SIGHUP handler", EINVAL);
@@ -1086,7 +1029,7 @@ static bool open_sockets(bool isdaemon, int port)
 
        DEBUG( 3, ( "Opening sockets %d\n", global_nmb_port ) );
 
-       if ( !open_sockets( is_daemon, global_nmb_port ) ) {
+       if ( !open_sockets( cmdline_daemon_cfg->daemon, global_nmb_port ) ) {
                kill_async_dns_child();
                return 1;
        }
@@ -1136,7 +1079,7 @@ static bool open_sockets(bool isdaemon, int port)
                exit_daemon( "NMBD failed to setup packet server.", EACCES);
        }
 
-       if (!opt_interactive) {
+       if (!cmdline_daemon_cfg->interactive) {
                daemon_ready("nmbd");
        }