[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha6-1014-g6696170

Günther Deschner gd at samba.org
Thu Feb 19 18:28:25 GMT 2009


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 <gd at samba.org>
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 <gd at samba.org>
Date:   Wed Feb 18 19:00:29 2009 +0100

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

commit 0470feeb7f40e31b9fc899988a55b19bd1290d9e
Author: Günther Deschner <gd at samba.org>
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 <mz at seh.de>
-			 * 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 <mz at seh.de>
-			 * 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


More information about the samba-cvs mailing list