[SCM] Samba Shared Repository - branch v3-5-test updated

Günther Deschner gd at samba.org
Wed Nov 25 13:45:42 MST 2009


The branch, v3-5-test has been updated
       via  27522fa... s3-registry: fix REG_MULTI_SZ handling in registry_push_value.
       via  77cafe2... s3-kerberos: add check for prerequisite krb5/krb5.h header while checking for krb5/locate_plugin.h.
       via  df71a31... nsswitch: fix compile of winbind_krb5_locator with recent Heimdal versions.
       via  9e2f707... cifs.upcall: 2nd part of fix for Bug #6868: support building with Heimdal we well as with MIT.
       via  68fcb81... s3-spoolss: re-arrange driver info level fillup functions.
       via  87969b9... s3-spoolss: fixes for _spoolss_EnumPrinterKey client and server.
       via  78687dc... s3-registry: use push_reg_multi_sz() in registry_push_value().
       via  bec0149... s3-registry: remove reg_pull_multi_sz().
      from  db4fd2b... Fix bug 6892 - When a chown operation is issued via Windows Explorer, all ACLS are wiped out. Merges existing DACLs when a ACL set operation comes in with only owner or group values set. Jeremy. (cherry picked from commit 7ed6f9f0960885366800b1ca2ce9558414b62d54)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-test


- Log -----------------------------------------------------------------
commit 27522fa94ce11a549dee6d498e58df14355bc950
Author: Günther Deschner <gd at samba.org>
Date:   Wed Nov 25 21:34:55 2009 +0100

    s3-registry: fix REG_MULTI_SZ handling in registry_push_value.
    
    Catched by smbconftort test on the buildfarm.
    
    Guenther
    (cherry picked from commit 95108f1c60aaa0407aa4eb8c9a567e90302253c6)

commit 77cafe2cd7e1a7e51f074ebeb7e676b779ff2155
Author: Günther Deschner <gd at samba.org>
Date:   Wed Nov 25 21:33:48 2009 +0100

    s3-kerberos: add check for prerequisite krb5/krb5.h header while checking for krb5/locate_plugin.h.
    
    (Needed for new Heimdal versions).
    
    Guenther
    (cherry picked from commit c438b2b3923db66672ec82e795eef543de5fcb8a)

commit df71a31140d2a63eeb22d2dace45f6b73abde0be
Author: Günther Deschner <gd at samba.org>
Date:   Wed Nov 25 15:21:54 2009 +0100

    nsswitch: fix compile of winbind_krb5_locator with recent Heimdal versions.
    
    Guenther
    (cherry picked from commit 51864219cc12ceb66c281355f3e1191d5e32842d)

commit 9e2f7070cf0eaf74297d565892edf5089756b124
Author: Günther Deschner <gd at samba.org>
Date:   Wed Nov 25 15:06:19 2009 +0100

    cifs.upcall: 2nd part of fix for Bug #6868: support building with Heimdal we well as with MIT.
    
    Guenther
    (cherry picked from commit 660ee2e74523194e5f6b2b6428d76628beb74717)

commit 68fcb8119bec2d4613c7d0af8cef2012671b484b
Author: Günther Deschner <gd at samba.org>
Date:   Mon Nov 23 15:31:58 2009 +0100

    s3-spoolss: re-arrange driver info level fillup functions.
    
    Guenther
    (cherry picked from commit e92470d4427bda74537c4ecf79a7e888a1e16963)

commit 87969b9f9953adaace28240d10d20b17997304ed
Author: Günther Deschner <gd at samba.org>
Date:   Tue Nov 24 15:22:04 2009 +0100

    s3-spoolss: fixes for _spoolss_EnumPrinterKey client and server.
    
    Thanks Metze for review!
    
    Guenther
    (cherry picked from commit 846aa18648f3b34ab5cbc4dc4ba334bbedeab2f4)

commit 78687dcf5d6b1d66f14c62674a313d7aef825756
Author: Günther Deschner <gd at samba.org>
Date:   Tue Nov 24 15:26:32 2009 +0100

    s3-registry: use push_reg_multi_sz() in registry_push_value().
    
    Guenther
    (cherry picked from commit 2707dfb441801e753c74657f20b5ca22a274778f)

