diff options
-rw-r--r-- | source3/param/service.c | 3 | ||||
-rw-r--r-- | source3/printing/load.c | 2 | ||||
-rw-r--r-- | source3/printing/pcap.c | 9 | ||||
-rw-r--r-- | source3/printing/printer_list.c | 21 | ||||
-rw-r--r-- | source3/printing/printer_list.h | 2 | ||||
-rw-r--r-- | source3/printing/printing.c | 3 | ||||
-rw-r--r-- | source3/printing/queue_process.c | 4 | ||||
-rw-r--r-- | source3/smbd/server_reload.c | 4 |
8 files changed, 34 insertions, 14 deletions
diff --git a/source3/param/service.c b/source3/param/service.c index add6b40d619..880e79fb284 100644 --- a/source3/param/service.c +++ b/source3/param/service.c @@ -25,6 +25,7 @@ #include "../librpc/gen_ndr/netlogon.h" #include "../libcli/security/security.h" #include "printing/pcap.h" +#include "printing/printer_list.h" #include "passdb/lookup_sid.h" #include "auth.h" #include "lib/param/loadparm.h" @@ -178,7 +179,7 @@ int find_service(TALLOC_CTX *ctx, const char *service_in, char **p_service_out) if (iPrinterService >= 0) { DEBUG(3,("checking whether %s is a valid printer name...\n", *p_service_out)); - if (pcap_printername_ok(*p_service_out)) { + if (printer_list_printername_exists(*p_service_out)) { DEBUG(3,("%s is a valid printer name\n", *p_service_out)); DEBUG(3,("adding %s as a printer service\n", diff --git a/source3/printing/load.c b/source3/printing/load.c index 6fabec0fa46..5ee4267cfd0 100644 --- a/source3/printing/load.c +++ b/source3/printing/load.c @@ -55,7 +55,7 @@ static void add_auto_printers(void) if (lp_servicenumber(p) >= 0) continue; - if (pcap_printername_ok(p)) + if (printer_list_printername_exists(p)) lp_add_printer(p, pnum); } diff --git a/source3/printing/pcap.c b/source3/printing/pcap.c index 3600f9c50fc..d348c658fd4 100644 --- a/source3/printing/pcap.c +++ b/source3/printing/pcap.c @@ -211,15 +211,6 @@ done: return; } - -bool pcap_printername_ok(const char *printername) -{ - NTSTATUS status; - - status = printer_list_get_printer(talloc_tos(), printername, NULL, NULL, 0); - return NT_STATUS_IS_OK(status); -} - /*************************************************************************** run a function on each printer name in the printcap file. ***************************************************************************/ diff --git a/source3/printing/printer_list.c b/source3/printing/printer_list.c index 0e479072a22..4efcc2e2dd8 100644 --- a/source3/printing/printer_list.c +++ b/source3/printing/printer_list.c @@ -146,6 +146,27 @@ done: return status; } +bool printer_list_printername_exists(const char *name) +{ + struct db_context *db = get_printer_list_db(); + char *key = NULL; + bool ok; + + if (db == NULL) { + return false; + } + + key = talloc_asprintf_strupper_m( + talloc_tos(), PL_KEY_FORMAT, name); + if (key == NULL) { + return false; + } + + ok = dbwrap_exists(db, string_term_tdb_data(key)); + TALLOC_FREE(key); + return ok; +} + NTSTATUS printer_list_set_printer(TALLOC_CTX *mem_ctx, const char *name, const char *comment, diff --git a/source3/printing/printer_list.h b/source3/printing/printer_list.h index b12c1923e72..f30b3150671 100644 --- a/source3/printing/printer_list.h +++ b/source3/printing/printer_list.h @@ -46,6 +46,8 @@ NTSTATUS printer_list_get_printer(TALLOC_CTX *mem_ctx, const char **location, time_t *last_refresh); +bool printer_list_printername_exists(const char *name); + /** * @brief Add a printer to the printer list database. * diff --git a/source3/printing/printing.c b/source3/printing/printing.c index 70a891b89be..15a8bc7846c 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -2731,7 +2731,8 @@ static WERROR print_job_checks(const struct auth_session_info *server_info, } /* for autoloaded printers, check that the printcap entry still exists */ - if (lp_autoloaded(snum) && !pcap_printername_ok(sharename)) { + if (lp_autoloaded(snum) && + !printer_list_printername_exists(sharename)) { DEBUG(3, ("print_job_checks: printer name %s check failed.\n", sharename)); return WERR_ACCESS_DENIED; diff --git a/source3/printing/queue_process.c b/source3/printing/queue_process.c index b4f167956dc..5938fd2a262 100644 --- a/source3/printing/queue_process.c +++ b/source3/printing/queue_process.c @@ -26,6 +26,7 @@ #include "lib/util/util_process.h" #include "printing.h" #include "printing/pcap.h" +#include "printing/printer_list.h" #include "printing/queue_process.h" #include "locking/proto.h" #include "locking/share_mode_lock.h" @@ -98,7 +99,8 @@ static void delete_and_reload_printers_full(struct tevent_context *ev, pname = lp_printername(session_info, lp_sub, snum); /* check printer, but avoid removing non-autoloaded printers */ - if (lp_autoloaded(snum) && !pcap_printername_ok(pname)) { + if (lp_autoloaded(snum) && + !printer_list_printername_exists(pname)) { DEBUG(3, ("removing stale printer %s\n", pname)); if (is_printer_published(session_info, session_info, diff --git a/source3/smbd/server_reload.c b/source3/smbd/server_reload.c index 6e6f68e5716..98ea2a4fda4 100644 --- a/source3/smbd/server_reload.c +++ b/source3/smbd/server_reload.c @@ -26,6 +26,7 @@ #include "smbd/globals.h" #include "nt_printing.h" #include "printing/pcap.h" +#include "printing/printer_list.h" #include "printing/load.h" #include "auth.h" #include "messages.h" @@ -101,7 +102,8 @@ void delete_and_reload_printers(void) pname = lp_printername(frame, lp_sub, snum); /* check printer, but avoid removing non-autoloaded printers */ - if (lp_autoloaded(snum) && !pcap_printername_ok(pname)) { + if (lp_autoloaded(snum) && + !printer_list_printername_exists(pname)) { lp_killservice(snum); } } |