diff options
Diffstat (limited to 'source3/nsswitch/winbindd.c')
-rw-r--r-- | source3/nsswitch/winbindd.c | 145 |
1 files changed, 52 insertions, 93 deletions
diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c index 358d9add3a..4f64790236 100644 --- a/source3/nsswitch/winbindd.c +++ b/source3/nsswitch/winbindd.c @@ -4,7 +4,6 @@ Winbind daemon for ntdom nss module Copyright (C) by Tim Potter 2000, 2001 - Copyright (C) Andrew Tridgell 2002 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,8 +26,7 @@ struct winbindd_cli_state *client_list; static int num_clients; -BOOL opt_nocache = False; -BOOL opt_dual_daemon = False; +BOOL opt_nocache; /* Reload configuration */ @@ -223,7 +221,6 @@ static struct dispatch_table dispatch_table[] = { { WINBINDD_SETGRENT, winbindd_setgrent, "SETGRENT" }, { WINBINDD_ENDGRENT, winbindd_endgrent, "ENDGRENT" }, { WINBINDD_GETGRENT, winbindd_getgrent, "GETGRENT" }, - { WINBINDD_GETGRLST, winbindd_getgrent, "GETGRLST" }, /* PAM auth functions */ @@ -368,10 +365,9 @@ static void remove_client(struct winbindd_cli_state *state) } } - /* Process a complete received packet from a client */ -void winbind_process_packet(struct winbindd_cli_state *state) +static void process_packet(struct winbindd_cli_state *state) { /* Process request */ @@ -383,16 +379,11 @@ void winbind_process_packet(struct winbindd_cli_state *state) state->read_buf_len = 0; state->write_buf_len = sizeof(struct winbindd_response); - - /* we might need to send it to the dual daemon */ - if (opt_dual_daemon) { - dual_send_request(state); - } } /* Read some data from a client connection */ -void winbind_client_read(struct winbindd_cli_state *state) +static void client_read(struct winbindd_cli_state *state) { int n; @@ -538,10 +529,6 @@ static void process_loop(int accept_sock) timeout.tv_sec = WINBINDD_ESTABLISH_LOOP; timeout.tv_usec = 0; - if (opt_dual_daemon) { - maxfd = dual_select_setup(&w_fds, maxfd); - } - /* Set up client readers and writers */ state = client_list; @@ -596,10 +583,6 @@ static void process_loop(int accept_sock) if (selret > 0) { - if (opt_dual_daemon) { - dual_select(&w_fds); - } - if (FD_ISSET(accept_sock, &r_fds)) new_connection(accept_sock); @@ -613,7 +596,7 @@ static void process_loop(int accept_sock) /* Read data */ - winbind_client_read(state); + client_read(state); /* * If we have the start of a @@ -637,7 +620,7 @@ static void process_loop(int accept_sock) if (state->read_buf_len == sizeof(state->request)) { - winbind_process_packet(state); + process_packet(state); } } @@ -673,62 +656,6 @@ static void process_loop(int accept_sock) } } - -/* - these are split out from the main winbindd for use by the background daemon - */ -int winbind_setup_common(void) -{ - load_interfaces(); - - if (!secrets_init()) { - - DEBUG(0,("Could not initialize domain trust account secrets. Giving up\n")); - return 1; - - } - - /* Get list of domains we look up requests for. This includes the - domain which we are a member of as well as any trusted - domains. */ - - init_domain_list(); - - ZERO_STRUCT(server_state); - - /* Winbind daemon initialisation */ - - if (!winbindd_param_init()) - return 1; - - if (!winbindd_idmap_init()) - return 1; - - /* Unblock all signals we are interested in as they may have been - blocked by the parent process. */ - - BlockSignals(False, SIGINT); - BlockSignals(False, SIGQUIT); - BlockSignals(False, SIGTERM); - BlockSignals(False, SIGUSR1); - BlockSignals(False, SIGUSR2); - BlockSignals(False, SIGHUP); - - /* Setup signal handlers */ - - CatchSignal(SIGINT, termination_handler); /* Exit on these sigs */ - CatchSignal(SIGQUIT, termination_handler); - CatchSignal(SIGTERM, termination_handler); - - CatchSignal(SIGPIPE, SIG_IGN); /* Ignore sigpipe */ - - CatchSignal(SIGUSR2, sigusr2_handler); /* Debugging sigs */ - CatchSignal(SIGHUP, sighup_handler); - - return 0; -} - - /* Main function */ struct winbindd_state server_state; /* Server state information */ @@ -738,14 +665,13 @@ static void usage(void) { printf("Usage: winbindd [options]\n"); printf("\t-i interactive mode\n"); - printf("\t-B dual daemon mode\n"); printf("\t-n disable cacheing\n"); printf("\t-d level set debug level\n"); printf("\t-s configfile choose smb.conf location\n"); printf("\t-h show this help message\n"); } - int main(int argc, char **argv) +int main(int argc, char **argv) { extern BOOL AllowDebugChange; extern pstring global_myname; @@ -783,7 +709,7 @@ static void usage(void) /* Initialise samba/rpc client stuff */ - while ((opt = getopt(argc, argv, "id:s:nhB")) != EOF) { + while ((opt = getopt(argc, argv, "id:s:nh")) != EOF) { switch (opt) { /* Don't become a daemon */ @@ -791,11 +717,6 @@ static void usage(void) interactive = True; break; - /* dual daemon system */ - case 'B': - opt_dual_daemon = True; - break; - /* disable cacheing */ case 'n': opt_nocache = True; @@ -835,6 +756,8 @@ static void usage(void) exit(1); } + pidfile_create("winbindd"); + /* Setup names. */ if (!*global_myname) { @@ -848,10 +771,8 @@ static void usage(void) fstrcpy(global_myworkgroup, lp_workgroup()); - if (!interactive) { + if (!interactive) become_daemon(); - pidfile_create("winbindd"); - } #if HAVE_SETPGID /* @@ -862,14 +783,52 @@ static void usage(void) setpgid( (pid_t)0, (pid_t)0); #endif - if (opt_dual_daemon) { - do_dual_daemon(); - } + load_interfaces(); + + if (!secrets_init()) { - if (winbind_setup_common() != 0) { + DEBUG(0,("Could not initialize domain trust account secrets. Giving up\n")); return 1; + } + /* Get list of domains we look up requests for. This includes the + domain which we are a member of as well as any trusted + domains. */ + + init_domain_list(); + + ZERO_STRUCT(server_state); + + /* Winbind daemon initialisation */ + + if (!winbindd_param_init()) + return 1; + + if (!winbindd_idmap_init()) + return 1; + + /* Unblock all signals we are interested in as they may have been + blocked by the parent process. */ + + BlockSignals(False, SIGINT); + BlockSignals(False, SIGQUIT); + BlockSignals(False, SIGTERM); + BlockSignals(False, SIGUSR1); + BlockSignals(False, SIGUSR2); + BlockSignals(False, SIGHUP); + + /* Setup signal handlers */ + + CatchSignal(SIGINT, termination_handler); /* Exit on these sigs */ + CatchSignal(SIGQUIT, termination_handler); + CatchSignal(SIGTERM, termination_handler); + + CatchSignal(SIGPIPE, SIG_IGN); /* Ignore sigpipe */ + + CatchSignal(SIGUSR2, sigusr2_handler); /* Debugging sigs */ + CatchSignal(SIGHUP, sighup_handler); + /* Initialise messaging system */ if (!message_init()) { |