[PATCH] smbcontrolify config updates

Alexander Bokovoy a.bokovoy at sam-solutions.net
Tue Jul 8 15:52:19 GMT 2003


Greetings!

Following patch adds support to force daemons to reload smb.conf on
'smbcontrol <dest> reload-config' command. This basically does the same as
SIGHUP signal sent to winbindd and nmbd, and for smbd it uses already
existing message handler.

What do you think about it?

-- 
/ Alexander Bokovoy
---
When the ax entered the forest, the trees said, "The handle is one of us!"
		-- Turkish proverb
-------------- next part --------------
Index: docs/docbook/manpages/smbcontrol.1.xml
===================================================================
RCS file: /home/cvs/samba/docs/docbook/manpages/smbcontrol.1.xml,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 smbcontrol.1.xml
--- docs/docbook/manpages/smbcontrol.1.xml	1 May 2003 14:00:10 -0000	1.1.2.1
+++ docs/docbook/manpages/smbcontrol.1.xml	8 Jul 2003 15:47:24 -0000
@@ -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>
 
Index: source/nmbd/nmbd.c
===================================================================
RCS file: /home/cvs/samba/source/nmbd/nmbd.c,v
retrieving revision 1.134.2.15
diff -u -r1.134.2.15 nmbd.c
--- source/nmbd/nmbd.c	10 May 2003 11:49:50 -0000	1.134.2.15
+++ source/nmbd/nmbd.c	8 Jul 2003 15:47:25 -0000
@@ -298,6 +298,18 @@
 	return(ret);
 }
 
+/* React on 'smbcontrol nmbd reload-config' in the same way as to SIGHUP */
+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(reload_interfaces(0))
+		return;
+}
+
+
 /**************************************************************************** **
  The main select loop.
  **************************************************************************** */
@@ -696,6 +708,7 @@
   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 ) );
 
Index: source/nsswitch/winbindd.c
===================================================================
RCS file: /home/cvs/samba/source/nsswitch/winbindd.c,v
retrieving revision 1.55.2.31
diff -u -r1.55.2.31 winbindd.c
--- source/nsswitch/winbindd.c	27 Jun 2003 20:55:47 -0000	1.55.2.31
+++ source/nsswitch/winbindd.c	8 Jul 2003 15:47:26 -0000
@@ -52,6 +52,14 @@
 	return(ret);
 }
 
+/* React on 'smbcontrol winbindd reload-config' in the same way as on SIGHUP*/
+static void msg_reload_services(int, pid_t, void *, size_t)
+{
+        /* Flush various caches */
+	flush_caches();
+	reload_services_file(True);
+}
+
 #if DUMP_CORE
 
 /**************************************************************************** **
@@ -896,6 +904,11 @@
 		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);
+	
 	poptFreeContext(pc);
 
 	netsamlogon_cache_init(); /* Non-critical */
Index: source/utils/smbcontrol.c
===================================================================
RCS file: /home/cvs/samba/source/utils/smbcontrol.c,v
retrieving revision 1.42.2.20
diff -u -r1.42.2.20 smbcontrol.c
--- source/utils/smbcontrol.c	27 Jun 2003 20:55:48 -0000	1.42.2.20
+++ source/utils/smbcontrol.c	8 Jul 2003 15:47:27 -0000
@@ -553,6 +553,16 @@
 		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 @@
 	{ "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 }
 };


More information about the samba-technical mailing list