[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Wed May 5 10:25:05 MDT 2010


The branch, master has been updated
       via  65105aa... s3-spoolss: remove unused winreg_enumval_to_blob().
       via  386c1ff... s3-spoolss: Create default DsSpooler values.
       via  92df015... s3-spoolss: Fixed the DeviceMode handling in winreg.
       via  859a1e0... s3-spoolss: Added winreg security descriptor functions.
       via  a76cc0a... s3-spoolss: Migrated winreg to spoolss_create_default_secdesc.
       via  ed3852c... s3-spoolss: make sure to return success in winreg_get_driver_list() for a non-existing architecture / version combination.
       via  83e324c... s3-spoolss: talloc_steal the returned driver_list in winreg_get_driver_list().
       via  24225bf... s3-spoolss: Fixed winreg_printer_query_XXX.
       via  740418a... s3-spoolss: Added a winreg_printer_query_binary function.
       via  66f7699... s3-spoolss: Added a generic spoolss_create_default_secdesc function.
       via  b2ea8fb... s3-spoolss: Added a function to create a default spoolss_DeviceMode.
      from  5a56bc9... s3: Fix bug 5972 -- remove -L testparm parameter

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


- Log -----------------------------------------------------------------
commit 65105aafb45dbb6d59da411a98b41dbdc4c1a0c7
Author: Günther Deschner <gd at samba.org>
Date:   Wed May 5 18:23:45 2010 +0200

    s3-spoolss: remove unused winreg_enumval_to_blob().
    
    Guenther

commit 386c1fffacb712ed86d7665640ecaa2e764ab322
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Apr 30 10:01:10 2010 +0200

    s3-spoolss: Create default DsSpooler values.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

commit 92df015e3009862a7e4f9fc9e3255ef47f1191fb
Author: Andreas Schneider <asn at samba.org>
Date:   Tue May 4 12:24:00 2010 +0200

    s3-spoolss: Fixed the DeviceMode handling in winreg.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

commit 859a1e04fb2cb05144c91d30cc5f88a6bfd16596
Author: Andreas Schneider <asn at samba.org>
Date:   Tue May 4 11:44:12 2010 +0200

    s3-spoolss: Added winreg security descriptor functions.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

commit a76cc0a18c6b3d0679bd1edae1cd0b6bef94d1a3
Author: Andreas Schneider <asn at samba.org>
Date:   Tue May 4 12:07:26 2010 +0200

    s3-spoolss: Migrated winreg to spoolss_create_default_secdesc.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

commit ed3852c2c2390c4817f76667d7605aada74d8666
Author: Günther Deschner <gd at samba.org>
Date:   Mon Apr 26 21:02:12 2010 +0200

    s3-spoolss: make sure to return success in winreg_get_driver_list() for a
    non-existing architecture / version combination.
    
    Guenther

commit 83e324c4177f7c493c7181c8f81f6f1e02a7ad95
Author: Günther Deschner <gd at samba.org>
Date:   Mon Apr 26 21:00:45 2010 +0200

    s3-spoolss: talloc_steal the returned driver_list in winreg_get_driver_list().
    
    Otherwise the function would return a pointer to a freed list.
    
    Guenther

commit 24225bf032fb99e8949a741007cc6d199ee4702c
Author: Simo Sorce <idra at samba.org>
Date:   Tue Apr 27 11:52:26 2010 -0400

    s3-spoolss: Fixed winreg_printer_query_XXX.
    
    A cast to an incorrectly sized pointer was breaking
    on 64bit architectures where size_t is 64bit.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

commit 740418a150ff0ccccf47b4a40783c35f81723a89
Author: Andreas Schneider <asn at samba.org>
Date:   Tue May 4 11:43:27 2010 +0200

    s3-spoolss: Added a winreg_printer_query_binary function.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

commit 66f76995114c01c619953d1c0c9f3f069ea91da1
Author: Andreas Schneider <asn at samba.org>
Date:   Tue May 4 12:07:10 2010 +0200

    s3-spoolss: Added a generic spoolss_create_default_secdesc function.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

commit b2ea8fbcce849f2fb41f381ab3d7af35e9778c9f
Author: Andreas Schneider <asn at samba.org>
Date:   Wed May 5 17:44:22 2010 +0200

    s3-spoolss: Added a function to create a default spoolss_DeviceMode.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

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

Summary of changes:
 source3/include/proto.h               |    5 +
 source3/printing/nt_printing.c        |  161 +++++++
 source3/rpc_server/srv_spoolss_util.c |  846 +++++++++++++++++++++++----------
 source3/rpc_server/srv_spoolss_util.h |   38 ++
 4 files changed, 794 insertions(+), 256 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 2c5b710..eae3d28 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -4862,6 +4862,11 @@ uint32 del_a_printer(const char *sharename);
 NT_DEVICEMODE *construct_nt_devicemode(const fstring default_devicename);
 void free_nt_devicemode(NT_DEVICEMODE **devmode_ptr);
 int unpack_devicemode(NT_DEVICEMODE **nt_devmode, const uint8 *buf, int buflen);
+WERROR spoolss_create_default_devmode(TALLOC_CTX *mem_ctx,
+				      const char *devicename,
+				      struct spoolss_DeviceMode **devmode);
+WERROR spoolss_create_default_secdesc(TALLOC_CTX *mem_ctx,
+				      struct spoolss_security_descriptor **secdesc);
 int add_new_printer_key( NT_PRINTER_DATA *data, const char *name );
 int delete_printer_key( NT_PRINTER_DATA *data, const char *name );
 int lookup_printerkey( NT_PRINTER_DATA *data, const char *name );
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
index 9ac74d6..da08130 100644
--- a/source3/printing/nt_printing.c
+++ b/source3/printing/nt_printing.c
@@ -2550,6 +2550,167 @@ done:
 	return ret;
 }
 
