From 6f279de0e672996ff1c142202581e6471ed6e859 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 27 May 2010 07:18:58 +0200 Subject: s3:smbd split reload services/printers functions from server.c This helps vfstest, as it previously had duplicate copies of these functions. Andrew Bartlett Signed-off-by: Stefan Metzmacher --- source3/smbd/server.c | 82 -------------------------------- source3/smbd/server_reload.c | 109 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 82 deletions(-) create mode 100644 source3/smbd/server_reload.c (limited to 'source3/smbd') 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 . +*/ + +#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); +} -- cgit