mirror of
https://github.com/samba-team/samba.git
synced 2025-02-07 01:58:28 +03:00
rpc_parse/parse_spoolss.c: Fixed memory leak introduced by restructuring.
rpc_server/srv_spoolss_nt.c: Fixed problem with printer snum being read uninitialised. Jeremy.
This commit is contained in:
parent
3495d5cc3b
commit
1552db715d
@ -2540,16 +2540,28 @@ static BOOL new_spoolss_io_buffer(char *desc, prs_struct *ps, int depth, NEW_BUF
|
||||
return True;
|
||||
}
|
||||
else {
|
||||
/* writing */
|
||||
if (buffer->ptr==0)
|
||||
return True;
|
||||
|
||||
if (!prs_uint32("size", ps, depth, &buffer->size))
|
||||
return False;
|
||||
if (!prs_append_some_prs_data(ps, &buffer->prs, 0, buffer->size))
|
||||
return False;
|
||||
BOOL ret = False;
|
||||
|
||||
return True;
|
||||
/* writing */
|
||||
if (buffer->ptr==0) {
|
||||
/* We have finished with the data in buffer->prs - free it. */
|
||||
prs_mem_free(&buffer->prs);
|
||||
return True;
|
||||
}
|
||||
|
||||
if (!prs_uint32("size", ps, depth, &buffer->size))
|
||||
goto out;
|
||||
|
||||
if (!prs_append_some_prs_data(ps, &buffer->prs, 0, buffer->size))
|
||||
goto out;
|
||||
|
||||
ret = True;
|
||||
out:
|
||||
|
||||
/* We have finished with the data in buffer->prs - free it. */
|
||||
prs_mem_free(&buffer->prs);
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -158,7 +158,7 @@ static void free_spool_notify_option(SPOOL_NOTIFY_OPTION **pp)
|
||||
|
||||
SPOOL_NOTIFY_OPTION *dup_spool_notify_option(SPOOL_NOTIFY_OPTION *sp)
|
||||
{
|
||||
SPOOL_NOTIFY_OPTION *new_sp = malloc(sizeof(SPOOL_NOTIFY_OPTION));
|
||||
SPOOL_NOTIFY_OPTION *new_sp = NULL;
|
||||
|
||||
if (!sp)
|
||||
return NULL;
|
||||
@ -825,6 +825,9 @@ uint32 _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u,
|
||||
}
|
||||
else if ((printer_default->access_required & SERVER_ACCESS_ADMINISTER ) == SERVER_ACCESS_ADMINISTER) {
|
||||
|
||||
if (!get_printer_snum(handle, &snum))
|
||||
return ERROR_INVALID_HANDLE;
|
||||
|
||||
if (!lp_ms_add_printer_wizard()) {
|
||||
close_printer_handle(handle);
|
||||
return ERROR_ACCESS_DENIED;
|
||||
@ -843,13 +846,13 @@ uint32 _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u,
|
||||
/* NT doesn't let us connect to a printer if the connecting user
|
||||
doesn't have print permission. */
|
||||
|
||||
if (!get_printer_snum(handle, &snum))
|
||||
return ERROR_INVALID_HANDLE;
|
||||
|
||||
/* map an empty access mask to the minimum access mask */
|
||||
if (printer_default->access_required == 0x0)
|
||||
printer_default->access_required = PRINTER_ACCESS_USE;
|
||||
|
||||
if (!get_printer_snum(handle, &snum))
|
||||
return ERROR_INVALID_HANDLE;
|
||||
|
||||
if (!print_access_check(&user, snum, printer_default->access_required)) {
|
||||
DEBUG(3, ("access DENIED for printer open\n"));
|
||||
close_printer_handle(handle);
|
||||
|
Loading…
x
Reference in New Issue
Block a user