diff options
author | Simo Sorce <idra@samba.org> | 2010-04-26 18:50:44 -0400 |
---|---|---|
committer | Simo Sorce <idra@samba.org> | 2010-07-27 10:27:10 -0400 |
commit | a1fe2ed68aef71083dc6a9938440e32e5a0cf63c (patch) | |
tree | 302c14b90ef5ae2a5ac807cd737155eb06ea7f1c /source3 | |
parent | fdf669d37744487a7671b1d90541dbc21a41aeb6 (diff) | |
download | samba-a1fe2ed68aef71083dc6a9938440e32e5a0cf63c.tar.gz samba-a1fe2ed68aef71083dc6a9938440e32e5a0cf63c.tar.bz2 samba-a1fe2ed68aef71083dc6a9938440e32e5a0cf63c.zip |
s3-spoolss: Use winreg_delete_printer_key to delete printers.
Signed-off-by: Jim McDonough <jmcd@samba.org>
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/proto.h | 3 | ||||
-rw-r--r-- | source3/printing/nt_printing.c | 43 | ||||
-rw-r--r-- | source3/rpc_server/srv_spoolss_nt.c | 5 | ||||
-rw-r--r-- | source3/smbd/server_reload.c | 2 |
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); } } |