[SCM] Samba Shared Repository - branch v3-4-test updated - release-4-0-0alpha7-476-gf894065

Günther Deschner gd at samba.org
Wed Mar 18 10:57:20 GMT 2009


The branch, v3-4-test has been updated
       via  f894065e736ec325f4251530ea66952122a1785f (commit)
       via  d7d6ab1026728c1bdd42355d8b0302a9f9596756 (commit)
       via  9febc1daffb2ac66e9e85246f8d37f6f1f0dcdfa (commit)
       via  5b145b94bb34c0490c7c19184d13c2295b2493c4 (commit)
      from  9575c97439c0e691f87a6cb094bdc5c9d464c3ce (commit)

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


- Log -----------------------------------------------------------------
commit f894065e736ec325f4251530ea66952122a1785f
Author: Günther Deschner <gd at samba.org>
Date:   Wed Mar 18 11:25:15 2009 +0100

    s3-spoolss: add registry_value_to_printer_enum_value.
    
    Guenther
    (cherry picked from commit ef0234256296451517b65113d9f5cfcffa95d736)

commit d7d6ab1026728c1bdd42355d8b0302a9f9596756
Author: Günther Deschner <gd at samba.org>
Date:   Wed Mar 18 11:22:11 2009 +0100

    s3-spoolss: add SPOOLSS_BUFFER_ARRAY macro.
    
    Guenther
    (cherry picked from commit f68334129409d1e194877689bb6a691ac4025dc9)

commit 9febc1daffb2ac66e9e85246f8d37f6f1f0dcdfa
Author: Günther Deschner <gd at samba.org>
Date:   Wed Mar 18 11:11:05 2009 +0100

    spoolss: add ndr_size_spoolss_EnumPrinterDataEx_info in spoolss helper.
    
    Guenther
    (cherry picked from commit 2687d29f7c4dbb2bbb88a85558cae43c2ce8e7f8)

commit 5b145b94bb34c0490c7c19184d13c2295b2493c4
Author: Günther Deschner <gd at samba.org>
Date:   Wed Mar 18 11:10:25 2009 +0100

    spoolss: rename NDR_SPOOLSS_SIZE_ENUM macro to NDR_SPOOLSS_SIZE_ENUM_LEVEL in
    spoolss helper.
    
    Guenther
    (cherry picked from commit ec47aac299eeef1fd83448c3ce2fe02892df8e8c)

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

Summary of changes:
 librpc/ndr/ndr_spoolss_buf.c        |   39 ++++++++++++++++++++++++++--------
 librpc/ndr/ndr_spoolss_buf.h        |    2 +
 source3/rpc_server/srv_spoolss_nt.c |   34 ++++++++++++++++++++++++++++++
 3 files changed, 66 insertions(+), 9 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/ndr/ndr_spoolss_buf.c b/librpc/ndr/ndr_spoolss_buf.c
index 97624d3..f30c17b 100644
--- a/librpc/ndr/ndr_spoolss_buf.c
+++ b/librpc/ndr/ndr_spoolss_buf.c
@@ -173,7 +173,7 @@
 } while (0)
 
 /* TODO: set _ndr_info->flags correct */
-#define NDR_SPOOLSS_SIZE_ENUM(fn) do { \
+#define NDR_SPOOLSS_SIZE_ENUM_LEVEL(fn) do { \
 	struct __##fn __r;\
 	DATA_BLOB _data_blob_info;\
 	struct ndr_push *_ndr_info = ndr_push_init_ctx(mem_ctx, iconv_convenience);\
@@ -187,6 +187,21 @@
 	return _data_blob_info.length;\
 } while(0)
 
+/* TODO: set _ndr_info->flags correct */
+#define NDR_SPOOLSS_SIZE_ENUM(fn) do { \
+	struct __##fn __r;\
+	DATA_BLOB _data_blob_info;\
+	struct ndr_push *_ndr_info = ndr_push_init_ctx(mem_ctx, iconv_convenience);\
+	if (!_ndr_info) return 0;\
+	_ndr_info->flags|=0;\
+	__r.in.count	= count;\
+	__r.out.info	= info;\
+	_NDR_CHECK_UINT32(ndr_push___##fn(_ndr_info, NDR_OUT, &__r)); \
+	_data_blob_info = ndr_push_blob(_ndr_info);\
+	return _data_blob_info.length;\
+} while(0)
+
+
 /*
   spoolss_EnumPrinters
 */
