From 918f7db02fd9862b37bc8ff16f7a1645ce759d0e Mon Sep 17 00:00:00 2001 From: David Disseldorp Date: Wed, 23 Jul 2014 12:12:34 +0200 Subject: [PATCH] printing: return last change time with pcap_cache_loaded() Bug: https://bugzilla.samba.org/show_bug.cgi?id=10652 Signed-off-by: David Disseldorp Reviewed-by: Andreas Schneider (cherry picked from commit 30ce835670a6aeca6fb960ea7c4fe1b982bdd5b0) [ddiss@samba.org: rebasead for 4.0 with swat] --- source3/printing/load.c | 2 +- source3/printing/pcap.c | 10 ++++++++-- source3/printing/pcap.h | 2 +- source3/printing/queue_process.c | 2 +- source3/printing/spoolssd.c | 4 ++-- source3/web/swat.c | 4 ++-- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/source3/printing/load.c b/source3/printing/load.c index 2ba3b2e106d..238998d920d 100644 --- a/source3/printing/load.c +++ b/source3/printing/load.c @@ -65,7 +65,7 @@ load automatic printer services from pre-populated pcap cache void load_printers(struct tevent_context *ev, struct messaging_context *msg_ctx) { - SMB_ASSERT(pcap_cache_loaded()); + SMB_ASSERT(pcap_cache_loaded(NULL)); add_auto_printers(); diff --git a/source3/printing/pcap.c b/source3/printing/pcap.c index 9c44584a4d2..c5524ad53db 100644 --- a/source3/printing/pcap.c +++ b/source3/printing/pcap.c @@ -83,13 +83,19 @@ void pcap_cache_destroy_specific(struct pcap_cache **pp_cache) *pp_cache = NULL; } -bool pcap_cache_loaded(void) +bool pcap_cache_loaded(time_t *_last_change) { NTSTATUS status; time_t last; status = printer_list_get_last_refresh(&last); - return NT_STATUS_IS_OK(status); + if (!NT_STATUS_IS_OK(status)) { + return false; + } + if (_last_change != NULL) { + *_last_change = last; + } + return true; } bool pcap_cache_replace(const struct pcap_cache *pcache) diff --git a/source3/printing/pcap.h b/source3/printing/pcap.h index 7dccf84b374..8fc9e9de31c 100644 --- a/source3/printing/pcap.h +++ b/source3/printing/pcap.h @@ -35,7 +35,7 @@ struct pcap_cache; bool pcap_cache_add_specific(struct pcap_cache **ppcache, const char *name, const char *comment, const char *location); void pcap_cache_destroy_specific(struct pcap_cache **ppcache); -bool pcap_cache_loaded(void); +bool pcap_cache_loaded(time_t *_last_change); bool pcap_cache_replace(const struct pcap_cache *cache); void pcap_printer_fn_specific(const struct pcap_cache *, void (*fn)(const char *, const char *, const char *, void *), void *); void pcap_printer_read_fn(void (*fn)(const char *, const char *, const char *, void *), void *); diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c index 0969c7bfb4f..78b44b8f5dc 100644 --- a/source3/printing/queue_process.c +++ b/source3/printing/queue_process.c @@ -387,7 +387,7 @@ void printing_subsystem_update(struct tevent_context *ev_ctx, bool force) { if (background_lpq_updater_pid != -1) { - if (pcap_cache_loaded()) { + if (pcap_cache_loaded(NULL)) { load_printers(ev_ctx, msg_ctx); } if (force) { diff --git a/source3/printing/spoolssd.c b/source3/printing/spoolssd.c index a3f5f7633bf..87d93ac8255 100644 --- a/source3/printing/spoolssd.c +++ b/source3/printing/spoolssd.c @@ -300,7 +300,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()) { + if (pcap_cache_loaded(NULL)) { load_printers(ev_ctx, msg_ctx); } @@ -718,7 +718,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()) { + if (pcap_cache_loaded(NULL)) { load_printers(ev_ctx, msg_ctx); } diff --git a/source3/web/swat.c b/source3/web/swat.c index cc90f211297..640cd5d0862 100644 --- a/source3/web/swat.c +++ b/source3/web/swat.c @@ -594,7 +594,7 @@ static int save_reload(int snum) return 0; } iNumNonAutoPrintServices = lp_numservices(); - if (pcap_cache_loaded()) { + if (pcap_cache_loaded(NULL)) { struct tevent_context *ev_ctx; struct messaging_context *msg_ctx; @@ -1595,7 +1595,7 @@ const char *lang_msg_rotate(TALLOC_CTX *ctx, const char *msgid) reopen_logs(); load_interfaces(); iNumNonAutoPrintServices = lp_numservices(); - if (pcap_cache_loaded()) { + if (pcap_cache_loaded(NULL)) { struct tevent_context *ev_ctx; struct messaging_context *msg_ctx; -- 2.11.4.GIT