summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Bokovoy <ab@samba.org>2003-07-15 17:21:21 +0000
committerAlexander Bokovoy <ab@samba.org>2003-07-15 17:21:21 +0000
commit8c4be2bbc9d1b42ae1b26a3a2519dd2c911dee45 (patch)
tree8714ccf9f0658d5adf0adcfcb0cfeb771f843ef6
parentcf8628e5858f2875cfccbac87eb9b02ef5f7228d (diff)
downloadsamba-8c4be2bbc9d1b42ae1b26a3a2519dd2c911dee45.tar.gz
samba-8c4be2bbc9d1b42ae1b26a3a2519dd2c911dee45.tar.bz2
samba-8c4be2bbc9d1b42ae1b26a3a2519dd2c911dee45.zip
Add support for MSG_SMB_CONF_UPDATED and MSG_SHUTDOWN to all daemons (smbd, nmbd, winbindd). Reviewed by jerry and tridge.
(This used to be commit 02c5e2fc6f0721ebd82a9e6a2b34190607de55fe)
-rw-r--r--docs/docbook/manpages/smbcontrol.1.xml7
-rw-r--r--source3/nmbd/nmbd.c31
-rw-r--r--source3/nsswitch/winbindd.c26
-rw-r--r--source3/utils/smbcontrol.c11
4 files changed, 66 insertions, 9 deletions
diff --git a/docs/docbook/manpages/smbcontrol.1.xml b/docs/docbook/manpages/smbcontrol.1.xml
index a0fda2b315..7bcb7420ba 100644
--- a/docs/docbook/manpages/smbcontrol.1.xml
+++ b/docs/docbook/manpages/smbcontrol.1.xml
@@ -254,6 +254,13 @@
sent to smbd.</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term>reload-config</term>
+ <listitem><para>Force daemon to reload smb.conf configuration file. Can be sent
+ to <constant>smbd</constant>, <constant>nmbd</constant>, or <constant>winbindd</constant>.
+ </para></listitem>
+ </varlistentry>
+
</variablelist>
</refsect1>
diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c
index d9300f4668..2801e54551 100644
--- a/source3/nmbd/nmbd.c
+++ b/source3/nmbd/nmbd.c
@@ -299,12 +299,35 @@ static BOOL reload_nmbd_services(BOOL test)
}
/**************************************************************************** **
+ * React on 'smbcontrol nmbd reload-config' in the same way as to SIGHUP
+ * We use buf here to return BOOL result to process() when reload_interfaces()
+ * detects that there are no subnets.
+ **************************************************************************** */
+static void msg_reload_nmbd_services(int msg_type, pid_t src, void *buf, size_t len)
+{
+ write_browse_list( 0, True );
+ dump_all_namelists();
+ reload_nmbd_services( True );
+ reopen_logs();
+
+ if(buf) {
+ /* We were called from process() */
+ /* If reload_interfaces() returned True */
+ /* we need to shutdown if there are no subnets... */
+ /* pass this info back to process() */
+ *((BOOL*)buf) = reload_interfaces(0);
+ }
+}
+
+
+/**************************************************************************** **
The main select loop.
**************************************************************************** */
static void process(void)
{
BOOL run_election;
+ BOOL no_subnets;
while( True ) {
time_t t = time(NULL);
@@ -513,11 +536,8 @@ static void process(void)
if(reload_after_sighup) {
DEBUG( 0, ( "Got SIGHUP dumping debug info.\n" ) );
- write_browse_list( 0, True );
- dump_all_namelists();
- reload_nmbd_services( True );
- reopen_logs();
- if(reload_interfaces(0))
+ msg_reload_nmbd_services(MSG_SMB_CONF_UPDATED, (pid_t) 0, (void*) &no_subnets, 0);
+ if(no_subnets)
return;
reload_after_sighup = 0;
}
@@ -696,6 +716,7 @@ static BOOL open_sockets(BOOL isdaemon, int port)
message_register(MSG_FORCE_ELECTION, nmbd_message_election);
message_register(MSG_WINS_NEW_ENTRY, nmbd_wins_new_entry);
message_register(MSG_SHUTDOWN, nmbd_terminate);
+ message_register(MSG_SMB_CONF_UPDATED, msg_reload_nmbd_services);
DEBUG( 3, ( "Opening sockets %d\n", global_nmb_port ) );
diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c
index ef55fe5123..0336312e89 100644
--- a/source3/nsswitch/winbindd.c
+++ b/source3/nsswitch/winbindd.c
@@ -66,6 +66,7 @@ static BOOL reload_services_file(BOOL test)
return(ret);
}
+
#if DUMP_CORE
/**************************************************************************** **
@@ -201,6 +202,20 @@ static void sighup_handler(int signum)
sys_select_signal();
}
+/* React on 'smbcontrol winbindd reload-config' in the same way as on SIGHUP*/
+static void msg_reload_services(int msg_type, pid_t src, void *buf, size_t len)
+{
+ /* Flush various caches */
+ flush_caches();
+ reload_services_file(True);
+}
+
+/* React on 'smbcontrol winbindd shutdown' in the same way as on SIGTERM*/
+static void msg_shutdown(int msg_type, pid_t src, void *buf, size_t len)
+{
+ terminate();
+}
+
struct dispatch_table {
enum winbindd_cmd cmd;
enum winbindd_result (*fn)(struct winbindd_cli_state *state);
@@ -746,11 +761,8 @@ static void process_loop(void)
if (do_sighup) {
DEBUG(3, ("got SIGHUP\n"));
-
- /* Flush various caches */
- flush_caches();
- reload_services_file(True);
+ msg_reload_services(MSG_SMB_CONF_UPDATED, (pid_t) 0, NULL, 0);
do_sighup = False;
}
@@ -919,6 +931,12 @@ int main(int argc, char **argv)
DEBUG(0, ("unable to initialise messaging system\n"));
exit(1);
}
+
+ /* React on 'smbcontrol winbindd reload-config' in the same way
+ as to SIGHUP signal */
+ message_register(MSG_SMB_CONF_UPDATED, msg_reload_services);
+ message_register(MSG_SHUTDOWN, msg_shutdown);
+
poptFreeContext(pc);
netsamlogon_cache_init(); /* Non-critical */
diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c
index e168cf7837..b7333f2317 100644
--- a/source3/utils/smbcontrol.c
+++ b/source3/utils/smbcontrol.c
@@ -553,6 +553,16 @@ static BOOL do_drvupgrade(const pid_t pid, const int argc, const char **argv)
pid, MSG_DEBUG, argv[1], strlen(argv[1]) + 1, False);
}
+static BOOL do_reload_config(const pid_t pid, const int argc, const char **argv)
+{
+ if (argc != 1) {
+ fprintf(stderr, "Usage: smbcontrol <dest> reload-config\n");
+ return False;
+ }
+
+ return send_message(pid, MSG_SMB_CONF_UPDATED, NULL, 0, False);
+}
+
/* A list of message type supported */
static const struct {
@@ -576,6 +586,7 @@ static const struct {
{ "dmalloc-log-changed", do_dmalloc_changed, "" },
{ "shutdown", do_shutdown, "Shut down daemon" },
{ "drvupgrade", do_drvupgrade, "Notify a printer driver has changed" },
+ { "reload-config", do_reload_config, "Force smbd or winbindd to reload config file"},
{ "noop", do_noop, "Do nothing" },
{ NULL }
};