summaryrefslogtreecommitdiff
path: root/source3/nsswitch/winbindd.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/nsswitch/winbindd.c')
-rw-r--r--source3/nsswitch/winbindd.c145
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()) {