mirror of
https://github.com/samba-team/samba.git
synced 2025-08-03 04:22:09 +03:00
rpc_parse/parse_prs.c: Removed extraneous ()'s.
rpc_parse/parse_spoolss.c: Fixed the security descriptor marshalling in a INFO_2 struct. for some reason SD's should be done inline after the info2, not as the last buffer marshall. rpc_server/srv_spoolss_nt.c: Removed extraneous ()'s. Jeremy.
This commit is contained in:
@ -817,7 +817,7 @@ BOOL prs_string(char *name, prs_struct *ps, int depth, char *str, int len, int m
|
||||
|
||||
BOOL prs_uint16_pre(char *name, prs_struct *ps, int depth, uint16 *data16, uint32 *offset)
|
||||
{
|
||||
(*offset) = ps->data_offset;
|
||||
*offset = ps->data_offset;
|
||||
if (UNMARSHALLING(ps)) {
|
||||
/* reading. */
|
||||
return prs_uint16(name, ps, depth, data16);
|
||||
@ -864,7 +864,7 @@ BOOL prs_uint16_post(char *name, prs_struct *ps, int depth, uint16 *data16,
|
||||
|
||||
BOOL prs_uint32_pre(char *name, prs_struct *ps, int depth, uint32 *data32, uint32 *offset)
|
||||
{
|
||||
(*offset) = ps->data_offset;
|
||||
*offset = ps->data_offset;
|
||||
if (UNMARSHALLING(ps)) {
|
||||
/* reading. */
|
||||
return prs_uint32(name, ps, depth, data32);
|
||||
|
@ -333,10 +333,9 @@ static BOOL smb_io_notify_info_data(char *desc,SPOOL_NOTIFY_INFO_DATA *data, prs
|
||||
return False;
|
||||
if(!prs_uint32("id", ps, depth, &data->id))
|
||||
return False;
|
||||
#if 1 /* JRATEST - NEEDED ???? */
|
||||
if(!prs_uint32("how many words", ps, depth, &how_many_words))
|
||||
return False;
|
||||
#endif /* JRATEST - NEEDED ???? */
|
||||
|
||||
|
||||
/*prs_align(ps);*/
|
||||
|
||||
@ -1358,7 +1357,7 @@ static BOOL spoolss_smb_io_unistr(char *desc, UNISTR *uni, prs_struct *ps, int d
|
||||
********************************************************************/
|
||||
static BOOL new_smb_io_relstr(char *desc, NEW_BUFFER *buffer, int depth, UNISTR *string)
|
||||
{
|
||||
prs_struct *ps=&(buffer->prs);
|
||||
prs_struct *ps=&buffer->prs;
|
||||
|
||||
if (MARSHALLING(ps)) {
|
||||
uint32 struct_offset = prs_offset(ps);
|
||||
@ -1421,15 +1420,6 @@ static BOOL new_smb_io_relarraystr(char *desc, NEW_BUFFER *buffer, int depth, ui
|
||||
p=*string;
|
||||
q=*string;
|
||||
|
||||
#if 0 /* JRATEST */
|
||||
if (p == NULL) {
|
||||
relative_offset = 0;
|
||||
if (!prs_uint32("offset", ps, depth, &relative_offset))
|
||||
return False;
|
||||
return True;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* first write the last 0 */
|
||||
buffer->string_at_end -= 2;
|
||||
if(!prs_set_offset(ps, buffer->string_at_end))
|
||||
@ -1438,13 +1428,6 @@ static BOOL new_smb_io_relarraystr(char *desc, NEW_BUFFER *buffer, int depth, ui
|
||||
if(!prs_uint16("leading zero", ps, depth, &zero))
|
||||
return False;
|
||||
|
||||
#if 0 /* JRATEST */
|
||||
if (p == NULL)
|
||||
p = &zero;
|
||||
if (q == NULL)
|
||||
q = &zero;
|
||||
#endif /* JRATEST */
|
||||
|
||||
while (p && (*p!=0)) {
|
||||
while (*q!=0)
|
||||
q++;
|
||||
@ -1532,11 +1515,15 @@ static BOOL new_smb_io_relsecdesc(char *desc, NEW_BUFFER *buffer, int depth,
|
||||
}
|
||||
|
||||
if (*secdesc != NULL) {
|
||||
#if 0 /* JRATEST */
|
||||
if(!prs_set_offset(ps, 0x54))
|
||||
return False;
|
||||
#else
|
||||
buffer->string_at_end -= sec_desc_size(*secdesc);
|
||||
|
||||
if(!prs_set_offset(ps, buffer->string_at_end))
|
||||
return False;
|
||||
|
||||
#endif
|
||||
/* write the secdesc */
|
||||
if (!sec_io_desc(desc, secdesc, ps, depth))
|
||||
return False;
|
||||
@ -1547,6 +1534,10 @@ static BOOL new_smb_io_relsecdesc(char *desc, NEW_BUFFER *buffer, int depth,
|
||||
|
||||
relative_offset=buffer->string_at_end - buffer->struct_start;
|
||||
/* write its offset */
|
||||
#if 0 /* JRATEST */
|
||||
relative_offset = 0x54;
|
||||
#endif
|
||||
|
||||
if (!prs_uint32("offset", ps, depth, &relative_offset))
|
||||
return False;
|
||||
} else {
|
||||
@ -1763,6 +1754,7 @@ BOOL new_smb_io_printer_info_1(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_1 *i
|
||||
********************************************************************/
|
||||
BOOL new_smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *info, int depth)
|
||||
{
|
||||
uint32 sec_offset;
|
||||
prs_struct *ps=&buffer->prs;
|
||||
|
||||
prs_debug(ps, depth, desc, "new_smb_io_printer_info_2");
|
||||
@ -1798,7 +1790,7 @@ BOOL new_smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *i
|
||||
if (!new_smb_io_relstr("parameters", buffer, depth, &info->parameters))
|
||||
return False;
|
||||
|
||||
if (!new_smb_io_relsecdesc("secdesc", buffer, depth, &info->secdesc))
|
||||
if (!prs_uint32_pre("secdesc_ptr ", ps, depth, NULL, &sec_offset))
|
||||
return False;
|
||||
|
||||
if (!prs_uint32("attributes", ps, depth, &info->attributes))
|
||||
@ -1818,6 +1810,12 @@ BOOL new_smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *i
|
||||
if (!prs_uint32("averageppm", ps, depth, &info->averageppm))
|
||||
return False;
|
||||
|
||||
if (!prs_uint32_post("secdesc_ptr", ps, depth, NULL, sec_offset, info->secdesc ? prs_offset(ps) : 0 ))
|
||||
return False;
|
||||
|
||||
if (!sec_io_desc("secdesc", &info->secdesc, ps, depth))
|
||||
return False;
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
|
@ -495,7 +495,11 @@ static BOOL alloc_buffer_size(NEW_BUFFER *buffer, uint32 buffer_size)
|
||||
|
||||
prs_set_offset(ps, old_offset);
|
||||
|
||||
#if 0 /* JRATEST */
|
||||
buffer->string_at_end = buffer_size;
|
||||
#else
|
||||
buffer->string_at_end=prs_data_size(ps);
|
||||
#endif
|
||||
|
||||
return True;
|
||||
}
|
||||
@ -3240,12 +3244,12 @@ static void fill_job_info_1(JOB_INFO_1 *job_info, print_queue_struct *queue,
|
||||
snprintf(temp_name, sizeof(temp_name), "\\\\%s", global_myname);
|
||||
|
||||
job_info->jobid=queue->job;
|
||||
init_unistr(&(job_info->printername), lp_servicename(snum));
|
||||
init_unistr(&(job_info->machinename), temp_name);
|
||||
init_unistr(&(job_info->username), queue->user);
|
||||
init_unistr(&(job_info->document), queue->file);
|
||||
init_unistr(&(job_info->datatype), "RAW");
|
||||
init_unistr(&(job_info->text_status), "");
|
||||
init_unistr(&job_info->printername, lp_servicename(snum));
|
||||
init_unistr(&job_info->machinename, temp_name);
|
||||
init_unistr(&job_info->username, queue->user);
|
||||
init_unistr(&job_info->document, queue->file);
|
||||
init_unistr(&job_info->datatype, "RAW");
|
||||
init_unistr(&job_info->text_status, "");
|
||||
job_info->status=nt_printj_status(queue->status);
|
||||
job_info->priority=queue->priority;
|
||||
job_info->position=position;
|
||||
@ -3279,14 +3283,14 @@ static BOOL fill_job_info_2(JOB_INFO_2 *job_info, print_queue_struct *queue,
|
||||
|
||||
init_unistr(&(job_info->printername), chaine);
|
||||
|
||||
init_unistr(&(job_info->machinename), temp_name);
|
||||
init_unistr(&(job_info->username), queue->user);
|
||||
init_unistr(&(job_info->document), queue->file);
|
||||
init_unistr(&(job_info->notifyname), queue->user);
|
||||
init_unistr(&(job_info->datatype), "RAW");
|
||||
init_unistr(&(job_info->printprocessor), "winprint");
|
||||
init_unistr(&(job_info->parameters), "");
|
||||
init_unistr(&(job_info->text_status), "");
|
||||
init_unistr(&job_info->machinename, temp_name);
|
||||
init_unistr(&job_info->username, queue->user);
|
||||
init_unistr(&job_info->document, queue->file);
|
||||
init_unistr(&job_info->notifyname, queue->user);
|
||||
init_unistr(&job_info->datatype, "RAW");
|
||||
init_unistr(&job_info->printprocessor, "winprint");
|
||||
init_unistr(&job_info->parameters, "");
|
||||
init_unistr(&job_info->text_status, "");
|
||||
|
||||
/* and here the security descriptor */
|
||||
|
||||
@ -3328,13 +3332,13 @@ static uint32 enumjobs_level1(print_queue_struct *queue, int snum,
|
||||
}
|
||||
|
||||
for (i=0; i<*returned; i++)
|
||||
fill_job_info_1(&(info[i]), &(queue[i]), i, snum);
|
||||
fill_job_info_1(&info[i], &queue[i], i, snum);
|
||||
|
||||
safe_free(queue);
|
||||
|
||||
/* check the required size. */
|
||||
for (i=0; i<*returned; i++)
|
||||
(*needed) += spoolss_size_job_info_1(&(info[i]));
|
||||
(*needed) += spoolss_size_job_info_1(&info[i]);
|
||||
|
||||
if (!alloc_buffer_size(buffer, *needed)) {
|
||||
safe_free(info);
|
||||
@ -3343,7 +3347,7 @@ static uint32 enumjobs_level1(print_queue_struct *queue, int snum,
|
||||
|
||||
/* fill the buffer with the structures */
|
||||
for (i=0; i<*returned; i++)
|
||||
new_smb_io_job_info_1("", buffer, &(info[i]), 0);
|
||||
new_smb_io_job_info_1("", buffer, &info[i], 0);
|
||||
|
||||
/* clear memory */
|
||||
safe_free(info);
|
||||
@ -3374,13 +3378,13 @@ static uint32 enumjobs_level2(print_queue_struct *queue, int snum,
|
||||
}
|
||||
|
||||
for (i=0; i<*returned; i++)
|
||||
fill_job_info_2(&(info[i]), &(queue[i]), i, snum);
|
||||
fill_job_info_2(&(info[i]), &queue[i], i, snum);
|
||||
|
||||
safe_free(queue);
|
||||
|
||||
/* check the required size. */
|
||||
for (i=0; i<*returned; i++)
|
||||
(*needed) += spoolss_size_job_info_2(&(info[i]));
|
||||
(*needed) += spoolss_size_job_info_2(&info[i]);
|
||||
|
||||
if (!alloc_buffer_size(buffer, *needed)) {
|
||||
safe_free(info);
|
||||
@ -3389,7 +3393,7 @@ static uint32 enumjobs_level2(print_queue_struct *queue, int snum,
|
||||
|
||||
/* fill the buffer with the structures */
|
||||
for (i=0; i<*returned; i++)
|
||||
new_smb_io_job_info_2("", buffer, &(info[i]), 0);
|
||||
new_smb_io_job_info_2("", buffer, &info[i], 0);
|
||||
|
||||
/* clear memory */
|
||||
safe_free(info);
|
||||
|
Reference in New Issue
Block a user