summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/proto.h3
-rw-r--r--source3/printing/nt_printing.c43
-rw-r--r--source3/rpc_server/srv_spoolss_nt.c5
-rw-r--r--source3/smbd/server_reload.c2
4 files changed, 19 insertions, 34 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 95d9411927..d56ed3b349 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -4795,6 +4795,9 @@ bool print_access_check(struct auth_serversupplied_info *server_info, int snum,
int access_type);
bool print_time_access_check(struct auth_serversupplied_info *server_info,
const char *servicename);
+void nt_printer_remove(TALLOC_CTX *mem_ctx,
+ struct auth_serversupplied_info *server_info,
+ const char *printer);
/* The following definitions come from printing/pcap.c */
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
index a3b5c7f1dc..74a2dc433e 100644
--- a/source3/printing/nt_printing.c
+++ b/source3/printing/nt_printing.c
@@ -2114,38 +2114,6 @@ static int pack_values(NT_PRINTER_DATA *data, uint8 *buf, int buflen)
/****************************************************************************
- Delete a printer - this just deletes the printer info file, any open
- handles are not affected.
-****************************************************************************/
-
-uint32 del_a_printer(const char *sharename)
-{
- TDB_DATA kbuf;
- char *printdb_path = NULL;
- TALLOC_CTX *ctx = talloc_tos();
-
- kbuf = make_printer_tdbkey(ctx, sharename);
- tdb_delete(tdb_printers, kbuf);
-
- kbuf= make_printers_secdesc_tdbkey(ctx, sharename);
- tdb_delete(tdb_printers, kbuf);
-
- close_all_print_db();
-
- if (geteuid() == sec_initial_uid()) {
- if (asprintf(&printdb_path, "%s%s.tdb",
- cache_path("printing/"),
- sharename) < 0) {
- return (uint32)-1;
- }
- unlink(printdb_path);
- SAFE_FREE(printdb_path);
- }
-
- return 0;
-}
-
-/****************************************************************************
****************************************************************************/
static WERROR update_a_printer_2(NT_PRINTER_INFO_LEVEL_2 *info)
{
@@ -5238,4 +5206,15 @@ bool print_time_access_check(struct auth_serversupplied_info *server_info,
return ok;
}
+void nt_printer_remove(TALLOC_CTX *mem_ctx,
+ struct auth_serversupplied_info *server_info,
+ const char *printer)
+{
+ WERROR result;
+ result = winreg_delete_printer_key(mem_ctx, server_info, printer, "");
+ if (!W_ERROR_IS_OK(result)) {
+ DEBUG(0, ("nt_printer_remove: failed to remove rpinter %s",
+ printer));
+ }
+}
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 07e541d37f..2967fe11e2 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -336,6 +336,7 @@ static WERROR delete_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token, const c
static WERROR delete_printer_handle(pipes_struct *p, struct policy_handle *hnd)
{
Printer_entry *Printer = find_printer_index_by_hnd(p, hnd);
+ WERROR result;
if (!Printer) {
DEBUG(2,("delete_printer_handle: Invalid handle (%s:%u:%u)\n",
@@ -358,7 +359,9 @@ static WERROR delete_printer_handle(pipes_struct *p, struct policy_handle *hnd)
/* this does not need a become root since the access check has been
done on the handle already */
- if (del_a_printer( Printer->sharename ) != 0) {
+ result = winreg_delete_printer_key(p->mem_ctx, p->server_info,
+ Printer->sharename, "");
+ if (!W_ERROR_IS_OK(result)) {
DEBUG(3,("Error deleting printer %s\n", Printer->sharename));
return WERR_BADFID;
}
diff --git a/source3/smbd/server_reload.c b/source3/smbd/server_reload.c
index aed1037718..e958d284f8 100644
--- a/source3/smbd/server_reload.c
+++ b/source3/smbd/server_reload.c
@@ -69,7 +69,7 @@ void reload_printers(void)
DSPRINT_UNPUBLISH);
TALLOC_FREE(pinfo2);
}
- del_a_printer(pname);
+ nt_printer_remove(server_info, server_info, pname);
lp_killservice(snum);
}
}