diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/Makefile.in | 3 | ||||
-rw-r--r-- | source3/smbd/server.c | 82 | ||||
-rw-r--r-- | source3/smbd/server_reload.c | 109 | ||||
-rw-r--r-- | source3/torture/vfstest.c | 56 |
4 files changed, 111 insertions, 139 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index 36380b5cc7..2bbb3c5250 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -780,7 +780,8 @@ SMBD_OBJ_MAIN = smbd/server.o smbd/server_exit.o BUILDOPT_OBJ = smbd/build_options.o -SMBD_OBJ_SRV = smbd/files.o smbd/connection.o \ +SMBD_OBJ_SRV = smbd/server_reload.o \ + smbd/files.o smbd/connection.o \ smbd/utmp.o smbd/session.o smbd/map_username.o \ smbd/dfree.o smbd/dir.o smbd/password.o smbd/conn.o \ smbd/share_access.o smbd/fileio.o \ diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 80c5fba25f..0e3ec1d033 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -766,88 +766,6 @@ static void smbd_parent_loop(struct smbd_parent_context *parent) /* NOTREACHED return True; */ } -/**************************************************************************** - Reload printers -**************************************************************************/ -void reload_printers(void) -{ - int snum; - int n_services = lp_numservices(); - int pnum = lp_servicenumber(PRINTERS_NAME); - const char *pname; - - pcap_cache_reload(); - - /* remove stale printers */ - for (snum = 0; snum < n_services; snum++) { - /* avoid removing PRINTERS_NAME or non-autoloaded printers */ - if (snum == pnum || !(lp_snum_ok(snum) && lp_print_ok(snum) && - lp_autoloaded(snum))) - continue; - - pname = lp_printername(snum); - if (!pcap_printername_ok(pname)) { - DEBUG(3, ("removing stale printer %s\n", pname)); - - if (is_printer_published(NULL, snum, NULL)) - nt_printer_publish(NULL, snum, DSPRINT_UNPUBLISH); - del_a_printer(pname); - lp_killservice(snum); - } - } - - load_printers(); -} - -/**************************************************************************** - Reload the services file. -**************************************************************************/ - -bool reload_services(bool test) -{ - bool ret; - - if (lp_loaded()) { - char *fname = lp_configfile(); - if (file_exist(fname) && - !strcsequal(fname, get_dyn_CONFIGFILE())) { - set_dyn_CONFIGFILE(fname); - test = False; - } - } - - reopen_logs(); - - if (test && !lp_file_list_changed()) - return(True); - - lp_killunused(conn_snum_used); - - ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True); - - reload_printers(); - - /* perhaps the config filename is now set */ - if (!test) - reload_services(True); - - reopen_logs(); - - load_interfaces(); - - if (smbd_server_fd() != -1) { - set_socket_options(smbd_server_fd(),"SO_KEEPALIVE"); - set_socket_options(smbd_server_fd(), lp_socket_options()); - } - - mangle_reset_cache(); - reset_stat_cache(); - - /* this forces service parameters to be flushed */ - set_current_service(NULL,0,True); - - return(ret); -} /**************************************************************************** Initialise connect, service and file structs. diff --git a/source3/smbd/server_reload.c b/source3/smbd/server_reload.c new file mode 100644 index 0000000000..10f2ac9113 --- /dev/null +++ b/source3/smbd/server_reload.c @@ -0,0 +1,109 @@ +/* + Unix SMB/CIFS implementation. + Main SMB server routines + Copyright (C) Andrew Tridgell 1992-1998 + Copyright (C) Martin Pool 2002 + Copyright (C) Jelmer Vernooij 2002-2003 + Copyright (C) Volker Lendecke 1993-2007 + Copyright (C) Jeremy Allison 1993-2007 + + 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 + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "smbd/globals.h" +#include "librpc/gen_ndr/messaging.h" + +/**************************************************************************** + Reload printers +**************************************************************************/ +void reload_printers(void) +{ + int snum; + int n_services = lp_numservices(); + int pnum = lp_servicenumber(PRINTERS_NAME); + const char *pname; + + pcap_cache_reload(); + + /* remove stale printers */ + for (snum = 0; snum < n_services; snum++) { + /* avoid removing PRINTERS_NAME or non-autoloaded printers */ + if (snum == pnum || !(lp_snum_ok(snum) && lp_print_ok(snum) && + lp_autoloaded(snum))) + continue; + + pname = lp_printername(snum); + if (!pcap_printername_ok(pname)) { + DEBUG(3, ("removing stale printer %s\n", pname)); + + if (is_printer_published(NULL, snum, NULL)) + nt_printer_publish(NULL, snum, DSPRINT_UNPUBLISH); + del_a_printer(pname); + lp_killservice(snum); + } + } + + load_printers(); +} + +/**************************************************************************** + Reload the services file. +**************************************************************************/ + +bool reload_services(bool test) +{ + bool ret; + + if (lp_loaded()) { + char *fname = lp_configfile(); + if (file_exist(fname) && + !strcsequal(fname, get_dyn_CONFIGFILE())) { + set_dyn_CONFIGFILE(fname); + test = False; + } + } + + reopen_logs(); + + if (test && !lp_file_list_changed()) + return(True); + + lp_killunused(conn_snum_used); + + ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True); + + reload_printers(); + + /* perhaps the config filename is now set */ + if (!test) + reload_services(True); + + reopen_logs(); + + load_interfaces(); + + if (smbd_server_fd() != -1) { + set_socket_options(smbd_server_fd(),"SO_KEEPALIVE"); + set_socket_options(smbd_server_fd(), lp_socket_options()); + } + + mangle_reset_cache(); + reset_stat_cache(); + + /* this forces service parameters to be flushed */ + set_current_service(NULL,0,True); + + return(ret); +} diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index d5237827d8..c885163729 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -422,62 +422,6 @@ int smbd_server_fd(void) return server_fd; } -void reload_printers(void) -{ - return; -} - -/**************************************************************************** - Reload the services file. -**************************************************************************/ - -bool reload_services(bool test) -{ - bool ret; - - if (lp_loaded()) { - const char *fname = lp_configfile(); - if (file_exist(fname) && - !strcsequal(fname, get_dyn_CONFIGFILE())) { - set_dyn_CONFIGFILE(fname); - test = False; - } - } - - reopen_logs(); - - if (test && !lp_file_list_changed()) - return(True); - - lp_killunused(conn_snum_used); - - ret = lp_load(get_dyn_CONFIGFILE(), False, False, True, True); - - /* perhaps the config filename is now set */ - if (!test) - reload_services(True); - - reopen_logs(); - - load_interfaces(); - - { - if (smbd_server_fd() != -1) { - set_socket_options(smbd_server_fd(),"SO_KEEPALIVE"); - set_socket_options(smbd_server_fd(), - lp_socket_options()); - } - } - - mangle_reset_cache(); - reset_stat_cache(); - - /* this forces service parameters to be flushed */ - set_current_service(NULL,0,True); - - return (ret); -} - struct event_context *smbd_event_context(void) { static struct event_context *ctx; |