#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"
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",
if (lp_servicenumber(p) >= 0)
continue;
- if (pcap_printername_ok(p))
+ if (printer_list_printername_exists(p))
lp_add_printer(p, pnum);
}
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.
***************************************************************************/
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,
const char **location,
time_t *last_refresh);
+bool printer_list_printername_exists(const char *name);
+
/**
* @brief Add a printer to the printer list database.
*
}
/* 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;
#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"
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,
#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"
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);
}
}