mirror of
https://github.com/samba-team/samba.git
synced 2025-02-23 09:57:40 +03:00
oops ! forgot smb.h in last commit
added info level 1 parsing code for addprinter(ex) J.F. (This used to be commit 4847f7b17b2d23e4efd4e7cae6bfcfc2319b9409)
This commit is contained in:
parent
7d2a8cd4c6
commit
c5fbb293a8
@ -2429,6 +2429,7 @@ BOOL spoolss_io_q_enumforms(char *desc, SPOOL_Q_ENUMFORMS *q_u, prs_struct *ps,
|
||||
BOOL new_spoolss_io_r_enumforms(char *desc, SPOOL_R_ENUMFORMS *r_u, prs_struct *ps, int depth);
|
||||
BOOL new_spoolss_io_r_enumports(char *desc, SPOOL_R_ENUMPORTS *r_u, prs_struct *ps, int depth);
|
||||
BOOL spoolss_io_q_enumports(char *desc, SPOOL_Q_ENUMPORTS *q_u, prs_struct *ps, int depth);
|
||||
BOOL spool_io_printer_info_level_1(char *desc, SPOOL_PRINTER_INFO_LEVEL_1 *il, prs_struct *ps, int depth);
|
||||
BOOL spool_io_printer_info_level_2(char *desc, SPOOL_PRINTER_INFO_LEVEL_2 *il, prs_struct *ps, int depth);
|
||||
BOOL spool_io_printer_info_level(char *desc, SPOOL_PRINTER_INFO_LEVEL *il, prs_struct *ps, int depth);
|
||||
BOOL spoolss_io_q_addprinterex(char *desc, SPOOL_Q_ADDPRINTEREX *q_u, prs_struct *ps, int depth);
|
||||
|
@ -1192,6 +1192,17 @@ typedef struct spool_r_enumforms
|
||||
SPOOL_R_ENUMFORMS;
|
||||
|
||||
|
||||
typedef struct spool_printer_info_level_1
|
||||
{
|
||||
uint32 flags;
|
||||
uint32 description_ptr;
|
||||
uint32 name_ptr;
|
||||
uint32 comment_ptr;
|
||||
UNISTR2 description;
|
||||
UNISTR2 name;
|
||||
UNISTR2 comment;
|
||||
} SPOOL_PRINTER_INFO_LEVEL_1;
|
||||
|
||||
typedef struct spool_printer_info_level_2
|
||||
{
|
||||
uint32 servername_ptr;
|
||||
@ -1234,6 +1245,7 @@ typedef struct spool_printer_info_level
|
||||
{
|
||||
uint32 level;
|
||||
uint32 info_ptr;
|
||||
SPOOL_PRINTER_INFO_LEVEL_1 *info_1;
|
||||
SPOOL_PRINTER_INFO_LEVEL_2 *info_2;
|
||||
}
|
||||
SPOOL_PRINTER_INFO_LEVEL;
|
||||
|
@ -171,6 +171,7 @@ implemented */
|
||||
#define ERRbaddirectory 267 /* Invalid directory name in a path. */
|
||||
#define ERRunknownipc 2142
|
||||
|
||||
#define ERROR_ACCESS_DENIED (5)
|
||||
#define ERROR_INVALID_PARAMETER (87)
|
||||
#define ERROR_INSUFFICIENT_BUFFER (122)
|
||||
#define ERROR_INVALID_NAME (123)
|
||||
|
@ -3045,6 +3045,36 @@ BOOL spoolss_io_q_enumports(char *desc, SPOOL_Q_ENUMPORTS *q_u, prs_struct *ps,
|
||||
return True;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Parse a SPOOL_PRINTER_INFO_LEVEL_1 structure.
|
||||
********************************************************************/
|
||||
BOOL spool_io_printer_info_level_1(char *desc, SPOOL_PRINTER_INFO_LEVEL_1 *il, prs_struct *ps, int depth)
|
||||
{
|
||||
prs_debug(ps, depth, desc, "spool_io_printer_info_level_1");
|
||||
depth++;
|
||||
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
|
||||
if(!prs_uint32("flags", ps, depth, &il->flags))
|
||||
return False;
|
||||
if(!prs_uint32("description_ptr", ps, depth, &il->description_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("name_ptr", ps, depth, &il->name_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("comment_ptr", ps, depth, &il->comment_ptr))
|
||||
return False;
|
||||
|
||||
if(!smb_io_unistr2("description", &il->description, il->description_ptr, ps, depth))
|
||||
return False;
|
||||
if(!smb_io_unistr2("name", &il->name, il->name_ptr, ps, depth))
|
||||
return False;
|
||||
if(!smb_io_unistr2("comment", &il->comment, il->comment_ptr, ps, depth))
|
||||
return False;
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
Parse a SPOOL_PRINTER_INFO_LEVEL_2 structure.
|
||||
********************************************************************/
|
||||
@ -3142,8 +3172,10 @@ BOOL spool_io_printer_info_level(char *desc, SPOOL_PRINTER_INFO_LEVEL *il, prs_s
|
||||
|
||||
/* if no struct inside just return */
|
||||
if (il->info_ptr==0) {
|
||||
if (UNMARSHALLING(ps))
|
||||
if (UNMARSHALLING(ps)) {
|
||||
il->info_1=NULL;
|
||||
il->info_2=NULL;
|
||||
}
|
||||
return True;
|
||||
}
|
||||
|
||||
@ -3158,6 +3190,12 @@ BOOL spool_io_printer_info_level(char *desc, SPOOL_PRINTER_INFO_LEVEL *il, prs_s
|
||||
* level 2 is used by addprinter
|
||||
* and by setprinter when updating printer's info
|
||||
*/
|
||||
case 1:
|
||||
if (UNMARSHALLING(ps))
|
||||
il->info_1=(SPOOL_PRINTER_INFO_LEVEL_1 *)malloc(sizeof(SPOOL_PRINTER_INFO_LEVEL_1));
|
||||
if (!spool_io_printer_info_level_1("", il->info_1, ps, depth))
|
||||
return False;
|
||||
break;
|
||||
case 2:
|
||||
if (UNMARSHALLING(ps))
|
||||
il->info_2=(SPOOL_PRINTER_INFO_LEVEL_2 *)malloc(sizeof(SPOOL_PRINTER_INFO_LEVEL_2));
|
||||
|
@ -759,6 +759,17 @@ static BOOL api_spoolss_addprinterex(uint16 vuid, prs_struct *data, prs_struct *
|
||||
return False;
|
||||
}
|
||||
|
||||
if (q_u.info.info_ptr!=0) {
|
||||
switch (q_u.info.level) {
|
||||
case 1:
|
||||
safe_free(q_u.info.info_1);
|
||||
break;
|
||||
case 2:
|
||||
safe_free(q_u.info.info_2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
|
@ -2855,9 +2855,10 @@ uint32 _spoolss_setprinter(const POLICY_HND *handle, uint32 level,
|
||||
case 2:
|
||||
return update_printer(handle, level, info, devmode_ctr.devmode);
|
||||
break;
|
||||
default:
|
||||
return ERROR_INVALID_LEVEL;
|
||||
break;
|
||||
}
|
||||
|
||||
return NT_STATUS_INVALID_INFO_CLASS;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
Loading…
x
Reference in New Issue
Block a user