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 <[email protected]>
Date:   Wed May 5 18:23:45 2010 +0200

    s3-spoolss: remove unused winreg_enumval_to_blob().
    
    Guenther

commit 386c1fffacb712ed86d7665640ecaa2e764ab322
Author: Andreas Schneider <[email protected]>
Date:   Fri Apr 30 10:01:10 2010 +0200

    s3-spoolss: Create default DsSpooler values.
    
    Signed-off-by: Günther Deschner <[email protected]>

commit 92df015e3009862a7e4f9fc9e3255ef47f1191fb
Author: Andreas Schneider <[email protected]>
Date:   Tue May 4 12:24:00 2010 +0200

    s3-spoolss: Fixed the DeviceMode handling in winreg.
    
    Signed-off-by: Günther Deschner <[email protected]>

commit 859a1e04fb2cb05144c91d30cc5f88a6bfd16596
Author: Andreas Schneider <[email protected]>
Date:   Tue May 4 11:44:12 2010 +0200

    s3-spoolss: Added winreg security descriptor functions.
    
    Signed-off-by: Günther Deschner <[email protected]>

commit a76cc0a18c6b3d0679bd1edae1cd0b6bef94d1a3
Author: Andreas Schneider <[email protected]>
Date:   Tue May 4 12:07:26 2010 +0200

    s3-spoolss: Migrated winreg to spoolss_create_default_secdesc.
    
    Signed-off-by: Günther Deschner <[email protected]>

commit ed3852c2c2390c4817f76667d7605aada74d8666
Author: Günther Deschner <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>

commit 740418a150ff0ccccf47b4a40783c35f81723a89
Author: Andreas Schneider <[email protected]>
Date:   Tue May 4 11:43:27 2010 +0200

    s3-spoolss: Added a winreg_printer_query_binary function.
    
    Signed-off-by: Günther Deschner <[email protected]>

commit 66f76995114c01c619953d1c0c9f3f069ea91da1
Author: Andreas Schneider <[email protected]>
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 <[email protected]>

commit b2ea8fbcce849f2fb41f381ab3d7af35e9778c9f
Author: Andreas Schneider <[email protected]>
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 <[email protected]>

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

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

Reply via email to