The branch, master has been updated
       via  669617036eecbbe2fb9b53c15faa76be147d916a (commit)
       via  38fde6d5d9abd7faf5053c746acebba342c5d335 (commit)
       via  0470feeb7f40e31b9fc899988a55b19bd1290d9e (commit)
      from  c71fa39c29ee64b80adf92090a61c81f323742b9 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 669617036eecbbe2fb9b53c15faa76be147d916a
Author: Günther Deschner <[email protected]>
Date:   Thu Feb 19 19:02:48 2009 +0100

    s3-spoolss: fix vista fallback in _spoolss_AddPrinterDriverEx.
    
    Martin Zielinski, if you're reading this, please have a look. Vista nicely 
takes
    just a WERR_UNKNOWN_LEVEL here and retries with a level 6 add.
    
    Guenther

commit 38fde6d5d9abd7faf5053c746acebba342c5d335
Author: Günther Deschner <[email protected]>
Date:   Wed Feb 18 19:00:29 2009 +0100

    s3-spoolss: remove old spoolss_AddPrinterDriver{Ex}.
    
    Guenther

commit 0470feeb7f40e31b9fc899988a55b19bd1290d9e
Author: Günther Deschner <[email protected]>
Date:   Wed Feb 18 18:59:43 2009 +0100

    s3-spoolss: use pidl for _spoolss_AddPrinterDriver{Ex}.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source3/include/proto.h             |    8 -
 source3/include/rpc_spoolss.h       |   16 --
 source3/rpc_parse/parse_spoolss.c   |  185 -----------------------
 source3/rpc_server/srv_spoolss.c    |   62 +--------
 source3/rpc_server/srv_spoolss_nt.c |  283 ++++++++++++++++++++++++++---------
 5 files changed, 217 insertions(+), 337 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 63adbf5..3806c96 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -5964,12 +5964,6 @@ bool make_spoolss_driver_info_3(TALLOC_CTX *mem_ctx,
 bool make_spoolss_buffer5(TALLOC_CTX *mem_ctx, BUFFER5 *buf5, uint32 len, 
uint16 *src);
 bool spoolss_io_q_addprinterdriver(const char *desc, SPOOL_Q_ADDPRINTERDRIVER 
*q_u, prs_struct *ps, int depth);
 bool spoolss_io_r_addprinterdriver(const char *desc, SPOOL_R_ADDPRINTERDRIVER 
*q_u, prs_struct *ps, int depth);
-bool spoolss_io_q_addprinterdriverex(const char *desc, 
SPOOL_Q_ADDPRINTERDRIVEREX *q_u, prs_struct *ps, int depth);
-bool spoolss_io_r_addprinterdriverex(const char *desc, 
SPOOL_R_ADDPRINTERDRIVEREX *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  *d);
 bool spoolss_io_r_enumprintprocessors(const char *desc, 
SPOOL_R_ENUMPRINTPROCESSORS *r_u, prs_struct *ps, int depth);
@@ -6226,8 +6220,6 @@ WERROR _spoolss_enumprinterdrivers( pipes_struct *p, 
SPOOL_Q_ENUMPRINTERDRIVERS
 WERROR _spoolss_enumforms(pipes_struct *p, SPOOL_Q_ENUMFORMS *q_u, 
SPOOL_R_ENUMFORMS *r_u);
 WERROR enumports_hook(TALLOC_CTX *ctx, int *count, char ***lines );
 WERROR _spoolss_enumports( pipes_struct *p, SPOOL_Q_ENUMPORTS *q_u, 
SPOOL_R_ENUMPORTS *r_u);
-WERROR _spoolss_addprinterdriver(pipes_struct *p, SPOOL_Q_ADDPRINTERDRIVER 
*q_u, SPOOL_R_ADDPRINTERDRIVER *r_u);
-WERROR _spoolss_addprinterdriverex(pipes_struct *p, SPOOL_Q_ADDPRINTERDRIVEREX 
*q_u, SPOOL_R_ADDPRINTERDRIVEREX *r_u);
 WERROR _spoolss_enumprinterdata(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATA *q_u, 
SPOOL_R_ENUMPRINTERDATA *r_u);
 WERROR _spoolss_setprinterdata( pipes_struct *p, SPOOL_Q_SETPRINTERDATA *q_u, 
SPOOL_R_SETPRINTERDATA *r_u);
 WERROR _spoolss_enumprintprocessors(pipes_struct *p, 
SPOOL_Q_ENUMPRINTPROCESSORS *q_u, SPOOL_R_ENUMPRINTPROCESSORS *r_u);
diff --git a/source3/include/rpc_spoolss.h b/source3/include/rpc_spoolss.h
index d7d93e3..99da007 100644
--- a/source3/include/rpc_spoolss.h
+++ b/source3/include/rpc_spoolss.h
@@ -1178,22 +1178,6 @@ typedef struct spool_r_addprinterdriver
 }
 SPOOL_R_ADDPRINTERDRIVER;
 
-typedef struct spool_q_addprinterdriverex
-{
-       uint32 server_name_ptr;
-       UNISTR2 server_name;
-       uint32 level;
-       SPOOL_PRINTER_DRIVER_INFO_LEVEL info;
-       uint32 copy_flags;
-}
-SPOOL_Q_ADDPRINTERDRIVEREX;
-
-typedef struct spool_r_addprinterdriverex
-{
-       WERROR status;
-}
-SPOOL_R_ADDPRINTERDRIVEREX;
-
 typedef struct spool_q_enumprintprocessors
 {
        uint32 name_ptr;
diff --git a/source3/rpc_parse/parse_spoolss.c 
b/source3/rpc_parse/parse_spoolss.c
index b798eef..577ba73 100644
--- a/source3/rpc_parse/parse_spoolss.c
+++ b/source3/rpc_parse/parse_spoolss.c
@@ -3859,47 +3859,6 @@ bool spool_io_printer_driver_info_level_6(const char 
*desc, SPOOL_PRINTER_DRIVER
 }
 
 /*******************************************************************
- convert a buffer of UNICODE strings null terminated
- the buffer is terminated by a NULL
- 
- convert to an dos codepage array (null terminated)
- 
- dynamically allocate memory
- 
-********************************************************************/  
-
-static bool uniarray_2_dosarray(BUFFER5 *buf5, fstring **ar)
-{
-       fstring f;
-       int n = 0;
-       char *src;
-
-       if (buf5==NULL)
-               return False;
-
-       src = (char *)buf5->buffer;
-       *ar = SMB_MALLOC_ARRAY(fstring, 1);
-       if (!*ar) {
-               return False;
-       }
-
-       while (src < ((char *)buf5->buffer) + buf5->buf_len*2) {
-               rpcstr_pull(f, src, sizeof(f)-1, -1, STR_TERMINATE);
-               src = skip_unibuf(src, 2*buf5->buf_len - 
PTR_DIFF(src,buf5->buffer));
-               *ar = SMB_REALLOC_ARRAY(*ar, fstring, n+2);
-               if (!*ar) {
-                       return False;
-               }
-               fstrcpy((*ar)[n], f);
-               n++;
-       }
-
-       fstrcpy((*ar)[n], "");
- 
-       return True;
-}
-
-/*******************************************************************
  read a UNICODE array with null terminated strings 
  and null terminated array 
  and size of array at beginning
@@ -4125,152 +4084,8 @@ bool spoolss_io_r_addprinterdriver(const char *desc, 
SPOOL_R_ADDPRINTERDRIVER *q
 }
 
 /*******************************************************************
- fill in the prs_struct for a ADDPRINTERDRIVER request PDU
  ********************************************************************/  
 
-bool spoolss_io_q_addprinterdriverex(const char *desc, 
SPOOL_Q_ADDPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
-{
-       prs_debug(ps, depth, desc, "spoolss_io_q_addprinterdriverex");
-       depth++;
-
-       if(!prs_align(ps))
-               return False;
-
-       if(!prs_uint32("server_name_ptr", ps, depth, &q_u->server_name_ptr))
-               return False;
-       if(!smb_io_unistr2("server_name", &q_u->server_name, 
q_u->server_name_ptr, ps, depth))
-               return False;
-               
-       if(!prs_align(ps))
-               return False;
-       if(!prs_uint32("info_level", ps, depth, &q_u->level))
-               return False;
-
-       if(!spool_io_printer_driver_info_level("", &q_u->info, ps, depth))
-               return False;
-
-       if(!prs_align(ps))
-               return False;
-       if(!prs_uint32("copy flags", ps, depth, &q_u->copy_flags))
-               return False;
-               
-       return True;
-}
-
-/*******************************************************************
-********************************************************************/  
-
-bool spoolss_io_r_addprinterdriverex(const char *desc, 
SPOOL_R_ADDPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
-{
-       prs_debug(ps, depth, desc, "spoolss_io_r_addprinterdriverex");
-       depth++;
-
-       if(!prs_werror("status", ps, depth, &q_u->status))
-               return False;
-
-       return True;
-}
-
-/*******************************************************************
-********************************************************************/  
-
-bool uni_2_asc_printer_driver_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *uni,
-                                NT_PRINTER_DRIVER_INFO_LEVEL_3 **asc)
-{
-       NT_PRINTER_DRIVER_INFO_LEVEL_3 *d;
-       
-       DEBUG(7,("uni_2_asc_printer_driver_3: Converting from UNICODE to 
ASCII\n"));
-       
-       if (*asc==NULL)
-       {
-               *asc=SMB_MALLOC_P(NT_PRINTER_DRIVER_INFO_LEVEL_3);
-               if(*asc == NULL)
-                       return False;
-               ZERO_STRUCTP(*asc);
-       }       
-
-       d=*asc;
-
-       d->cversion=uni->cversion;
-
-       unistr2_to_ascii(d->name,            &uni->name,            
sizeof(d->name));
-       unistr2_to_ascii(d->environment,     &uni->environment,     
sizeof(d->environment));
-       unistr2_to_ascii(d->driverpath,      &uni->driverpath,      
sizeof(d->driverpath));
-       unistr2_to_ascii(d->datafile,        &uni->datafile,        
sizeof(d->datafile));
-       unistr2_to_ascii(d->configfile,      &uni->configfile,      
sizeof(d->configfile));
-       unistr2_to_ascii(d->helpfile,        &uni->helpfile,        
sizeof(d->helpfile));
-       unistr2_to_ascii(d->monitorname,     &uni->monitorname,     
sizeof(d->monitorname));
-       unistr2_to_ascii(d->defaultdatatype, &uni->defaultdatatype, 
sizeof(d->defaultdatatype));
-
-       DEBUGADD(8,( "version:         %d\n", d->cversion));
-       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));
-
-       if (uniarray_2_dosarray(&uni->dependentfiles, &d->dependentfiles ))
-               return True;
-       
-       SAFE_FREE(*asc);
-       return False;
-}
-
-/*******************************************************************
-********************************************************************/  
-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=SMB_MALLOC_P(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));
-       unistr2_to_ascii(d->environment,     &uni->environment,     
sizeof(d->environment));
-       unistr2_to_ascii(d->driverpath,      &uni->driverpath,      
sizeof(d->driverpath));
-       unistr2_to_ascii(d->datafile,        &uni->datafile,        
sizeof(d->datafile));
-       unistr2_to_ascii(d->configfile,      &uni->configfile,      
sizeof(d->configfile));
-       unistr2_to_ascii(d->helpfile,        &uni->helpfile,        
sizeof(d->helpfile));
-       unistr2_to_ascii(d->monitorname,     &uni->monitorname,     
sizeof(d->monitorname));
-       unistr2_to_ascii(d->defaultdatatype, &uni->defaultdatatype, 
sizeof(d->defaultdatatype));
-
-       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));
-
-       if (!uniarray_2_dosarray(&uni->dependentfiles, &d->dependentfiles ))
-               goto error;
-       if (!uniarray_2_dosarray(&uni->previousnames, &d->previousnames ))
-               goto error;
-       
-       return True;
-       
-error:
-       SAFE_FREE(*asc);
-       return False;
-}
-
 bool uni_2_asc_printer_info_2(const SPOOL_PRINTER_INFO_LEVEL_2 *uni,
                               NT_PRINTER_INFO_LEVEL_2  *d)
 {
diff --git a/source3/rpc_server/srv_spoolss.c b/source3/rpc_server/srv_spoolss.c
index 639dbde..7bb71ab 100644
--- a/source3/rpc_server/srv_spoolss.c
+++ b/source3/rpc_server/srv_spoolss.c
@@ -538,36 +538,7 @@ static bool api_spoolss_addprinterex(pipes_struct *p)
 
 static bool api_spoolss_addprinterdriver(pipes_struct *p)
 {
-       SPOOL_Q_ADDPRINTERDRIVER q_u;
-       SPOOL_R_ADDPRINTERDRIVER r_u;
-       prs_struct *data = &p->in_data.data;
-       prs_struct *rdata = &p->out_data.rdata;
-       
-       ZERO_STRUCT(q_u);
-       ZERO_STRUCT(r_u);
-       
-       if(!spoolss_io_q_addprinterdriver("", &q_u, data, 0)) {
-               if (q_u.level != 3 && q_u.level != 6) {
-                       /* Clever hack from Martin Zielinski <[email protected]>
-                        * to allow downgrade from level 8 (Vista).
-                        */
-                       DEBUG(3,("api_spoolss_addprinterdriver: unknown 
SPOOL_Q_ADDPRINTERDRIVER level %u.\n",
-                               (unsigned int)q_u.level ));
-                       setup_fault_pdu(p, NT_STATUS(DCERPC_FAULT_INVALID_TAG));
-                       return True;
-               }
-               DEBUG(0,("spoolss_io_q_addprinterdriver: unable to unmarshall 
SPOOL_Q_ADDPRINTERDRIVER.\n"));
-               return False;
-       }
-       
-       r_u.status = _spoolss_addprinterdriver(p, &q_u, &r_u);
-                               
-       if(!spoolss_io_r_addprinterdriver("", &r_u, rdata, 0)) {
-               DEBUG(0,("spoolss_io_r_addprinterdriver: unable to marshall 
SPOOL_R_ADDPRINTERDRIVER.\n"));
-               return False;
-       }
-       
-       return True;
+       return proxy_spoolss_call(p, NDR_SPOOLSS_ADDPRINTERDRIVER);
 }
 
 /****************************************************************************
@@ -889,36 +860,7 @@ static bool api_spoolss_deleteprinterkey(pipes_struct *p)
 
 static bool api_spoolss_addprinterdriverex(pipes_struct *p)
 {
-       SPOOL_Q_ADDPRINTERDRIVEREX q_u;
-       SPOOL_R_ADDPRINTERDRIVEREX r_u;
-       prs_struct *data = &p->in_data.data;
-       prs_struct *rdata = &p->out_data.rdata;
-       
-       ZERO_STRUCT(q_u);
-       ZERO_STRUCT(r_u);
-       
-       if(!spoolss_io_q_addprinterdriverex("", &q_u, data, 0)) {
-               if (q_u.level != 3 && q_u.level != 6) {
-                       /* Clever hack from Martin Zielinski <[email protected]>
-                        * to allow downgrade from level 8 (Vista).
-                        */
-                       DEBUG(3,("api_spoolss_addprinterdriverex: unknown 
SPOOL_Q_ADDPRINTERDRIVEREX level %u.\n",
-                               (unsigned int)q_u.level ));
-                       setup_fault_pdu(p, NT_STATUS(DCERPC_FAULT_INVALID_TAG));
-                       return True;
-               }
-               DEBUG(0,("spoolss_io_q_addprinterdriverex: unable to unmarshall 
SPOOL_Q_ADDPRINTERDRIVEREX.\n"));
-               return False;
-       }
-       
-       r_u.status = _spoolss_addprinterdriverex(p, &q_u, &r_u);
-                               
-       if(!spoolss_io_r_addprinterdriverex("", &r_u, rdata, 0)) {
-               DEBUG(0,("spoolss_io_r_addprinterdriverex: unable to marshall 
SPOOL_R_ADDPRINTERDRIVEREX.\n"));
-               return False;
-       }
-       
-       return True;
+       return proxy_spoolss_call(p, NDR_SPOOLSS_ADDPRINTERDRIVEREX);
 }
 
 /****************************************************************************
diff --git a/source3/rpc_server/srv_spoolss_nt.c 
b/source3/rpc_server/srv_spoolss_nt.c
index 9d7e4d2..7439fe5 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -1800,27 +1800,175 @@ static bool convert_printer_info_new(struct 
spoolss_SetPrinterInfoCtr *info_ctr,
        return false;
 }
 
-static bool convert_printer_driver_info(const SPOOL_PRINTER_DRIVER_INFO_LEVEL 
*uni,
-                                       NT_PRINTER_DRIVER_INFO_LEVEL *printer, 
uint32 level)
+/*******************************************************************
+********************************************************************/
+
+static bool string_array_to_fstring_array(const char **sarray, fstring 
**farray)
 {
-       bool result = True;
+       int i;
+
+       if (!sarray) {
+               *farray = NULL;
+               return true;
+       }
+
+       *farray = SMB_MALLOC_ARRAY(fstring, 1);
+       if (!*farray) {
+               return false;
+       }
+
+       for (i=0; sarray[i] != NULL; i++) {
+               *farray = SMB_REALLOC_ARRAY(*farray, fstring, i+2);
+               if (!*farray) {
+                       return false;
+               }
+               fstrcpy((*farray)[i], sarray[i]);
+       }
+
+       fstrcpy((*farray)[i], "");
 
+       return true;
+}
+
+/*******************************************************************
+********************************************************************/
+
+static bool driver_info3_to_nt_driver_info3(struct spoolss_AddDriverInfo3 *r,
+                                           NT_PRINTER_DRIVER_INFO_LEVEL_3 **p)
+{
+       NT_PRINTER_DRIVER_INFO_LEVEL_3 *d;
+
+       DEBUG(7,("driver_info3_to_nt_driver_info3: Converting from UNICODE to 
ASCII\n"));
+
+       if (*p == NULL) {
+               *p = SMB_MALLOC_P(NT_PRINTER_DRIVER_INFO_LEVEL_3);
+               if (*p == NULL) {
+                       return false;
+               }
+               ZERO_STRUCTP(*p);
+       }
+
+       d = *p;
+
+       d->cversion =                   r->version;
+
+       fstrcpy(d->name,                r->driver_name);
+       fstrcpy(d->environment,         r->architecture);
+       fstrcpy(d->driverpath,          r->driver_path);
+       fstrcpy(d->datafile,            r->data_file);
+       fstrcpy(d->configfile,          r->config_file);
+       fstrcpy(d->helpfile,            r->help_file);
+       fstrcpy(d->monitorname,         r->monitor_name);
+       fstrcpy(d->defaultdatatype,     r->default_datatype);
+
+       DEBUGADD(8,( "version:         %d\n", d->cversion));
+       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));
+
+       if (r->dependent_files) {
+               if (!string_array_to_fstring_array(r->dependent_files->string,
+                                                  &d->dependentfiles)) {
+                       SAFE_FREE(*p);
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+/*******************************************************************
+********************************************************************/
+
+static bool driver_info6_to_nt_driver_info6(struct spoolss_AddDriverInfo6 *r,
+                                           NT_PRINTER_DRIVER_INFO_LEVEL_6 **p)
+{
+       NT_PRINTER_DRIVER_INFO_LEVEL_6 *d;
+
+       DEBUG(7,("driver_info6_to_nt_driver_info6: Converting from UNICODE to 
ASCII\n"));
+
+       if (*p == NULL) {
+               *p = SMB_MALLOC_P(NT_PRINTER_DRIVER_INFO_LEVEL_6);
+               if (*p == NULL) {
+                       return false;
+               }
+               ZERO_STRUCTP(*p);
+       }
+
+       d = *p;
+
+       d->version =                    r->version;
+
+       fstrcpy(d->name,                r->driver_name);
+       fstrcpy(d->environment,         r->architecture);
+       fstrcpy(d->driverpath,          r->driver_path);
+       fstrcpy(d->datafile,            r->data_file);
+       fstrcpy(d->configfile,          r->config_file);
+       fstrcpy(d->helpfile,            r->help_file);
+       fstrcpy(d->monitorname,         r->monitor_name);
+       fstrcpy(d->defaultdatatype,     r->default_datatype);
+
+       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));
+
+       if (r->dependent_files) {
+               if (!string_array_to_fstring_array(r->dependent_files->string,
+                                                  &d->dependentfiles)) {
+                       goto error;
+               }
+       }
+
+       if (r->previous_names) {
+               if (!string_array_to_fstring_array(r->previous_names->string,
+                                                  &d->previousnames)) {
+                       goto error;
+               }
+       }
+
+       return true;
+
+ error:
+       SAFE_FREE(*p);
+       return false;
+}
+
+/********************************************************************
+ ********************************************************************/
+
+static bool convert_printer_driver_info(const struct spoolss_AddDriverInfoCtr 
*r,
+                                       NT_PRINTER_DRIVER_INFO_LEVEL *printer,
+                                       uint32_t level)
+{


-- 
Samba Shared Repository

Reply via email to