From 006d07ece3836fe5b6e0115a1fbc45aa28bd5b21 Mon Sep 17 00:00:00 2001 From: David Disseldorp Date: Tue, 29 Jan 2019 01:50:15 +0100 Subject: [PATCH 1/2] printing: drop pcap_cache_loaded() guard around load_printers() Add the pcap_cache_loaded() check to load_printers() and return early if it returns false. This simplifies callers in preparation for checking lp_load_printers() in the printcap cache update code-path. Bug: https://bugzilla.samba.org/show_bug.cgi?id=13766 Signed-off-by: David Disseldorp Reviewed-by: Noel Power (cherry picked from commit 0ae7c3144a30910adb1e54cf46d54d42a1036839) --- source3/printing/load.c | 4 +++- source3/printing/queue_process.c | 4 +--- source3/printing/spoolssd.c | 8 ++------ 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/source3/printing/load.c b/source3/printing/load.c index 51495f970db..7e25d5a91c7 100644 --- a/source3/printing/load.c +++ b/source3/printing/load.c @@ -64,7 +64,9 @@ load automatic printer services from pre-populated pcap cache ***************************************************************************/ void load_printers(void) { - SMB_ASSERT(pcap_cache_loaded(NULL)); + if (!pcap_cache_loaded(NULL)) { + return; + } add_auto_printers(); diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c index c4648ce2b6a..2a17f677c8a 100644 --- a/source3/printing/queue_process.c +++ b/source3/printing/queue_process.c @@ -483,9 +483,7 @@ void printing_subsystem_update(struct tevent_context *ev_ctx, bool force) { if (background_lpq_updater_pid != -1) { - if (pcap_cache_loaded(NULL)) { - load_printers(); - } + load_printers(); if (force) { /* Send a sighup to the background process. * this will force it to reload printers */ diff --git a/source3/printing/spoolssd.c b/source3/printing/spoolssd.c index ca1eda91879..06c46a69dd6 100644 --- a/source3/printing/spoolssd.c +++ b/source3/printing/spoolssd.c @@ -288,9 +288,7 @@ static bool spoolss_child_init(struct tevent_context *ev_ctx, * If so then we probably missed a message and should load_printers() * ourselves. If pcap has not been loaded yet, then ignore, we will get * a message as soon as the bq process completes the reload. */ - if (pcap_cache_loaded(NULL)) { - load_printers(); - } + load_printers(); /* try to reinit rpc queues */ spoolss_cb.init = spoolss_init_cb; @@ -699,9 +697,7 @@ pid_t start_spoolssd(struct tevent_context *ev_ctx, * If pcap has not been loaded yet, then ignore, as we will reload on * client enumeration anyway. */ - if (pcap_cache_loaded(NULL)) { - load_printers(); - } + load_printers(); mem_ctx = talloc_new(NULL); if (mem_ctx == NULL) { -- 2.13.7 From 4f7ac420dabc7b85ccb6c7bffd390ddf79f1b66f Mon Sep 17 00:00:00 2001 From: David Disseldorp Date: Tue, 29 Jan 2019 01:55:04 +0100 Subject: [PATCH 2/2] printing: check lp_load_printers() prior to pcap cache update Avoid explicit and housekeeping timer triggered printcap cache updates if lp_load_printers() is disabled. Bug: https://bugzilla.samba.org/show_bug.cgi?id=13766 Signed-off-by: David Disseldorp Autobuild-User(master): Noel Power Autobuild-Date(master): Fri Feb 1 19:25:03 CET 2019 on sn-devel-144 (cherry picked from commit 6a77237c50dd258521f356af0b5dc9942dd5592e) --- source3/printing/pcap.c | 5 +++++ source3/printing/queue_process.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/source3/printing/pcap.c b/source3/printing/pcap.c index 726111816d6..d771cd9dfeb 100644 --- a/source3/printing/pcap.c +++ b/source3/printing/pcap.c @@ -139,6 +139,11 @@ void pcap_cache_reload(struct tevent_context *ev, DEBUG(3, ("reloading printcap cache\n")); + if (!lp_load_printers()) { + DBG_NOTICE("skipping reload - load printers disabled\n"); + return; + } + /* only go looking if no printcap name supplied */ if (pcap_name == NULL || *pcap_name == 0) { DEBUG(0, ("No printcap file name configured!\n")); diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c index 2a17f677c8a..41d53cff82c 100644 --- a/source3/printing/queue_process.c +++ b/source3/printing/queue_process.c @@ -172,7 +172,7 @@ static bool printing_subsystem_queue_tasks(struct bq_state *state) /* cancel any existing housekeeping event */ TALLOC_FREE(state->housekeep); - if (housekeeping_period == 0) { + if ((housekeeping_period == 0) || !lp_load_printers()) { DEBUG(4, ("background print queue housekeeping disabled\n")); return true; } -- 2.13.7