+/****************************************************************************
+ Create and allocate a default devicemode.
+****************************************************************************/
+
+WERROR spoolss_create_default_devmode(TALLOC_CTX *mem_ctx,
+				      const char *devicename,
+				      struct spoolss_DeviceMode **devmode)
+{
+	struct spoolss_DeviceMode *dm;
+	char *dname;
+
+	dm = talloc_zero(mem_ctx, struct spoolss_DeviceMode);
+	if (dm == NULL) {
+		return WERR_NOMEM;
+	}
+
+	dname = talloc_asprintf(dm, "%s", devicename);
+	if (dname == NULL) {
+		return WERR_NOMEM;
+	}
+	if (strlen(dname) > MAXDEVICENAME) {
+		dname[MAXDEVICENAME] = '\0';
+	}
+	dm->devicename = dname;
+
+	dm->formname = talloc_strdup(dm, "Letter");
+	if (dm->formname == NULL) {
+		return WERR_NOMEM;
+	}
+
+	dm->specversion          = DMSPEC_NT4_AND_ABOVE;
+	dm->driverversion        = 0x0400;
+	dm->size                 = 0x00DC;
+	dm->__driverextra_length = 0;
+	dm->fields               = DEVMODE_FORMNAME |
+				   DEVMODE_TTOPTION |
+				   DEVMODE_PRINTQUALITY |
+				   DEVMODE_DEFAULTSOURCE |
+				   DEVMODE_COPIES |
+				   DEVMODE_SCALE |
+				   DEVMODE_PAPERSIZE |
+				   DEVMODE_ORIENTATION;
+	dm->orientation          = DMORIENT_PORTRAIT;
+	dm->papersize            = DMPAPER_LETTER;
+	dm->paperlength          = 0;
+	dm->paperwidth           = 0;
+	dm->scale                = 0x64;
+	dm->copies               = 1;
+	dm->defaultsource        = DMBIN_FORMSOURCE;
+	dm->printquality         = DMRES_HIGH;           /* 0x0258 */
+	dm->color                = DMRES_MONOCHROME;
+	dm->duplex               = DMDUP_SIMPLEX;
+	dm->yresolution          = 0;
+	dm->ttoption             = DMTT_SUBDEV;
+	dm->collate              = DMCOLLATE_FALSE;
+	dm->icmmethod            = 0;
+	dm->icmintent            = 0;
+	dm->mediatype            = 0;
+	dm->dithertype           = 0;
+
+	dm->logpixels            = 0;
+	dm->bitsperpel           = 0;
+	dm->pelswidth            = 0;
+	dm->pelsheight           = 0;
+	dm->displayflags         = 0;
+	dm->displayfrequency     = 0;
+	dm->reserved1            = 0;
+	dm->reserved2            = 0;
+	dm->panningwidth         = 0;
+	dm->panningheight        = 0;
+
+	dm->driverextra_data.data = NULL;
+	dm->driverextra_data.length = 0;
+
+        *devmode = dm;
+	return WERR_OK;
+}
+
+WERROR spoolss_create_default_secdesc(TALLOC_CTX *mem_ctx,
+				      struct spoolss_security_descriptor **secdesc)
+{
+	SEC_ACE ace[5];	/* max number of ace entries */
+	int i = 0;
+	uint32_t sa;
+	SEC_ACL *psa = NULL;
+	SEC_DESC *psd = NULL;
+	DOM_SID adm_sid;
+	size_t sd_size;
+
+	/* Create an ACE where Everyone is allowed to print */
+
+	sa = PRINTER_ACE_PRINT;
+	init_sec_ace(&ace[i++], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED,
+		     sa, SEC_ACE_FLAG_CONTAINER_INHERIT);
+
+	/* Add the domain admins group if we are a DC */
+
+	if ( IS_DC ) {
+		DOM_SID domadmins_sid;
+
+		sid_compose(&domadmins_sid, get_global_sam_sid(),
+			    DOMAIN_GROUP_RID_ADMINS);
+
+		sa = PRINTER_ACE_FULL_CONTROL;
+		init_sec_ace(&ace[i++], &domadmins_sid,
+			SEC_ACE_TYPE_ACCESS_ALLOWED, sa,
+			SEC_ACE_FLAG_OBJECT_INHERIT | SEC_ACE_FLAG_INHERIT_ONLY);
+		init_sec_ace(&ace[i++], &domadmins_sid, SEC_ACE_TYPE_ACCESS_ALLOWED,
+			sa, SEC_ACE_FLAG_CONTAINER_INHERIT);
+	}
+	else if (secrets_fetch_domain_sid(lp_workgroup(), &adm_sid)) {
+		sid_append_rid(&adm_sid, DOMAIN_USER_RID_ADMIN);
+
+		sa = PRINTER_ACE_FULL_CONTROL;
+		init_sec_ace(&ace[i++], &adm_sid,
+			SEC_ACE_TYPE_ACCESS_ALLOWED, sa,
+			SEC_ACE_FLAG_OBJECT_INHERIT | SEC_ACE_FLAG_INHERIT_ONLY);
+		init_sec_ace(&ace[i++], &adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED,
+			sa, SEC_ACE_FLAG_CONTAINER_INHERIT);
+	}
+
+	/* add BUILTIN\Administrators as FULL CONTROL */
+
+	sa = PRINTER_ACE_FULL_CONTROL;
+	init_sec_ace(&ace[i++], &global_sid_Builtin_Administrators,
+		SEC_ACE_TYPE_ACCESS_ALLOWED, sa,
+		SEC_ACE_FLAG_OBJECT_INHERIT | SEC_ACE_FLAG_INHERIT_ONLY);
+	init_sec_ace(&ace[i++], &global_sid_Builtin_Administrators,
+		SEC_ACE_TYPE_ACCESS_ALLOWED,
+		sa, SEC_ACE_FLAG_CONTAINER_INHERIT);
+
+	/* Make the security descriptor owned by the BUILTIN\Administrators */
+
+	/* The ACL revision number in rpc_secdesc.h differs from the one
+	   created by NT when setting ACE entries in printer
+	   descriptors.  NT4 complains about the property being edited by a
+	   NT5 machine. */
+
+	if ((psa = make_sec_acl(mem_ctx, NT4_ACL_REVISION, i, ace)) != NULL) {
+		psd = make_sec_desc(mem_ctx,
+				    SEC_DESC_REVISION,
+				    SEC_DESC_SELF_RELATIVE,
+				    &global_sid_Builtin_Administrators,
+				    &global_sid_Builtin_Administrators,
+				    NULL,
+				    psa,
+				    &sd_size);
+	}
+
+	if (psd == NULL) {
+		DEBUG(0,("construct_default_printer_sd: Failed to make SEC_DESC.\n"));
+		return WERR_NOMEM;
+	}
+
+	DEBUG(4,("construct_default_printer_sdb: size = %u.\n",
+		 (unsigned int)sd_size));
+
+	*secdesc = psd;
+
+	return WERR_OK;
+}
 
 /****************************************************************************
  Malloc and return an NT devicemode.
diff --git a/source3/rpc_server/srv_spoolss_util.c b/source3/rpc_server/srv_spoolss_util.c
index 995cb7b..1752329 100644
--- a/source3/rpc_server/srv_spoolss_util.c
+++ b/source3/rpc_server/srv_spoolss_util.c
@@ -198,149 +198,6 @@ static uint32_t winreg_printer_rev_changeid(void)
 #endif
 }
 
-static struct spoolss_security_descriptor *winreg_printer_create_default_secdesc(TALLOC_CTX *ctx)
-{
-	SEC_ACE ace[5];	/* max number of ace entries */
-	int i = 0;
-	uint32_t sa;
-	SEC_ACL *psa = NULL;
-	SEC_DESC *psd = NULL;
-	DOM_SID adm_sid;
-	size_t sd_size;
-
-	/* Create an ACE where Everyone is allowed to print */
-
-	sa = PRINTER_ACE_PRINT;
-	init_sec_ace(&ace[i++], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED,
-		     sa, SEC_ACE_FLAG_CONTAINER_INHERIT);
-
-	/* Add the domain admins group if we are a DC */
-
-	if ( IS_DC ) {
-		DOM_SID domadmins_sid;
-
-		sid_compose(&domadmins_sid, get_global_sam_sid(),
-			    DOMAIN_GROUP_RID_ADMINS);
-
-		sa = PRINTER_ACE_FULL_CONTROL;
-		init_sec_ace(&ace[i++], &domadmins_sid,
-			SEC_ACE_TYPE_ACCESS_ALLOWED, sa,
-			SEC_ACE_FLAG_OBJECT_INHERIT | SEC_ACE_FLAG_INHERIT_ONLY);
-		init_sec_ace(&ace[i++], &domadmins_sid, SEC_ACE_TYPE_ACCESS_ALLOWED,
-			sa, SEC_ACE_FLAG_CONTAINER_INHERIT);
-	}
-	else if (secrets_fetch_domain_sid(lp_workgroup(), &adm_sid)) {
-		sid_append_rid(&adm_sid, DOMAIN_USER_RID_ADMIN);
-
-		sa = PRINTER_ACE_FULL_CONTROL;
-		init_sec_ace(&ace[i++], &adm_sid,
-			SEC_ACE_TYPE_ACCESS_ALLOWED, sa,
-			SEC_ACE_FLAG_OBJECT_INHERIT | SEC_ACE_FLAG_INHERIT_ONLY);
-		init_sec_ace(&ace[i++], &adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED,
-			sa, SEC_ACE_FLAG_CONTAINER_INHERIT);
-	}
-
-	/* add BUILTIN\Administrators as FULL CONTROL */
-
-	sa = PRINTER_ACE_FULL_CONTROL;
-	init_sec_ace(&ace[i++], &global_sid_Builtin_Administrators,
-		SEC_ACE_TYPE_ACCESS_ALLOWED, sa,
-		SEC_ACE_FLAG_OBJECT_INHERIT | SEC_ACE_FLAG_INHERIT_ONLY);
-	init_sec_ace(&ace[i++], &global_sid_Builtin_Administrators,
-		SEC_ACE_TYPE_ACCESS_ALLOWED,
-		sa, SEC_ACE_FLAG_CONTAINER_INHERIT);
-
-	/* Make the security descriptor owned by the BUILTIN\Administrators */
-
-	/* The ACL revision number in rpc_secdesc.h differs from the one
-	   created by NT when setting ACE entries in printer
-	   descriptors.  NT4 complains about the property being edited by a
-	   NT5 machine. */
-
-	if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, i, ace)) != NULL) {
-		psd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE,
-			&global_sid_Builtin_Administrators,
-			&global_sid_Builtin_Administrators,
-			NULL, psa, &sd_size);
-	}
-
-	if (!psd) {
-		DEBUG(0,("construct_default_printer_sd: Failed to make SEC_DESC.\n"));
-		return NULL;
-	}
-
-	DEBUG(4,("construct_default_printer_sdb: size = %u.\n",
-		 (unsigned int)sd_size));
-
-	return psd;
-}
-
-static struct spoolss_DeviceMode *winreg_printer_create_default_devmode(TALLOC_CTX *mem_ctx,
-		const char *default_devicename)
-{
-	char adevice[MAXDEVICENAME];
-	struct spoolss_DeviceMode *devmode;
-
-	devmode = talloc_zero(mem_ctx, struct spoolss_DeviceMode);
-	if (devmode == NULL) {
-		return NULL;
-	}
-
-	slprintf(adevice, sizeof(adevice), "%s", default_devicename);
-	devmode->devicename = talloc_strdup(mem_ctx, adevice);
-	if (devmode->devicename == NULL) {
-		return NULL;
-	}
-
-	devmode->formname = "Letter";
-
-	devmode->specversion          = DMSPEC_NT4_AND_ABOVE;
-	devmode->driverversion        = 0x0400;
-	devmode->size                 = 0x00DC;
-	devmode->__driverextra_length = 0;
-	devmode->fields               = DEVMODE_FORMNAME |
-					DEVMODE_TTOPTION |
-					DEVMODE_PRINTQUALITY |
-					DEVMODE_DEFAULTSOURCE |
-					DEVMODE_COPIES |
-					DEVMODE_SCALE |
-					DEVMODE_PAPERSIZE |
-					DEVMODE_ORIENTATION;
-	devmode->orientation          = DMORIENT_PORTRAIT;
-	devmode->papersize            = DMPAPER_LETTER;
-	devmode->paperlength          = 0;
-	devmode->paperwidth           = 0;
-	devmode->scale                = 0x64;
-	devmode->copies               = 1;
-	devmode->defaultsource        = DMBIN_FORMSOURCE;
-	devmode->printquality         = DMRES_HIGH;           /* 0x0258 */
-	devmode->color                = DMRES_MONOCHROME;
-	devmode->duplex               = DMDUP_SIMPLEX;
-	devmode->yresolution          = 0;
-	devmode->ttoption             = DMTT_SUBDEV;
-	devmode->collate              = DMCOLLATE_FALSE;
-	devmode->icmmethod            = 0;
-	devmode->icmintent            = 0;
-	devmode->mediatype            = 0;
-	devmode->dithertype           = 0;
-
-	devmode->logpixels            = 0;
-	devmode->bitsperpel           = 0;
-	devmode->pelswidth            = 0;
-	devmode->pelsheight           = 0;
-	devmode->displayflags         = 0;
-	devmode->displayfrequency     = 0;
-	devmode->reserved1            = 0;
-	devmode->reserved2            = 0;
-	devmode->panningwidth         = 0;
-	devmode->panningheight        = 0;
-
-	devmode->driverextra_data.data = NULL;
-	devmode->driverextra_data.length = 0;
-
-	return devmode;
-}
-
 /**
  * @internal
  *
@@ -1010,6 +867,77 @@ static WERROR winreg_printer_write_binary(TALLOC_CTX *mem_ctx,
 	return result;
 }
 
+static WERROR winreg_printer_query_binary(TALLOC_CTX *mem_ctx,
+					  struct rpc_pipe_client *pipe_handle,
+					  struct policy_handle *key_handle,
+					  const char *value,
+					  DATA_BLOB *data)
+{
+	struct winreg_String wvalue;
+	enum winreg_Type type;
+	WERROR result = WERR_OK;
+	uint32_t value_len = 0;
+	uint32_t data_size = 0;
+	NTSTATUS status;
+	DATA_BLOB blob;
+
+	wvalue.name = value;
+	status = rpccli_winreg_QueryValue(pipe_handle,
+					  mem_ctx,
+					  key_handle,
+					  &wvalue,
+					  &type,
+					  NULL,
+					  &data_size,
+					  &value_len,
+					  &result);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(0, ("winreg_printer_query_dword: Could not query value %s: %s\n",
+			  wvalue.name, nt_errstr(status)));
+		if (!W_ERROR_IS_OK(result)) {
+			goto done;
+		}
+		result = ntstatus_to_werror(status);
+		goto done;
+	}
+
+	if (type != REG_BINARY) {
+		result = WERR_INVALID_DATATYPE;
+		goto done;
+	}
+	blob = data_blob_talloc(mem_ctx, NULL, data_size);
+	if (blob.data == NULL) {
+		result = WERR_NOMEM;
+		goto done;
+	}
+	value_len = 0;
+
+	status = rpccli_winreg_QueryValue(pipe_handle,
+					  mem_ctx,
+					  key_handle,
+					  &wvalue,
+					  &type,
+					  blob.data,
+					  &data_size,
+					  &value_len,
+					  &result);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(0, ("winreg_printer_query_dword: Could not query value %s: %s\n",
+			  wvalue.name, nt_errstr(status)));
+		if (!W_ERROR_IS_OK(result)) {
+			result = ntstatus_to_werror(status);
+		}
+		goto done;
+	}
+
+	if (data) {
+		data->data = blob.data;
+		data->length = blob.length;
+	}
+done:
+	return result;
+}
+
 static WERROR winreg_printer_query_dword(TALLOC_CTX *mem_ctx,
 					 struct rpc_pipe_client *pipe_handle,
 					 struct policy_handle *key_handle,
@@ -1020,6 +948,7 @@ static WERROR winreg_printer_query_dword(TALLOC_CTX *mem_ctx,
 	enum winreg_Type type;
 	WERROR result = WERR_OK;
 	uint32_t value_len = 0;
+	uint32_t data_size = 0;
 	NTSTATUS status;
 	DATA_BLOB blob;
 
@@ -1030,7 +959,7 @@ static WERROR winreg_printer_query_dword(TALLOC_CTX *mem_ctx,
 					  &wvalue,
 					  &type,
 					  NULL,
-					  (uint32_t *) &blob.length,
+					  &data_size,
 					  &value_len,
 					  &result);
 	if (!NT_STATUS_IS_OK(status)) {
@@ -1048,12 +977,12 @@ static WERROR winreg_printer_query_dword(TALLOC_CTX *mem_ctx,
 		goto done;
 	}
 
-	if (blob.length != 4) {
+	if (data_size != 4) {
 		result = WERR_INVALID_DATA;
 		goto done;
 	}
 
-	blob.data = (uint8_t *) TALLOC(mem_ctx, blob.length);
+	blob = data_blob_talloc(mem_ctx, NULL, data_size);
 	if (blob.data == NULL) {
 		result = WERR_NOMEM;
 		goto done;
@@ -1066,7 +995,7 @@ static WERROR winreg_printer_query_dword(TALLOC_CTX *mem_ctx,
 					  &wvalue,
 					  &type,
 					  blob.data,
-					  (uint32_t *) &blob.length,
+					  &data_size,
 					  &value_len,
 					  &result);
 	if (!NT_STATUS_IS_OK(status)) {
@@ -1210,26 +1139,6 @@ static WERROR winreg_enumval_to_multi_sz(TALLOC_CTX *mem_ctx,
 	return WERR_OK;
 }
 
-static WERROR winreg_enumval_to_blob(TALLOC_CTX *mem_ctx,
-				     struct spoolss_PrinterEnumValues *v,
-				     const char *valuename,
-				     DATA_BLOB *blob)
-{
-	/* just return if it is not the one we are looking for */
-	if (strcmp(valuename, v->value_name) != 0) {
-		return WERR_NOT_FOUND;
-	}
-
-	if (v->type != REG_BINARY) {
-		return WERR_INVALID_DATATYPE;
-	}
-
-	blob->data = v->data->data;
-	blob->length = v->data_length;
-
-	return WERR_OK;
-}
-
 static WERROR winreg_printer_write_date(TALLOC_CTX *mem_ctx,
 					struct rpc_pipe_client *pipe_handle,
 					struct policy_handle *key_handle,
@@ -1371,13 +1280,11 @@ WERROR winreg_create_printer(TALLOC_CTX *mem_ctx,
 	struct rpc_pipe_client *winreg_pipe = NULL;
 	struct policy_handle hive_hnd, key_hnd;
 	struct spoolss_SetPrinterInfo2 *info2;
-	struct spoolss_DeviceMode *devmode = NULL;
 	struct security_descriptor *secdesc;
 	struct winreg_String wkey, wkeyclass;
 	const char *path;
-	const char *subkeys[] = { "DsDriver", "DsSpooler", "PrinterDriverData" };
+	const char *subkeys[] = { SPOOL_DSDRIVER_KEY, SPOOL_DSSPOOLER_KEY, SPOOL_PRINTERDATA_KEY };
 	uint32_t i, count = ARRAY_SIZE(subkeys);
-	int snum = lp_servicenumber(sharename);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list