summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2010-05-11 21:37:30 +1000
committerAndrew Bartlett <abartlet@samba.org>2010-05-13 10:12:27 +1000
commit72e65a05213e857b4aaef9951df318c10e9774ae (patch)
tree020b83617dd53ce039450b8e4243045cdd42455b /source3
parentf5c0f90da5f5372ca6b7a72daa8d073a2444a068 (diff)
downloadsamba-72e65a05213e857b4aaef9951df318c10e9774ae.tar.gz
samba-72e65a05213e857b4aaef9951df318c10e9774ae.tar.bz2
samba-72e65a05213e857b4aaef9951df318c10e9774ae.zip
s3:winbindd Provide a winbindd_register_handlers() helper function for s3compat
This function provides a useful entry point for s3compat to set things up in winbindd. Andrew Bartlett
Diffstat (limited to 'source3')
-rw-r--r--source3/winbindd/winbindd.c196
-rw-r--r--source3/winbindd/winbindd_proto.h1
2 files changed, 102 insertions, 95 deletions
diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
index 186b0d852b..1c87a14ef6 100644
--- a/source3/winbindd/winbindd.c
+++ b/source3/winbindd/winbindd.c
@@ -1010,6 +1010,106 @@ bool winbindd_use_cache(void)
return !opt_nocache;
}
+void winbindd_register_handlers(void)
+{
+ struct tevent_timer *te;
+ /* Don't use winbindd_reinit_after_fork here as
+ * we're just starting up and haven't created any
+ * winbindd-specific resources we must free yet. JRA.
+ */
+
+ if (!NT_STATUS_IS_OK(reinit_after_fork(winbind_messaging_context(),
+ winbind_event_context(),
+ false))) {
+ DEBUG(0,("reinit_after_fork() failed\n"));
+ exit(1);
+ }
+
+ /* Setup signal handlers */
+
+ if (!winbindd_setup_sig_term_handler(true))
+ exit(1);
+ if (!winbindd_setup_sig_hup_handler(NULL))
+ exit(1);
+ if (!winbindd_setup_sig_chld_handler())
+ exit(1);
+ if (!winbindd_setup_sig_usr2_handler())
+ exit(1);
+
+ CatchSignal(SIGPIPE, SIG_IGN); /* Ignore sigpipe */
+
+ /*
+ * Ensure all cache and idmap caches are consistent
+ * and initialized before we startup.
+ */
+ if (!winbindd_cache_validate_and_initialize()) {
+ exit(1);
+ }
+
+ /* get broadcast messages */
+
+ if (!serverid_register_self(FLAG_MSG_GENERAL|FLAG_MSG_DBWRAP)) {
+ DEBUG(1, ("Could not register myself in serverid.tdb\n"));
+ exit(1);
+ }
+
+ /* React on 'smbcontrol winbindd reload-config' in the same way
+ as to SIGHUP signal */
+ messaging_register(winbind_messaging_context(), NULL,
+ MSG_SMB_CONF_UPDATED, msg_reload_services);
+ messaging_register(winbind_messaging_context(), NULL,
+ MSG_SHUTDOWN, msg_shutdown);
+
+ /* Handle online/offline messages. */
+ messaging_register(winbind_messaging_context(), NULL,
+ MSG_WINBIND_OFFLINE, winbind_msg_offline);
+ messaging_register(winbind_messaging_context(), NULL,
+ MSG_WINBIND_ONLINE, winbind_msg_online);
+ messaging_register(winbind_messaging_context(), NULL,
+ MSG_WINBIND_ONLINESTATUS, winbind_msg_onlinestatus);
+
+ messaging_register(winbind_messaging_context(), NULL,
+ MSG_DUMP_EVENT_LIST, winbind_msg_dump_event_list);
+
+ messaging_register(winbind_messaging_context(), NULL,
+ MSG_WINBIND_VALIDATE_CACHE,
+ winbind_msg_validate_cache);
+
+ messaging_register(winbind_messaging_context(), NULL,
+ MSG_WINBIND_DUMP_DOMAIN_LIST,
+ winbind_msg_dump_domain_list);
+
+ /* Register handler for MSG_DEBUG. */
+ messaging_register(winbind_messaging_context(), NULL,
+ MSG_DEBUG,
+ winbind_msg_debug);
+
+ netsamlogon_cache_init(); /* Non-critical */
+
+ /* clear the cached list of trusted domains */
+
+ wcache_tdc_clear();
+
+ if (!init_domain_list()) {
+ DEBUG(0,("unable to initialize domain list\n"));
+ exit(1);
+ }
+
+ init_idmap_child();
+ init_locator_child();
+
+ smb_nscd_flush_user_cache();
+ smb_nscd_flush_group_cache();
+
+ te = tevent_add_timer(winbind_event_context(), NULL, timeval_zero(),
+ rescan_trusted_domains, NULL);
+ if (te == NULL) {
+ DEBUG(0, ("Could not trigger rescan_trusted_domains()\n"));
+ exit(1);
+ }
+
+}
+
/* Main function */
int main(int argc, char **argv, char **envp)
@@ -1038,7 +1138,6 @@ int main(int argc, char **argv, char **envp)
poptContext pc;
int opt;
TALLOC_CTX *frame = talloc_stackframe();
- struct tevent_timer *te;
/* glibc (?) likes to print "User defined signal 1" and exit if a
SIGUSR[12] is received before a handler is installed */
@@ -1190,93 +1289,7 @@ int main(int argc, char **argv, char **envp)
TimeInit();
- /* Don't use winbindd_reinit_after_fork here as
- * we're just starting up and haven't created any
- * winbindd-specific resources we must free yet. JRA.
- */
-
- if (!NT_STATUS_IS_OK(reinit_after_fork(winbind_messaging_context(),
- winbind_event_context(),
- false))) {
- DEBUG(0,("reinit_after_fork() failed\n"));
- exit(1);
- }
-
- /* Setup signal handlers */
-
- if (!winbindd_setup_sig_term_handler(true))
- exit(1);
- if (!winbindd_setup_sig_hup_handler(NULL))
- exit(1);
- if (!winbindd_setup_sig_chld_handler())
- exit(1);
- if (!winbindd_setup_sig_usr2_handler())
- exit(1);
-
- CatchSignal(SIGPIPE, SIG_IGN); /* Ignore sigpipe */
-
- /*
- * Ensure all cache and idmap caches are consistent
- * and initialized before we startup.
- */
- if (!winbindd_cache_validate_and_initialize()) {
- exit(1);
- }
-
- /* get broadcast messages */
-
- if (!serverid_register_self(FLAG_MSG_GENERAL|FLAG_MSG_DBWRAP)) {
- DEBUG(1, ("Could not register myself in serverid.tdb\n"));
- exit(1);
- }
-
- /* React on 'smbcontrol winbindd reload-config' in the same way
- as to SIGHUP signal */
- messaging_register(winbind_messaging_context(), NULL,
- MSG_SMB_CONF_UPDATED, msg_reload_services);
- messaging_register(winbind_messaging_context(), NULL,
- MSG_SHUTDOWN, msg_shutdown);
-
- /* Handle online/offline messages. */
- messaging_register(winbind_messaging_context(), NULL,
- MSG_WINBIND_OFFLINE, winbind_msg_offline);
- messaging_register(winbind_messaging_context(), NULL,
- MSG_WINBIND_ONLINE, winbind_msg_online);
- messaging_register(winbind_messaging_context(), NULL,
- MSG_WINBIND_ONLINESTATUS, winbind_msg_onlinestatus);
-
- messaging_register(winbind_messaging_context(), NULL,
- MSG_DUMP_EVENT_LIST, winbind_msg_dump_event_list);
-
- messaging_register(winbind_messaging_context(), NULL,
- MSG_WINBIND_VALIDATE_CACHE,
- winbind_msg_validate_cache);
-
- messaging_register(winbind_messaging_context(), NULL,
- MSG_WINBIND_DUMP_DOMAIN_LIST,
- winbind_msg_dump_domain_list);
-
- /* Register handler for MSG_DEBUG. */
- messaging_register(winbind_messaging_context(), NULL,
- MSG_DEBUG,
- winbind_msg_debug);
-
- netsamlogon_cache_init(); /* Non-critical */
-
- /* clear the cached list of trusted domains */
-
- wcache_tdc_clear();
-
- if (!init_domain_list()) {
- DEBUG(0,("unable to initialize domain list\n"));
- exit(1);
- }
-
- init_idmap_child();
- init_locator_child();
-
- smb_nscd_flush_user_cache();
- smb_nscd_flush_group_cache();
+ winbindd_register_handlers();
/* setup listen sockets */
@@ -1285,13 +1298,6 @@ int main(int argc, char **argv, char **envp)
exit(1);
}
- te = tevent_add_timer(winbind_event_context(), NULL, timeval_zero(),
- rescan_trusted_domains, NULL);
- if (te == NULL) {
- DEBUG(0, ("Could not trigger rescan_trusted_domains()\n"));
- exit(1);
- }
-
TALLOC_FREE(frame);
/* Loop waiting for requests */
while (1) {
diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h
index 123fefc5fc..41e96b87b7 100644
--- a/source3/winbindd/winbindd_proto.h
+++ b/source3/winbindd/winbindd_proto.h
@@ -52,6 +52,7 @@ bool winbindd_setup_sig_term_handler(bool parent);
bool winbindd_setup_sig_hup_handler(const char *lfile);
bool winbindd_use_idmap_cache(void);
bool winbindd_use_cache(void);
+void winbindd_register_handlers(void);
int main(int argc, char **argv, char **envp);
/* The following definitions come from winbindd/winbindd_ads.c */