commit bec0149124b6d4a0d63c00c9094387ee5b89a031
Author: Günther Deschner <gd at samba.org>
Date:   Tue Nov 24 15:26:08 2009 +0100

    s3-registry: remove reg_pull_multi_sz().
    
    Guenther
    (cherry picked from commit d4e06596d50e008425b9d346c3814a03eea8309a)

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

Summary of changes:
 client/cifs.upcall.c                |    2 +
 nsswitch/winbind_krb5_locator.c     |    1 +
 source3/configure.in                |    9 ++-
 source3/include/proto.h             |    2 -
 source3/lib/util_reg.c              |   23 ----
 source3/lib/util_reg_api.c          |   88 ++++++----------
 source3/rpc_client/cli_spoolss.c    |    4 +-
 source3/rpc_server/srv_spoolss_nt.c |  192 +++++++++++++++++-----------------
 8 files changed, 139 insertions(+), 182 deletions(-)


Changeset truncated at 500 lines:

diff --git a/client/cifs.upcall.c b/client/cifs.upcall.c
index d3ff5f1..063e423 100644
--- a/client/cifs.upcall.c
+++ b/client/cifs.upcall.c
@@ -105,7 +105,9 @@ err_endseq:
 err_ccstart:
 	krb5_free_principal(context, principal);
 err_princ:
+#if defined(KRB5_TC_OPENCLOSE)
 	krb5_cc_set_flags(context, ccache, KRB5_TC_OPENCLOSE);
+#endif
 	krb5_cc_close(context, ccache);
 err_cache:
 	krb5_free_context(context);
diff --git a/nsswitch/winbind_krb5_locator.c b/nsswitch/winbind_krb5_locator.c
index b9e35bd..272e7db 100644
--- a/nsswitch/winbind_krb5_locator.c
+++ b/nsswitch/winbind_krb5_locator.c
@@ -26,6 +26,7 @@
 
 #if defined(HAVE_KRB5) && defined(HAVE_KRB5_LOCATE_PLUGIN_H)
 
+#include <krb5/krb5.h>
 #include <krb5/locate_plugin.h>
 
 #ifndef KRB5_PLUGIN_NO_HANDLE
diff --git a/source3/configure.in b/source3/configure.in
index ac7b471..70a85a4 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -3279,7 +3279,7 @@ if test x"$with_ads_support" != x"no"; then
   # now check for krb5.h. Some systems have the libraries without the headers!
   # note that this check is done here to allow for different kerberos
   # include paths
-  AC_CHECK_HEADERS(krb5.h)
+  AC_CHECK_HEADERS(krb5.h krb5/krb5.h)
 
   if test x"$ac_cv_header_krb5_h" = x"no"; then
 
@@ -3300,7 +3300,12 @@ if test x"$with_ads_support" != x"no"; then
     CPPFLAGS=$ac_save_CPPFLAGS
     LDFLAGS=$ac_save_LDFLAGS
   fi
-  AC_CHECK_HEADERS(krb5/locate_plugin.h)
+  AC_CHECK_HEADERS([krb5/locate_plugin.h], [], [],
+[[#ifdef HAVE_KRB5_KRB5_H
+ #include <krb5/krb5.h>
+ #endif
+]])
+
   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
 	WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
 	if test x"$BLDSHARED" = x"true" ; then
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 1c10578..3ec7ce1 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1260,8 +1260,6 @@ struct passwd *getpwuid_alloc(TALLOC_CTX *mem_ctx, uid_t uid) ;
 /* The following definitions come from lib/util_reg.c  */
 
 const char *reg_type_lookup(enum winreg_Type type);
-WERROR reg_pull_multi_sz(TALLOC_CTX *mem_ctx, const void *buf, size_t len,
-			 uint32 *num_values, char ***values);
 bool push_reg_sz(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, const char *s);
 bool push_reg_multi_sz(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, const char **a);
 bool pull_reg_sz(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob, const char **s);
