diff options
Diffstat (limited to 'source3/nmbd')
-rw-r--r-- | source3/nmbd/nmbd.c | 61 | ||||
-rw-r--r-- | source3/nmbd/nmbd_packets.c | 2 |
2 files changed, 31 insertions, 32 deletions
diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c index b9d78a8ba9..dc03506194 100644 --- a/source3/nmbd/nmbd.c +++ b/source3/nmbd/nmbd.c @@ -32,6 +32,15 @@ extern BOOL global_in_nmbd; extern BOOL override_logfile; +/* are we running as a daemon ? */ +static BOOL is_daemon; + +/* fork or run in foreground ? */ +static BOOL Fork = True; + +/* log to standard output ? */ +static BOOL log_stdout; + /* have we found LanMan clients yet? */ BOOL found_lm_clients = False; @@ -609,7 +618,7 @@ static void process(void) Open the socket communication. **************************************************************************** */ -static BOOL open_sockets(enum smb_server_mode server_mode, int port) +static BOOL open_sockets(BOOL isdaemon, int port) { /* * The sockets opened here will be used to receive broadcast @@ -619,13 +628,12 @@ static BOOL open_sockets(enum smb_server_mode server_mode, int port) * now deprecated. */ - if ( server_mode == SERVER_MODE_INETD ) { - ClientNMB = 0; - } else { + if ( isdaemon ) ClientNMB = open_socket_in(SOCK_DGRAM, port, 0, interpret_addr(lp_socket_address()), True); - } + else + ClientNMB = 0; ClientDGRAM = open_socket_in(SOCK_DGRAM, DGRAM_PORT, 3, interpret_addr(lp_socket_address()), @@ -654,21 +662,16 @@ static BOOL open_sockets(enum smb_server_mode server_mode, int port) int main(int argc, const char *argv[]) { pstring logfile; + static BOOL opt_interactive; poptContext pc; - const char *p_lmhosts = dyn_LMHOSTSFILE; - BOOL no_process_group = False; - BOOL log_stdout = False; - enum smb_server_mode server_mode = SERVER_MODE_DAEMON; + static char *p_lmhosts = dyn_LMHOSTSFILE; + static BOOL no_process_group = False; int opt; - struct poptOption long_options[] = { POPT_AUTOHELP - {"daemon", 'D', POPT_ARG_VAL, &server_mode, SERVER_MODE_DAEMON, - "Become a daemon(default)" }, - {"interactive", 'i', POPT_ARG_VAL, &server_mode, - SERVER_MODE_INTERACTIVE, "Run interactive (not a daemon)" }, - {"foreground", 'F', POPT_ARG_VAL, &server_mode, - SERVER_MODE_FOREGROUND, "Run daemon in foreground (for daemontools & etc)" }, + {"daemon", 'D', POPT_ARG_VAL, &is_daemon, True, "Become a daemon(default)" }, + {"interactive", 'i', POPT_ARG_VAL, &opt_interactive, True, "Run interactive (not a daemon)" }, + {"foreground", 'F', POPT_ARG_VAL, &Fork, False, "Run daemon in foreground (for daemontools & etc)" }, {"no-process-group", 0, POPT_ARG_VAL, &no_process_group, True, "Don't create a new process group" }, {"log-stdout", 'S', POPT_ARG_VAL, &log_stdout, True, "Log to stdout" }, {"hosts", 'H', POPT_ARG_STRING, &p_lmhosts, 'H', "Load a netbios hosts file"}, @@ -726,11 +729,12 @@ static BOOL open_sockets(enum smb_server_mode server_mode, int port) BlockSignals(True, SIGUSR2); #endif - if (server_mode == SERVER_MODE_INTERACTIVE) { + if ( opt_interactive ) { + Fork = False; log_stdout = True; } - if (log_stdout && server_mode == SERVER_MODE_DAEMON) { + if ( log_stdout && Fork ) { DEBUG(0,("ERROR: Can't log to stdout (-S) unless daemon is in foreground (-F) or interactive (-i)\n")); exit(1); } @@ -757,19 +761,14 @@ static BOOL open_sockets(enum smb_server_mode server_mode, int port) set_samba_nb_type(); - if (is_a_socket(0)) { - if (server_mode == SERVER_MODE_DAEMON) { - DEBUG(0,("standard input is a socket, " - "assuming -F option\n")); - } - server_mode = SERVER_MODE_INETD; + if (!is_daemon && !is_a_socket(0)) { + DEBUG(0,("standard input is not a socket, assuming -D option\n")); + is_daemon = True; } - - if (server_mode == SERVER_MODE_DAEMON) { + + if (is_daemon && !opt_interactive) { DEBUG( 2, ( "Becoming a daemon.\n" ) ); - become_daemon(True, no_process_group); - } else if (server_mode == SERVER_MODE_FOREGROUND) { - become_daemon(False, no_process_group); + become_daemon(Fork, no_process_group); } #if HAVE_SETPGID @@ -777,7 +776,7 @@ static BOOL open_sockets(enum smb_server_mode server_mode, int port) * If we're interactive we want to set our own process group for * signal management. */ - if (server_mode == SERVER_MODE_INTERACTIVE && !no_process_group) + if (opt_interactive && !no_process_group) setpgid( (pid_t)0, (pid_t)0 ); #endif @@ -816,7 +815,7 @@ static BOOL open_sockets(enum smb_server_mode server_mode, int port) DEBUG( 3, ( "Opening sockets %d\n", global_nmb_port ) ); - if ( !open_sockets( server_mode, global_nmb_port ) ) { + if ( !open_sockets( is_daemon, global_nmb_port ) ) { kill_async_dns_child(); return 1; } diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c index bf01075d14..875e13fdc8 100644 --- a/source3/nmbd/nmbd_packets.c +++ b/source3/nmbd/nmbd_packets.c @@ -1904,7 +1904,7 @@ BOOL send_mailslot(BOOL unique, const char *mailslot,char *buf, size_t len, /* Setup the smb part. */ ptr -= 4; /* XXX Ugliness because of handling of tcp SMB length. */ memcpy(tmp,ptr,4); - set_message(NULL,ptr,17,strlen(mailslot) + 1 + len,True); + set_message(ptr,17,strlen(mailslot) + 1 + len,True); memcpy(ptr,tmp,4); SCVAL(ptr,smb_com,SMBtrans); |