[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