mirror of
https://github.com/samba-team/samba.git
synced 2025-02-03 13:47:25 +03:00
Some tidyup fixes (memory leaks etc.). Still no progress with the
"no driver" issue. I'm banging my head against comparitive packet dumps right now... Jeremy.
This commit is contained in:
parent
6506e6f470
commit
03cd4aa144
@ -2589,6 +2589,7 @@ BOOL make_spoolss_q_enumprinterdata(SPOOL_Q_ENUMPRINTERDATA *q_u,
|
||||
const POLICY_HND *hnd,
|
||||
uint32 idx, uint32 valuelen, uint32 datalen);
|
||||
BOOL spoolss_io_q_setprinterdata(char *desc, SPOOL_Q_SETPRINTERDATA *q_u, prs_struct *ps, int depth);
|
||||
void free_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u);
|
||||
BOOL spoolss_io_r_setprinterdata(char *desc, SPOOL_R_SETPRINTERDATA *r_u, prs_struct *ps, int depth);
|
||||
BOOL convert_specific_param(NT_PRINTER_PARAM **param, const UNISTR2 *value,
|
||||
uint32 type, const uint8 *data, uint32 len);
|
||||
|
@ -232,9 +232,6 @@ BOOL prs_grow(prs_struct *ps, uint32 extra_space)
|
||||
if ((new_data = Realloc(ps->data_p, new_size)) == NULL) {
|
||||
DEBUG(0,("prs_grow: Realloc failure for size %u.\n",
|
||||
(unsigned int)new_size));
|
||||
/* JRATEST */
|
||||
smb_panic("prs_grow: ralloc fail\n");
|
||||
/* JRATEST */
|
||||
return False;
|
||||
}
|
||||
|
||||
@ -343,6 +340,9 @@ BOOL prs_append_prs_data(prs_struct *dst, prs_struct *src)
|
||||
|
||||
BOOL prs_append_some_prs_data(prs_struct *dst, prs_struct *src, int32 start, uint32 len)
|
||||
{
|
||||
if (len == 0)
|
||||
return True;
|
||||
|
||||
if(!prs_grow(dst, len))
|
||||
return False;
|
||||
|
||||
|
@ -1529,7 +1529,7 @@ static BOOL new_smb_io_relsecdesc(char *desc, NEW_BUFFER *buffer, int depth,
|
||||
********************************************************************/
|
||||
static BOOL new_smb_io_reldevmode(char *desc, NEW_BUFFER *buffer, int depth, DEVICEMODE **devmode)
|
||||
{
|
||||
prs_struct *ps=&(buffer->prs);
|
||||
prs_struct *ps=&buffer->prs;
|
||||
|
||||
prs_debug(ps, depth, desc, "new_smb_io_reldevmode");
|
||||
depth++;
|
||||
@ -2022,7 +2022,7 @@ static BOOL new_spoolss_io_buffer(char *desc, prs_struct *ps, int depth, NEW_BUF
|
||||
prs_debug(ps, depth, desc, "new_spoolss_io_buffer");
|
||||
depth++;
|
||||
|
||||
if (!prs_uint32("ptr", ps, depth, &(buffer->ptr)))
|
||||
if (!prs_uint32("ptr", ps, depth, &buffer->ptr))
|
||||
return False;
|
||||
|
||||
/* reading */
|
||||
@ -2031,7 +2031,7 @@ static BOOL new_spoolss_io_buffer(char *desc, prs_struct *ps, int depth, NEW_BUF
|
||||
buffer->string_at_end=0;
|
||||
|
||||
if (buffer->ptr==0) {
|
||||
if (!prs_init(&(buffer->prs), 0, 4, UNMARSHALL))
|
||||
if (!prs_init(&buffer->prs, 0, 4, UNMARSHALL))
|
||||
return False;
|
||||
return True;
|
||||
}
|
||||
@ -2039,10 +2039,10 @@ static BOOL new_spoolss_io_buffer(char *desc, prs_struct *ps, int depth, NEW_BUF
|
||||
if (!prs_uint32("size", ps, depth, &buffer->size))
|
||||
return False;
|
||||
|
||||
if (!prs_init(&(buffer->prs), buffer->size, 4, UNMARSHALL))
|
||||
if (!prs_init(&buffer->prs, buffer->size, 4, UNMARSHALL))
|
||||
return False;
|
||||
|
||||
if (!prs_append_some_prs_data(&(buffer->prs), ps, prs_offset(ps), buffer->size))
|
||||
if (!prs_append_some_prs_data(&buffer->prs, ps, prs_offset(ps), buffer->size))
|
||||
return False;
|
||||
|
||||
if (!prs_set_offset(&buffer->prs, 0))
|
||||
@ -2060,9 +2060,9 @@ static BOOL new_spoolss_io_buffer(char *desc, prs_struct *ps, int depth, NEW_BUF
|
||||
if (buffer->ptr==0)
|
||||
return True;
|
||||
|
||||
if (!prs_uint32("size", ps, depth, &(buffer->size)))
|
||||
if (!prs_uint32("size", ps, depth, &buffer->size))
|
||||
return False;
|
||||
if (!prs_append_some_prs_data(ps, &(buffer->prs), 0, buffer->size))
|
||||
if (!prs_append_some_prs_data(ps, &buffer->prs, 0, buffer->size))
|
||||
return False;
|
||||
|
||||
return True;
|
||||
@ -4543,6 +4543,11 @@ BOOL spoolss_io_q_setprinterdata(char *desc, SPOOL_Q_SETPRINTERDATA *q_u, prs_st
|
||||
return True;
|
||||
}
|
||||
|
||||
void free_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u)
|
||||
{
|
||||
safe_free(q_u->data);
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
********************************************************************/
|
||||
BOOL spoolss_io_r_setprinterdata(char *desc, SPOOL_R_SETPRINTERDATA *r_u, prs_struct *ps, int depth)
|
||||
|
@ -930,6 +930,8 @@ static BOOL api_spoolss_setprinterdata(prs_struct *data, prs_struct *rdata)
|
||||
&q_u.value, q_u.type, q_u.max_len,
|
||||
q_u.data, q_u.real_len, q_u.numeric_data);
|
||||
|
||||
free_spoolss_q_setprinterdata(&q_u);
|
||||
|
||||
if(!spoolss_io_r_setprinterdata("", &r_u, rdata, 0)) {
|
||||
DEBUG(0,("spoolss_io_r_setprinterdata: unable to marshall SPOOL_R_SETPRINTERDATA.\n"));
|
||||
return False;
|
||||
|
@ -773,13 +773,17 @@ static BOOL getprinterdata_printer(const POLICY_HND *handle,
|
||||
|
||||
DEBUG(5,("getprinterdata_printer:allocating %d\n", in_size));
|
||||
|
||||
if((*data = (uint8 *)malloc( in_size *sizeof(uint8) )) == NULL) {
|
||||
return False;
|
||||
}
|
||||
if (in_size) {
|
||||
if((*data = (uint8 *)malloc( in_size *sizeof(uint8) )) == NULL) {
|
||||
return False;
|
||||
}
|
||||
|
||||
memset(*data, 0, in_size *sizeof(uint8));
|
||||
/* copy the min(in_size, len) */
|
||||
memcpy(*data, idata, (len>in_size)?in_size:len *sizeof(uint8));
|
||||
memset(*data, 0, in_size *sizeof(uint8));
|
||||
/* copy the min(in_size, len) */
|
||||
memcpy(*data, idata, (len>in_size)?in_size:len *sizeof(uint8));
|
||||
} else {
|
||||
*data = NULL;
|
||||
}
|
||||
|
||||
*needed = len;
|
||||
|
||||
@ -835,9 +839,14 @@ uint32 _spoolss_getprinterdata(const POLICY_HND *handle, UNISTR2 *valuename,
|
||||
if (found==False) {
|
||||
DEBUG(5, ("value not found, allocating %d\n", *out_size));
|
||||
/* reply this param doesn't exist */
|
||||
if((*data=(uint8 *)malloc(*out_size*sizeof(uint8))) == NULL)
|
||||
return ERROR_NOT_ENOUGH_MEMORY;
|
||||
memset(*data, 0x0, *out_size*sizeof(uint8));
|
||||
if (*out_size) {
|
||||
if((*data=(uint8 *)malloc(*out_size*sizeof(uint8))) == NULL)
|
||||
return ERROR_NOT_ENOUGH_MEMORY;
|
||||
memset(*data, '\0', *out_size*sizeof(uint8));
|
||||
} else {
|
||||
*data = NULL;
|
||||
}
|
||||
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
@ -3102,8 +3111,8 @@ uint32 _spoolss_fcpn(const POLICY_HND *handle)
|
||||
Printer->notify.options=0;
|
||||
Printer->notify.localmachine[0]='\0';
|
||||
Printer->notify.printerlocal=0;
|
||||
safe_free(Printer->notify.option);
|
||||
safe_free(Printer->notify.option->ctr.type);
|
||||
safe_free(Printer->notify.option);
|
||||
Printer->notify.option=NULL;
|
||||
|
||||
return NT_STATUS_NO_PROBLEMO;
|
||||
|
Loading…
x
Reference in New Issue
Block a user