@@ -216,7 +231,7 @@ enum ndr_err_code ndr_pull_spoolss_EnumPrinters(struct ndr_pull *ndr, int flags,
 
 uint32_t ndr_size_spoolss_EnumPrinters_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_PrinterInfo *info)
 {
-	NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrinters);
+	NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPrinters);
 }
 
 /*
@@ -252,7 +267,7 @@ enum ndr_err_code ndr_pull_spoolss_EnumJobs(struct ndr_pull *ndr, int flags, str
 
 uint32_t ndr_size_spoolss_EnumJobs_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_JobInfo *info)
 {
-	NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumJobs);
+	NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumJobs);
 }
 
 /*
@@ -284,7 +299,7 @@ enum ndr_err_code ndr_pull_spoolss_EnumPrinterDrivers(struct ndr_pull *ndr, int
 
 uint32_t ndr_size_spoolss_EnumPrinterDrivers_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_DriverInfo *info)
 {
-	NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrinterDrivers);
+	NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPrinterDrivers);
 }
 
 /*
@@ -312,7 +327,7 @@ enum ndr_err_code ndr_pull_spoolss_EnumForms(struct ndr_pull *ndr, int flags, st
 
 uint32_t ndr_size_spoolss_EnumForms_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_FormInfo *info)
 {
-	NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumForms);
+	NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumForms);
 }
 
 /*
@@ -340,7 +355,7 @@ enum ndr_err_code ndr_pull_spoolss_EnumPorts(struct ndr_pull *ndr, int flags, st
 
 uint32_t ndr_size_spoolss_EnumPorts_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_PortInfo *info)
 {
-	NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPorts);
+	NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPorts);
 }
 
 /*
@@ -368,7 +383,7 @@ enum ndr_err_code ndr_pull_spoolss_EnumMonitors(struct ndr_pull *ndr, int flags,
 
 uint32_t ndr_size_spoolss_EnumMonitors_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience, uint32_t level, uint32_t count, union spoolss_MonitorInfo *info)
 {
-	NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumMonitors);
+	NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumMonitors);
 }
 
 /*
@@ -401,7 +416,7 @@ enum ndr_err_code ndr_pull_spoolss_EnumPrintProcessors(struct ndr_pull *ndr, int
 uint32_t ndr_size_spoolss_EnumPrintProcessors_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience,
 						   uint32_t level, uint32_t count, union spoolss_PrintProcessorInfo *info)
 {
-	NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrintProcessors);
+	NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPrintProcessors);
 }
 
 /*
@@ -434,7 +449,7 @@ enum ndr_err_code ndr_pull_spoolss_EnumPrintProcDataTypes(struct ndr_pull *ndr,
 uint32_t ndr_size_spoolss_EnumPrintProcDataTypes_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience,
 						      uint32_t level, uint32_t count, union spoolss_PrintProcDataTypesInfo *info)
 {
-	NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrintProcDataTypes);
+	NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPrintProcDataTypes);
 }
 
 /*
@@ -531,6 +546,12 @@ enum ndr_err_code ndr_pull_spoolss_EnumPrinterDataEx(struct ndr_pull *ndr, int f
 	return NDR_ERR_SUCCESS;
 }
 
+uint32_t ndr_size_spoolss_EnumPrinterDataEx_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience,
+						 uint32_t count, struct spoolss_PrinterEnumValues *info)
+{
+	NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPrinterDataEx);
+}
+
 /*
   spoolss_GetPrinterData
 */
diff --git a/librpc/ndr/ndr_spoolss_buf.h b/librpc/ndr/ndr_spoolss_buf.h
index ae3bf86..842d8c4 100644
--- a/librpc/ndr/ndr_spoolss_buf.h
+++ b/librpc/ndr/ndr_spoolss_buf.h
@@ -40,6 +40,8 @@ uint32_t ndr_size_spoolss_EnumPrintProcDataTypes_info(TALLOC_CTX *mem_ctx, struc
 						      uint32_t level, uint32_t count, union spoolss_PrintProcDataTypesInfo *info);
 enum ndr_err_code ndr_push_spoolss_EnumPrinterDataEx(struct ndr_push *ndr, int flags, const struct spoolss_EnumPrinterDataEx *r);
 enum ndr_err_code ndr_pull_spoolss_EnumPrinterDataEx(struct ndr_pull *ndr, int flags, struct spoolss_EnumPrinterDataEx *r);
+uint32_t ndr_size_spoolss_EnumPrinterDataEx_info(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *iconv_convenience,
+						 uint32_t count, struct spoolss_PrinterEnumValues *info);
 enum ndr_err_code ndr_push_spoolss_GetPrinterData(struct ndr_push *ndr, int flags, const struct spoolss_GetPrinterData *r);
 enum ndr_err_code ndr_pull_spoolss_GetPrinterData(struct ndr_pull *ndr, int flags, struct spoolss_GetPrinterData *r);
 enum ndr_err_code ndr_push_spoolss_SetPrinterData(struct ndr_push *ndr, int flags, const struct spoolss_SetPrinterData *r);
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index a62b529..97223c9 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -34,6 +34,9 @@
 #define SPOOLSS_BUFFER_UNION_ARRAY(mem_ctx,fn,ic,info,level,count) \
 	((info)?ndr_size_##fn##_info(mem_ctx, ic, level, count, info):0)
 
+#define SPOOLSS_BUFFER_ARRAY(mem_ctx,fn,ic,info,count) \
+	((info)?ndr_size_##fn##_info(mem_ctx, ic, count, info):0)
+
 #define SPOOLSS_BUFFER_OK(val_true,val_false) ((r->in.offered >= *r->out.needed)?val_true:val_false)
 
 
@@ -8979,6 +8982,37 @@ WERROR _spoolss_DeletePrinterKey(pipes_struct *p,
 	return status;
 }
 
+/****************************************************************
+****************************************************************/
+
+static WERROR registry_value_to_printer_enum_value(TALLOC_CTX *mem_ctx,
+						   REGISTRY_VALUE *v,
+						   struct spoolss_PrinterEnumValues *r)
+{
+	WERROR result;
+
+	r->data = TALLOC_ZERO_P(mem_ctx, union spoolss_PrinterData);
+	W_ERROR_HAVE_NO_MEMORY(r->data);
+
+	r->value_name	= talloc_strdup(mem_ctx, regval_name(v));
+	W_ERROR_HAVE_NO_MEMORY(r->value_name);
+
+	r->type		= regval_type(v);
+	r->data_length	= regval_size(v);
+
+	if (r->data_length) {
+		DATA_BLOB blob = data_blob_const(regval_data_p(v),
+						 regval_size(v));
+		result = pull_spoolss_PrinterData(mem_ctx, &blob,
+						  r->data,
+						  r->type);
+		if (!W_ERROR_IS_OK(result)) {
+			return result;
+		}
+	}
+
+	return WERR_OK;
+}
 
 /********************************************************************
  * spoolss_enumprinterdataex


-- 
Samba Shared Repository


More information about the samba-cvs mailing list