diff --git a/source3/lib/util_reg.c b/source3/lib/util_reg.c
index ca46f86..850dbfa 100644
--- a/source3/lib/util_reg.c
+++ b/source3/lib/util_reg.c
@@ -73,29 +73,6 @@ const char *reg_type_lookup(enum winreg_Type type)
 	return result;
 }
 
-WERROR reg_pull_multi_sz(TALLOC_CTX *mem_ctx, const void *buf, size_t len,
-			 uint32 *num_values, char ***values)
-{
-	DATA_BLOB blob;
-	const char **vals;
-	int i;
-
-	blob = data_blob_const((uint8_t *)buf, len);
-
-	if (!pull_reg_multi_sz(mem_ctx, &blob, &vals)) {
-		return WERR_NOMEM;
-	}
-
-	for (i=0; vals[i]; i++) {
-		;;
-	}
-
-	*num_values = i;
-	*values = (char **)vals;
-
-	return WERR_OK;
-}
-
 /*******************************************************************
  push a string in unix charset into a REG_SZ UCS2 null terminated blob
  ********************************************************************/
diff --git a/source3/lib/util_reg_api.c b/source3/lib/util_reg_api.c
index 56ecc54..7150444 100644
--- a/source3/lib/util_reg_api.c
+++ b/source3/lib/util_reg_api.c
@@ -102,14 +102,27 @@ WERROR registry_pull_value(TALLOC_CTX *mem_ctx,
 		SAFE_FREE(tmp);
 		break;
 	}
