mirror of
https://github.com/samba-team/samba.git
synced 2025-02-25 17:57:42 +03:00
added spool_io_printer_driver_info_level_6()
thsi function and the associated header structure were autogenerated using a little awk based code geerator I wroe ths evening. I'll commit that next ...
This commit is contained in:
parent
ad54472200
commit
974813f0d4
@ -149,9 +149,30 @@ typedef struct nt_printer_driver_info_level_3
|
||||
|
||||
} NT_PRINTER_DRIVER_INFO_LEVEL_3;
|
||||
|
||||
/* SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 structure */
|
||||
typedef struct {
|
||||
uint32 version;
|
||||
fstring name;
|
||||
fstring environment;
|
||||
fstring driverpath;
|
||||
fstring datafile;
|
||||
fstring configfile;
|
||||
fstring helpfile;
|
||||
fstring monitorname;
|
||||
fstring defaultdatatype;
|
||||
fstring mfgname;
|
||||
fstring oemurl;
|
||||
fstring hardwareid;
|
||||
fstring provider;
|
||||
char **dependentfiles;
|
||||
char **previousnames;
|
||||
} NT_PRINTER_DRIVER_INFO_LEVEL_6;
|
||||
|
||||
|
||||
typedef struct nt_printer_driver_info_level
|
||||
{
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL_3 *info_3;
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL_6 *info_6;
|
||||
} NT_PRINTER_DRIVER_INFO_LEVEL;
|
||||
|
||||
typedef struct nt_printer_param
|
||||
|
@ -1989,6 +1989,7 @@ BOOL smb_io_pol_hnd(char *desc, POLICY_HND *pol, prs_struct *ps, int depth);
|
||||
BOOL smb_io_dom_query_3(char *desc, DOM_QUERY_3 *d_q, prs_struct *ps, int depth);
|
||||
BOOL smb_io_dom_query_5(char *desc, DOM_QUERY_3 *d_q, prs_struct *ps, int depth);
|
||||
BOOL smb_io_unistr3(char *desc, UNISTR3 *name, prs_struct *ps, int depth);
|
||||
BOOL prs_uint64(char *name, prs_struct *ps, int depth, UINT64_S *data64);
|
||||
|
||||
/*The following definitions come from rpc_parse/parse_net.c */
|
||||
|
||||
@ -2069,6 +2070,7 @@ BOOL net_io_r_sam_logoff(char *desc, NET_R_SAM_LOGOFF *r_l, prs_struct *ps, int
|
||||
|
||||
/*The following definitions come from rpc_parse/parse_prs.c */
|
||||
|
||||
void prs_dump(char *name, int level, prs_struct *ps);
|
||||
void prs_debug(prs_struct *ps, int depth, char *desc, char *fn_name);
|
||||
BOOL prs_init(prs_struct *ps, uint32 size, uint8 align, BOOL io);
|
||||
BOOL prs_read(prs_struct *ps, int fd, size_t len, int timeout);
|
||||
@ -2553,6 +2555,8 @@ BOOL spoolss_io_q_addprinterex(char *desc, SPOOL_Q_ADDPRINTEREX *q_u, prs_struct
|
||||
BOOL spoolss_io_r_addprinterex(char *desc, SPOOL_R_ADDPRINTEREX *r_u, prs_struct *ps, int depth);
|
||||
BOOL spool_io_printer_driver_info_level_3(char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **q_u,
|
||||
prs_struct *ps, int depth);
|
||||
BOOL spool_io_printer_driver_info_level_6(char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 **q_u,
|
||||
prs_struct *ps, int depth);
|
||||
BOOL uniarray_2_ascarray(BUFFER5 *buf5, char ***ar);
|
||||
BOOL smb_io_unibuffer(char *desc, UNISTR2 *buffer, prs_struct *ps, int depth);
|
||||
BOOL spool_io_printer_driver_info_level(char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL *il, prs_struct *ps, int depth);
|
||||
@ -2560,6 +2564,8 @@ BOOL spoolss_io_q_addprinterdriver(char *desc, SPOOL_Q_ADDPRINTERDRIVER *q_u, pr
|
||||
BOOL spoolss_io_r_addprinterdriver(char *desc, SPOOL_R_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth);
|
||||
BOOL uni_2_asc_printer_driver_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *uni,
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL_3 **asc);
|
||||
BOOL uni_2_asc_printer_driver_6(SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *uni,
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL_6 **asc);
|
||||
BOOL uni_2_asc_printer_info_2(const SPOOL_PRINTER_INFO_LEVEL_2 *uni,
|
||||
NT_PRINTER_INFO_LEVEL_2 **asc);
|
||||
BOOL spoolss_io_q_getprinterdriverdir(char *desc, SPOOL_Q_GETPRINTERDRIVERDIR *q_u, prs_struct *ps, int depth);
|
||||
|
@ -293,4 +293,10 @@ typedef struct lsa_policy_info
|
||||
|
||||
} POLICY_HND;
|
||||
|
||||
typedef struct uint64_s
|
||||
{
|
||||
uint32 low;
|
||||
uint32 high;
|
||||
} UINT64_S;
|
||||
|
||||
#endif /* _RPC_MISC_H */
|
||||
|
@ -1273,11 +1273,52 @@ typedef struct spool_printer_driver_info_level_3
|
||||
}
|
||||
SPOOL_PRINTER_DRIVER_INFO_LEVEL_3;
|
||||
|
||||
/* SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 structure */
|
||||
typedef struct {
|
||||
uint32 dummy1;
|
||||
uint32 version;
|
||||
uint32 name_ptr;
|
||||
uint32 environment_ptr;
|
||||
uint32 driverpath_ptr;
|
||||
uint32 datafile_ptr;
|
||||
uint32 configfile_ptr;
|
||||
uint32 helpfile_ptr;
|
||||
uint32 monitorname_ptr;
|
||||
uint32 defaultdatatype_ptr;
|
||||
uint32 dependentfiles_len;
|
||||
uint32 dependentfiles_ptr;
|
||||
uint32 previousnames_len;
|
||||
uint32 previousnames_ptr;
|
||||
NTTIME driverdate;
|
||||
UINT64_S driverversion;
|
||||
uint32 dummy4;
|
||||
uint32 mfgname_ptr;
|
||||
uint32 oemurl_ptr;
|
||||
uint32 hardwareid_ptr;
|
||||
uint32 provider_ptr;
|
||||
UNISTR2 name;
|
||||
UNISTR2 environment;
|
||||
UNISTR2 driverpath;
|
||||
UNISTR2 datafile;
|
||||
UNISTR2 configfile;
|
||||
UNISTR2 helpfile;
|
||||
UNISTR2 monitorname;
|
||||
UNISTR2 defaultdatatype;
|
||||
BUFFER5 dependentfiles;
|
||||
BUFFER5 previousnames;
|
||||
UNISTR2 mfgname;
|
||||
UNISTR2 oemurl;
|
||||
UNISTR2 hardwareid;
|
||||
UNISTR2 provider;
|
||||
} SPOOL_PRINTER_DRIVER_INFO_LEVEL_6;
|
||||
|
||||
|
||||
typedef struct spool_printer_driver_info_level
|
||||
{
|
||||
uint32 level;
|
||||
uint32 ptr;
|
||||
SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *info_3;
|
||||
SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *info_6;
|
||||
}
|
||||
SPOOL_PRINTER_DRIVER_INFO_LEVEL;
|
||||
|
||||
|
@ -379,6 +379,75 @@ static uint32 add_a_printer_driver_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 *driver)
|
||||
return(0);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
****************************************************************************/
|
||||
static uint32 add_a_printer_driver_6(NT_PRINTER_DRIVER_INFO_LEVEL_6 *driver)
|
||||
{
|
||||
int fd;
|
||||
pstring file;
|
||||
fstring architecture;
|
||||
fstring driver_name;
|
||||
char **dependentfiles;
|
||||
|
||||
/* create a file in the dir lp_nt_driver_file */
|
||||
/* with the full printer DRIVER name */
|
||||
/* eg: "/usr/local/samba/lib/NTdriver_HP LaserJet 6MP" */
|
||||
/* each name is really defining an *unique* printer model */
|
||||
/* I don't want to mangle the name to find it back when enumerating */
|
||||
|
||||
/* il faut substituer les / par 1 autre caractere d'abord */
|
||||
/* dans le nom de l'imprimante par un # ???*/
|
||||
|
||||
StrnCpy(driver_name, driver->name, sizeof(driver_name)-1);
|
||||
|
||||
all_string_sub(driver_name, "/", "#", 0);
|
||||
|
||||
get_short_archi(architecture, driver->environment);
|
||||
|
||||
slprintf(file, sizeof(file)-1, "%s/NTdriver_%s_%s",
|
||||
lp_nt_drivers_file(), architecture, driver_name);
|
||||
|
||||
unlink(file);
|
||||
if((fd = sys_open(file, O_WRONLY|O_CREAT|O_TRUNC|O_EXCL, 0644)) == -1)
|
||||
{
|
||||
DEBUG(0, ("add_a_printer_driver_3: Cannot create driver file [%s]. Error was %s\n", file, strerror(errno) ));
|
||||
return(2);
|
||||
}
|
||||
|
||||
/*
|
||||
* cversion must be 2.
|
||||
* when adding a printer ON the SERVER
|
||||
* rpcAddPrinterDriver defines it to zero
|
||||
* which is wrong !!!
|
||||
*
|
||||
* JFM, 4/14/99
|
||||
*/
|
||||
driver->version=2;
|
||||
|
||||
fdprintf(fd, "version: %d\n", driver->version);
|
||||
fdprintf(fd, "name: %s\n", driver->name);
|
||||
fdprintf(fd, "environment: %s\n", driver->environment);
|
||||
fdprintf(fd, "driverpath: %s\n", driver->driverpath);
|
||||
fdprintf(fd, "datafile: %s\n", driver->datafile);
|
||||
fdprintf(fd, "configfile: %s\n", driver->configfile);
|
||||
fdprintf(fd, "helpfile: %s\n", driver->helpfile);
|
||||
fdprintf(fd, "monitorname: %s\n", driver->monitorname);
|
||||
fdprintf(fd, "defaultdatatype: %s\n", driver->defaultdatatype);
|
||||
|
||||
/* and the dependants files */
|
||||
|
||||
dependentfiles=driver->dependentfiles;
|
||||
|
||||
while ( **dependentfiles != '\0' )
|
||||
{
|
||||
fdprintf(fd, "dependentfile: %s\n", *dependentfiles);
|
||||
dependentfiles++;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return(0);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
****************************************************************************/
|
||||
static uint32 get_a_printer_driver_3(NT_PRINTER_DRIVER_INFO_LEVEL_3 **info_ptr, fstring in_prt, fstring in_arch)
|
||||
@ -1307,6 +1376,12 @@ uint32 add_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 level)
|
||||
success=add_a_printer_driver_3(driver.info_3);
|
||||
break;
|
||||
}
|
||||
|
||||
case 6:
|
||||
{
|
||||
success=add_a_printer_driver_6(driver.info_6);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
success=1;
|
||||
break;
|
||||
@ -1335,7 +1410,7 @@ uint32 get_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL *driver, uint32 level,
|
||||
break;
|
||||
}
|
||||
|
||||
dump_a_printer_driver(*driver, level);
|
||||
if (success == 0) dump_a_printer_driver(*driver, level);
|
||||
return (success);
|
||||
}
|
||||
|
||||
|
@ -1380,3 +1380,15 @@ BOOL smb_io_unistr3(char *desc, UNISTR3 *name, prs_struct *ps, int depth)
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
Stream a uint64_struct
|
||||
********************************************************************/
|
||||
BOOL prs_uint64(char *name, prs_struct *ps, int depth, UINT64_S *data64)
|
||||
{
|
||||
return prs_uint32(name, ps, depth+1, &data64->low) &&
|
||||
prs_uint32(name, ps, depth+1, &data64->high);
|
||||
}
|
||||
|
||||
|
||||
|
@ -26,6 +26,25 @@ extern int DEBUGLEVEL;
|
||||
#include "includes.h"
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
dump a prs to a file
|
||||
********************************************************************/
|
||||
void prs_dump(char *name, int level, prs_struct *ps)
|
||||
{
|
||||
int fd;
|
||||
pstring fname;
|
||||
if (DEBUGLEVEL < 50) return;
|
||||
slprintf(fname,sizeof(fname), "/tmp/%s_%d.prs", name, level);
|
||||
fd = open(fname, O_WRONLY|O_CREAT|O_EXCL, 0644);
|
||||
if (fd != -1) {
|
||||
write(fd, ps->data_p + ps->data_offset, ps->buffer_size - ps->data_offset);
|
||||
close(fd);
|
||||
DEBUG(0,("created %s\n", fname));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
debug output for parsing info.
|
||||
|
||||
@ -428,7 +447,6 @@ BOOL prs_uint32(char *name, prs_struct *ps, int depth, uint32 *data32)
|
||||
return True;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************
|
||||
Stream an array of uint8s. Length is number of uint8s.
|
||||
********************************************************************/
|
||||
|
@ -3574,6 +3574,146 @@ BOOL spool_io_printer_driver_info_level_3(char *desc, SPOOL_PRINTER_DRIVER_INFO_
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
parse a SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 structure
|
||||
********************************************************************/
|
||||
BOOL spool_io_printer_driver_info_level_6(char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 **q_u,
|
||||
prs_struct *ps, int depth)
|
||||
{
|
||||
SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *il;
|
||||
|
||||
prs_debug(ps, depth, desc, "spool_io_printer_driver_info_level_6");
|
||||
depth++;
|
||||
|
||||
/* reading */
|
||||
if (UNMARSHALLING(ps)) {
|
||||
il=(SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *)malloc(sizeof(SPOOL_PRINTER_DRIVER_INFO_LEVEL_6));
|
||||
if(il == NULL)
|
||||
return False;
|
||||
ZERO_STRUCTP(il);
|
||||
*q_u=il;
|
||||
}
|
||||
else {
|
||||
il=*q_u;
|
||||
}
|
||||
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
|
||||
|
||||
/* parse the main elements the packet */
|
||||
|
||||
if(!prs_uint32("dummy1", ps, depth, &il->dummy1))
|
||||
return False;
|
||||
if(!prs_uint32("version", ps, depth, &il->version))
|
||||
return False;
|
||||
if(!prs_uint32("name_ptr", ps, depth, &il->name_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("environment_ptr", ps, depth, &il->environment_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("driverpath_ptr", ps, depth, &il->driverpath_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("datafile_ptr", ps, depth, &il->datafile_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("configfile_ptr", ps, depth, &il->configfile_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("helpfile_ptr", ps, depth, &il->helpfile_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("monitorname_ptr", ps, depth, &il->monitorname_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("defaultdatatype_ptr", ps, depth, &il->defaultdatatype_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("dependentfiles_len", ps, depth, &il->dependentfiles_len))
|
||||
return False;
|
||||
if(!prs_uint32("dependentfiles_ptr", ps, depth, &il->dependentfiles_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("previousnames_len", ps, depth, &il->previousnames_len))
|
||||
return False;
|
||||
if(!prs_uint32("previousnames_ptr", ps, depth, &il->previousnames_ptr))
|
||||
return False;
|
||||
if(!smb_io_time("driverdate", &il->driverdate, ps, depth))
|
||||
return False;
|
||||
if(!prs_uint64("driverversion", ps, depth, &il->driverversion))
|
||||
return False;
|
||||
if(!prs_uint32("dummy4", ps, depth, &il->dummy4))
|
||||
return False;
|
||||
if(!prs_uint32("mfgname_ptr", ps, depth, &il->mfgname_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("oemurl_ptr", ps, depth, &il->oemurl_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("hardwareid_ptr", ps, depth, &il->hardwareid_ptr))
|
||||
return False;
|
||||
if(!prs_uint32("provider_ptr", ps, depth, &il->provider_ptr))
|
||||
return False;
|
||||
|
||||
/* parse the structures in the packet */
|
||||
|
||||
if(!smb_io_unistr2("name", &il->name, il->name_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if(!smb_io_unistr2("environment", &il->environment, il->environment_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if(!smb_io_unistr2("driverpath", &il->driverpath, il->driverpath_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if(!smb_io_unistr2("datafile", &il->datafile, il->datafile_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if(!smb_io_unistr2("configfile", &il->configfile, il->configfile_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if(!smb_io_unistr2("helpfile", &il->helpfile, il->helpfile_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if(!smb_io_unistr2("monitorname", &il->monitorname, il->monitorname_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if(!smb_io_unistr2("defaultdatatype", &il->defaultdatatype, il->defaultdatatype_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if (il->dependentfiles_ptr) {
|
||||
if(!smb_io_buffer5("dependentfiles", &il->dependentfiles, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
}
|
||||
if (il->previousnames_ptr) {
|
||||
if(!smb_io_buffer5("previousnames", &il->previousnames, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
}
|
||||
if(!smb_io_unistr2("mfgname", &il->mfgname, il->mfgname_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if(!smb_io_unistr2("oemurl", &il->oemurl, il->oemurl_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if(!smb_io_unistr2("hardwareid", &il->hardwareid, il->hardwareid_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
if(!smb_io_unistr2("provider", &il->provider, il->provider_ptr, ps, depth))
|
||||
return False;
|
||||
if(!prs_align(ps))
|
||||
return False;
|
||||
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************
|
||||
convert a buffer of UNICODE strings null terminated
|
||||
the buffer is terminated by a NULL
|
||||
@ -3680,6 +3820,13 @@ BOOL spool_io_printer_driver_info_level(char *desc, SPOOL_PRINTER_DRIVER_INFO_LE
|
||||
if(!spool_io_printer_driver_info_level_3("", &(il->info_3), ps, depth))
|
||||
return False;
|
||||
break;
|
||||
case 6:
|
||||
if(!spool_io_printer_driver_info_level_6("", &(il->info_6), ps, depth))
|
||||
return False;
|
||||
break;
|
||||
default:
|
||||
prs_dump("spool_io_printer_driver_info_level", il->level, ps);
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
@ -3770,6 +3917,52 @@ BOOL uni_2_asc_printer_driver_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *uni,
|
||||
return True;
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
********************************************************************/
|
||||
BOOL uni_2_asc_printer_driver_6(SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *uni,
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL_6 **asc)
|
||||
{
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL_6 *d;
|
||||
|
||||
DEBUG(7,("uni_2_asc_printer_driver_6: Converting from UNICODE to ASCII\n"));
|
||||
|
||||
if (*asc==NULL)
|
||||
{
|
||||
*asc=(NT_PRINTER_DRIVER_INFO_LEVEL_6 *)malloc(sizeof(NT_PRINTER_DRIVER_INFO_LEVEL_6));
|
||||
if(*asc == NULL)
|
||||
return False;
|
||||
ZERO_STRUCTP(*asc);
|
||||
}
|
||||
|
||||
d=*asc;
|
||||
|
||||
d->version=uni->version;
|
||||
|
||||
unistr2_to_ascii(d->name, &(uni->name), sizeof(d->name)-1);
|
||||
unistr2_to_ascii(d->environment, &(uni->environment), sizeof(d->environment)-1);
|
||||
unistr2_to_ascii(d->driverpath, &(uni->driverpath), sizeof(d->driverpath)-1);
|
||||
unistr2_to_ascii(d->datafile, &(uni->datafile), sizeof(d->datafile)-1);
|
||||
unistr2_to_ascii(d->configfile, &(uni->configfile), sizeof(d->configfile)-1);
|
||||
unistr2_to_ascii(d->helpfile, &(uni->helpfile), sizeof(d->helpfile)-1);
|
||||
unistr2_to_ascii(d->monitorname, &(uni->monitorname), sizeof(d->monitorname)-1);
|
||||
unistr2_to_ascii(d->defaultdatatype, &(uni->defaultdatatype), sizeof(d->defaultdatatype)-1);
|
||||
|
||||
DEBUGADD(8,( "version: %d\n", d->version));
|
||||
DEBUGADD(8,( "name: %s\n", d->name));
|
||||
DEBUGADD(8,( "environment: %s\n", d->environment));
|
||||
DEBUGADD(8,( "driverpath: %s\n", d->driverpath));
|
||||
DEBUGADD(8,( "datafile: %s\n", d->datafile));
|
||||
DEBUGADD(8,( "configfile: %s\n", d->configfile));
|
||||
DEBUGADD(8,( "helpfile: %s\n", d->helpfile));
|
||||
DEBUGADD(8,( "monitorname: %s\n", d->monitorname));
|
||||
DEBUGADD(8,( "defaultdatatype: %s\n", d->defaultdatatype));
|
||||
|
||||
uniarray_2_ascarray(&(uni->dependentfiles), &(d->dependentfiles) );
|
||||
uniarray_2_ascarray(&(uni->previousnames), &(d->previousnames) );
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
BOOL uni_2_asc_printer_info_2(const SPOOL_PRINTER_INFO_LEVEL_2 *uni,
|
||||
NT_PRINTER_INFO_LEVEL_2 **asc)
|
||||
{
|
||||
|
@ -573,6 +573,10 @@ static BOOL convert_printer_driver_info(const SPOOL_PRINTER_DRIVER_INFO_LEVEL *u
|
||||
printer->info_3=NULL;
|
||||
uni_2_asc_printer_driver_3(uni->info_3, &(printer->info_3));
|
||||
break;
|
||||
case 6:
|
||||
printer->info_6=NULL;
|
||||
uni_2_asc_printer_driver_6(uni->info_6, &(printer->info_6));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -2378,6 +2382,9 @@ static void construct_printer_driver_info_1(DRIVER_INFO_1 *info, int snum,
|
||||
NT_PRINTER_INFO_LEVEL printer;
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL driver;
|
||||
|
||||
ZERO_STRUCT(driver);
|
||||
ZERO_STRUCT(printer);
|
||||
|
||||
get_a_printer(&printer, 2, lp_servicename(snum) );
|
||||
get_a_printer_driver(&driver, 3, printer.info_2->drivername, architecture);
|
||||
|
||||
@ -2432,6 +2439,9 @@ static void construct_printer_driver_info_2(DRIVER_INFO_2 *info, int snum, fstri
|
||||
NT_PRINTER_INFO_LEVEL printer;
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL driver;
|
||||
|
||||
ZERO_STRUCT(printer);
|
||||
ZERO_STRUCT(driver);
|
||||
|
||||
get_a_printer(&printer, 2, lp_servicename(snum) );
|
||||
get_a_printer_driver(&driver, 3, printer.info_2->drivername, architecture);
|
||||
|
||||
@ -2526,6 +2536,9 @@ static void construct_printer_driver_info_3(DRIVER_INFO_3 *info, int snum,
|
||||
NT_PRINTER_INFO_LEVEL printer;
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL driver;
|
||||
|
||||
ZERO_STRUCT(printer);
|
||||
ZERO_STRUCT(driver);
|
||||
|
||||
get_a_printer(&printer, 2, lp_servicename(snum) );
|
||||
get_a_printer_driver(&driver, 3, printer.info_2->drivername, architecture);
|
||||
|
||||
@ -3245,6 +3258,8 @@ static uint32 enumprinterdrivers_level1(fstring *list, fstring servername, fstri
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL driver;
|
||||
DRIVER_INFO_1 *driver_info_1=NULL;
|
||||
|
||||
ZERO_STRUCT(driver);
|
||||
|
||||
if((driver_info_1=(DRIVER_INFO_1 *)malloc(*returned * sizeof(DRIVER_INFO_1))) == NULL)
|
||||
return ERROR_NOT_ENOUGH_MEMORY;
|
||||
|
||||
@ -3292,6 +3307,8 @@ static uint32 enumprinterdrivers_level2(fstring *list, fstring servername, fstri
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL driver;
|
||||
DRIVER_INFO_2 *driver_info_2=NULL;
|
||||
|
||||
ZERO_STRUCT(driver);
|
||||
|
||||
if (*returned > 0 &&
|
||||
!(driver_info_2=(DRIVER_INFO_2 *)malloc(*returned * sizeof(DRIVER_INFO_2))))
|
||||
return ERROR_NOT_ENOUGH_MEMORY;
|
||||
@ -3340,6 +3357,8 @@ static uint32 enumprinterdrivers_level3(fstring *list, fstring servername, fstri
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL driver;
|
||||
DRIVER_INFO_3 *driver_info_3=NULL;
|
||||
|
||||
ZERO_STRUCT(driver);
|
||||
|
||||
if((driver_info_3=(DRIVER_INFO_3 *)malloc((*returned)*sizeof(DRIVER_INFO_3))) == NULL)
|
||||
return ERROR_NOT_ENOUGH_MEMORY;
|
||||
|
||||
@ -3737,12 +3756,15 @@ uint32 _spoolss_addprinterdriver( const UNISTR2 *server_name,
|
||||
{
|
||||
NT_PRINTER_DRIVER_INFO_LEVEL driver;
|
||||
|
||||
ZERO_STRUCT(driver);
|
||||
|
||||
convert_printer_driver_info(info, &driver, level);
|
||||
|
||||
if (add_a_printer_driver(driver, level)!=0)
|
||||
return ERROR_ACCESS_DENIED;
|
||||
|
||||
safe_free(driver.info_3);
|
||||
safe_free(driver.info_6);
|
||||
|
||||
return NT_STATUS_NO_PROBLEMO;
|
||||
}
|
||||
|
@ -281,7 +281,7 @@ connection_struct *make_connection(char *service,char *user,char *password, int
|
||||
|
||||
/* shall we let them in? */
|
||||
if (!authorise_login(snum,user,password,pwlen,&guest,&force,vuid)) {
|
||||
DEBUG( 2, ( "Invalid username/password for %s\n", service ) );
|
||||
DEBUG( 2, ( "Invalid username/password for %s [%s]\n", service, user ) );
|
||||
*ecode = ERRbadpw;
|
||||
return NULL;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user