1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

s3-spoolss: Use winreg_delete_printer_key to delete printers.

Signed-off-by: Jim McDonough <jmcd@samba.org>
This commit is contained in:
Simo Sorce 2010-04-26 18:50:44 -04:00
parent fdf669d377
commit a1fe2ed68a
4 changed files with 19 additions and 34 deletions

View File

@ -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 */

View File

@ -2113,38 +2113,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));
}
}

View File

@ -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;
}

View File

@ -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);
}
}