-	case REG_MULTI_SZ:
-		err = reg_pull_multi_sz(value, (void *)data, length,
-					&value->v.multi_sz.num_strings,
-					&value->v.multi_sz.strings);
-		if (!(W_ERROR_IS_OK(err))) {
+	case REG_MULTI_SZ: {
+		int i;
+		const char **vals;
+		DATA_BLOB blob;
+
+		blob = data_blob_const(data, length);
+
+		if (!pull_reg_multi_sz(mem_ctx, &blob, &vals)) {
+			err = WERR_NOMEM;
 			goto error;
 		}
+
+		for (i=0; vals[i]; i++) {
+			;;
+		}
+
+		value->v.multi_sz.num_strings = i;
+		value->v.multi_sz.strings = (char **)vals;
+
 		break;
+	}
 	case REG_BINARY:
 		value->v.binary = data_blob_talloc(mem_ctx, data, length);
 		break;
@@ -142,72 +155,33 @@ WERROR registry_push_value(TALLOC_CTX *mem_ctx,
 	}
 	case REG_SZ:
 	case REG_EXPAND_SZ: {
-		if (!convert_string_talloc(mem_ctx, CH_UNIX, CH_UTF16LE,
-					   value->v.sz.str,
-					   MIN(value->v.sz.len,
-					       strlen(value->v.sz.str)+1),
-					   (void *)&(presult->data),
-					   &presult->length, False))
+		if (!push_reg_sz(mem_ctx, presult, value->v.sz.str))
 		{
 			return WERR_NOMEM;
 		}
 		break;
 	}
 	case REG_MULTI_SZ: {
-		uint32_t count;
-		size_t len = 0;
-		char **strings;
-		size_t *string_lengths;
-		uint32_t ofs;
-		TALLOC_CTX *tmp_ctx = talloc_stackframe();
-
-		strings = TALLOC_ARRAY(tmp_ctx, char *,
-				       value->v.multi_sz.num_strings);
-		if (strings == NULL) {
-			return WERR_NOMEM;
-		}
+		/* handle the case where we don't get a NULL terminated array */
+		const char **array;
+		int i;
 
-		string_lengths = TALLOC_ARRAY(tmp_ctx, size_t,
-					      value->v.multi_sz.num_strings);
-		if (string_lengths == NULL) {
-			TALLOC_FREE(tmp_ctx);
+		array = talloc_array(mem_ctx, const char *,
+				     value->v.multi_sz.num_strings + 1);
+		if (!array) {
 			return WERR_NOMEM;
 		}
 
-		/* convert the single strings */
-		for (count = 0; count < value->v.multi_sz.num_strings; count++)
-		{
-			if (!convert_string_talloc(strings, CH_UNIX,
-				CH_UTF16LE, value->v.multi_sz.strings[count],
-				strlen(value->v.multi_sz.strings[count])+1,
-				(void *)&strings[count],
-				&string_lengths[count], false))
-			{
-
-				TALLOC_FREE(tmp_ctx);
-				return WERR_NOMEM;
-			}
-			len += string_lengths[count];
+		for (i=0; i < value->v.multi_sz.num_strings; i++) {
+			array[i] = value->v.multi_sz.strings[i];
 		}
+		array[i] = NULL;
 
-		/* now concatenate all into the data blob */
-		presult->data = TALLOC_ARRAY(mem_ctx, uint8_t, len);
-		if (presult->data == NULL) {
-			TALLOC_FREE(tmp_ctx);
+		if (!push_reg_multi_sz(mem_ctx, presult, array)) {
+			talloc_free(array);
 			return WERR_NOMEM;
 		}
-		for (count = 0, ofs = 0;
-		     count < value->v.multi_sz.num_strings;
-		     count++)
-		{
-			memcpy(presult->data + ofs, strings[count],
-			       string_lengths[count]);
-			ofs += string_lengths[count];
-		}
-		presult->length = len;
-
-		TALLOC_FREE(tmp_ctx);
-
+		talloc_free(array);
 		break;
 	}
 	case REG_BINARY:
diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c
index 2dba103..6d6d5df 100644
--- a/source3/rpc_client/cli_spoolss.c
+++ b/source3/rpc_client/cli_spoolss.c
@@ -815,7 +815,7 @@ WERROR rpccli_spoolss_enumprinterkey(struct rpc_pipe_client *cli,
 	*key_buffer = NULL;
 
 	if (offered) {
-		buffer = talloc_array(mem_ctx, uint16_t, offered);
+		buffer = talloc_array(mem_ctx, uint16_t, offered/2);
 		W_ERROR_HAVE_NO_MEMORY(buffer);
 	}
 
@@ -829,7 +829,7 @@ WERROR rpccli_spoolss_enumprinterkey(struct rpc_pipe_client *cli,
 
 	if (W_ERROR_EQUAL(werror, WERR_MORE_DATA)) {
 		offered = needed;
-		buffer = talloc_realloc(mem_ctx, buffer, uint16_t, needed);
+		buffer = talloc_realloc(mem_ctx, buffer, uint16_t, needed/2);
 		W_ERROR_HAVE_NO_MEMORY(buffer);
 		status = rpccli_spoolss_EnumPrinterKey(cli, mem_ctx,
 						       handle,
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 072090b..bcc6f5f 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -4541,11 +4541,11 @@ static const char **string_array_from_driver_info(TALLOC_CTX *mem_ctx,
 
 static WERROR fill_printer_driver_info1(TALLOC_CTX *mem_ctx,
 					struct spoolss_DriverInfo1 *r,
-					const union spoolss_DriverInfo *driver,
+					const struct spoolss_DriverInfo3 *driver,
 					const char *servername,
 					const char *architecture)
 {
-	r->driver_name		= talloc_strdup(mem_ctx, driver->info3.driver_name);
+	r->driver_name		= talloc_strdup(mem_ctx, driver->driver_name);
 	W_ERROR_HAVE_NO_MEMORY(r->driver_name);
 
 	return WERR_OK;
@@ -4557,38 +4557,38 @@ static WERROR fill_printer_driver_info1(TALLOC_CTX *mem_ctx,
 
 static WERROR fill_printer_driver_info2(TALLOC_CTX *mem_ctx,
 					struct spoolss_DriverInfo2 *r,
-					const union spoolss_DriverInfo *driver,
+					const struct spoolss_DriverInfo3 *driver,
 					const char *servername)
 
 {
 	const char *cservername = canon_servername(servername);
 
-	r->version		= driver->info3.version;
+	r->version		= driver->version;
 
-	r->driver_name		= talloc_strdup(mem_ctx, driver->info3.driver_name);
+	r->driver_name		= talloc_strdup(mem_ctx, driver->driver_name);
 	W_ERROR_HAVE_NO_MEMORY(r->driver_name);
-	r->architecture		= talloc_strdup(mem_ctx, driver->info3.architecture);
+	r->architecture		= talloc_strdup(mem_ctx, driver->architecture);
 	W_ERROR_HAVE_NO_MEMORY(r->architecture);
 
-	if (strlen(driver->info3.driver_path)) {
+	if (strlen(driver->driver_path)) {
 		r->driver_path	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.driver_path);
+				cservername, driver->driver_path);
 	} else {
 		r->driver_path	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->driver_path);
 
-	if (strlen(driver->info3.data_file)) {
+	if (strlen(driver->data_file)) {
 		r->data_file	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.data_file);
+				cservername, driver->data_file);
 	} else {
 		r->data_file	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->data_file);
 
-	if (strlen(driver->info3.config_file)) {
+	if (strlen(driver->config_file)) {
 		r->config_file	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.config_file);
+				cservername, driver->config_file);
 	} else {
 		r->config_file	= talloc_strdup(mem_ctx, "");
 	}
@@ -4603,57 +4603,57 @@ static WERROR fill_printer_driver_info2(TALLOC_CTX *mem_ctx,
 
 static WERROR fill_printer_driver_info3(TALLOC_CTX *mem_ctx,
 					struct spoolss_DriverInfo3 *r,
-					const union spoolss_DriverInfo *driver,
+					const struct spoolss_DriverInfo3 *driver,
 					const char *servername)
 {
 	const char *cservername = canon_servername(servername);
 
-	r->version		= driver->info3.version;
+	r->version		= driver->version;
 
-	r->driver_name		= talloc_strdup(mem_ctx, driver->info3.driver_name);
+	r->driver_name		= talloc_strdup(mem_ctx, driver->driver_name);
 	W_ERROR_HAVE_NO_MEMORY(r->driver_name);
-	r->architecture		= talloc_strdup(mem_ctx, driver->info3.architecture);
+	r->architecture		= talloc_strdup(mem_ctx, driver->architecture);
 	W_ERROR_HAVE_NO_MEMORY(r->architecture);
 
-	if (strlen(driver->info3.driver_path)) {
+	if (strlen(driver->driver_path)) {
 		r->driver_path	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.driver_path);
+				cservername, driver->driver_path);
 	} else {
 		r->driver_path	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->driver_path);
 
-	if (strlen(driver->info3.data_file)) {
+	if (strlen(driver->data_file)) {
 		r->data_file	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.data_file);
+				cservername, driver->data_file);
 	} else {
 		r->data_file	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->data_file);
 
-	if (strlen(driver->info3.config_file)) {
+	if (strlen(driver->config_file)) {
 		r->config_file	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.config_file);
+				cservername, driver->config_file);
 	} else {
 		r->config_file	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->config_file);
 
-	if (strlen(driver->info3.help_file)) {
+	if (strlen(driver->help_file)) {
 		r->help_file	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.help_file);
+				cservername, driver->help_file);
 	} else {
 		r->help_file	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->help_file);
 
-	r->monitor_name		= talloc_strdup(mem_ctx, driver->info3.monitor_name);
+	r->monitor_name		= talloc_strdup(mem_ctx, driver->monitor_name);
 	W_ERROR_HAVE_NO_MEMORY(r->monitor_name);
-	r->default_datatype	= talloc_strdup(mem_ctx, driver->info3.default_datatype);
+	r->default_datatype	= talloc_strdup(mem_ctx, driver->default_datatype);
 	W_ERROR_HAVE_NO_MEMORY(r->default_datatype);
 
 	r->dependent_files = string_array_from_driver_info(mem_ctx,
-							   driver->info3.dependent_files,
+							   driver->dependent_files,
 							   cservername);
 	return WERR_OK;
 }
@@ -4664,58 +4664,58 @@ static WERROR fill_printer_driver_info3(TALLOC_CTX *mem_ctx,
 
 static WERROR fill_printer_driver_info4(TALLOC_CTX *mem_ctx,
 					struct spoolss_DriverInfo4 *r,
-					const union spoolss_DriverInfo *driver,
+					const struct spoolss_DriverInfo3 *driver,
 					const char *servername)
 {
 	const char *cservername = canon_servername(servername);
 
-	r->version		= driver->info3.version;
+	r->version		= driver->version;
 
-	r->driver_name		= talloc_strdup(mem_ctx, driver->info3.driver_name);
+	r->driver_name		= talloc_strdup(mem_ctx, driver->driver_name);
 	W_ERROR_HAVE_NO_MEMORY(r->driver_name);
-	r->architecture		= talloc_strdup(mem_ctx, driver->info3.architecture);
+	r->architecture		= talloc_strdup(mem_ctx, driver->architecture);
 	W_ERROR_HAVE_NO_MEMORY(r->architecture);
 
-	if (strlen(driver->info3.driver_path)) {
+	if (strlen(driver->driver_path)) {
 		r->driver_path	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.driver_path);
+				cservername, driver->driver_path);
 	} else {
 		r->driver_path	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->driver_path);
 
-	if (strlen(driver->info3.data_file)) {
+	if (strlen(driver->data_file)) {
 		r->data_file	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.data_file);
+				cservername, driver->data_file);
 	} else {
 		r->data_file	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->data_file);
 
-	if (strlen(driver->info3.config_file)) {
+	if (strlen(driver->config_file)) {
 		r->config_file	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.config_file);
+				cservername, driver->config_file);
 	} else {
 		r->config_file	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->config_file);
 
-	if (strlen(driver->info3.help_file)) {
+	if (strlen(driver->help_file)) {
 		r->help_file	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.help_file);
+				cservername, driver->help_file);
 	} else {
 		r->help_file	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->help_file);
 
 	r->dependent_files = string_array_from_driver_info(mem_ctx,
-							   driver->info3.dependent_files,
+							   driver->dependent_files,
 							   cservername);
 
 
-	r->monitor_name		= talloc_strdup(mem_ctx, driver->info3.monitor_name);
+	r->monitor_name		= talloc_strdup(mem_ctx, driver->monitor_name);
 	W_ERROR_HAVE_NO_MEMORY(r->monitor_name);
-	r->default_datatype	= talloc_strdup(mem_ctx, driver->info3.default_datatype);
+	r->default_datatype	= talloc_strdup(mem_ctx, driver->default_datatype);
 	W_ERROR_HAVE_NO_MEMORY(r->default_datatype);
 
 	r->previous_names = string_array_from_driver_info(mem_ctx,
@@ -4731,37 +4731,37 @@ static WERROR fill_printer_driver_info4(TALLOC_CTX *mem_ctx,
 
 static WERROR fill_printer_driver_info5(TALLOC_CTX *mem_ctx,
 					struct spoolss_DriverInfo5 *r,
-					const union spoolss_DriverInfo *driver,
+					const struct spoolss_DriverInfo3 *driver,
 					const char *servername)
 {
 	const char *cservername = canon_servername(servername);
 
-	r->version		= driver->info3.version;
+	r->version		= driver->version;
 
-	r->driver_name		= talloc_strdup(mem_ctx, driver->info3.driver_name);
+	r->driver_name		= talloc_strdup(mem_ctx, driver->driver_name);
 	W_ERROR_HAVE_NO_MEMORY(r->driver_name);
-	r->architecture		= talloc_strdup(mem_ctx, driver->info3.architecture);
+	r->architecture		= talloc_strdup(mem_ctx, driver->architecture);
 	W_ERROR_HAVE_NO_MEMORY(r->architecture);
 
-	if (strlen(driver->info3.driver_path)) {
+	if (strlen(driver->driver_path)) {
 		r->driver_path	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.driver_path);
+				cservername, driver->driver_path);
 	} else {
 		r->driver_path	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->driver_path);
 
-	if (strlen(driver->info3.data_file)) {
+	if (strlen(driver->data_file)) {
 		r->data_file	= talloc_asprintf(mem_ctx, "\\\\%s%s",
-				cservername, driver->info3.data_file);
+				cservername, driver->data_file);
 	} else {
 		r->data_file	= talloc_strdup(mem_ctx, "");
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->data_file);
 
-	if (strlen(driver->info3.config_file)) {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list