[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Mon Dec 14 02:40:47 MST 2009


The branch, master has been updated
       via  e316624... spoolss: fix spoolss_PrinterData size calculation.
       via  5ae61cf... spoolss: trivial fix for spoolss_FormInfo2 IDL.
      from  801fbd0... s4-smbtorture: check whether a returned buffer size is a multiple of 4 in RPC-SPOOLSS.

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


- Log -----------------------------------------------------------------
commit e316624ddb8d4e178b03b315bfafd793e6c297c8
Author: Günther Deschner <gd at samba.org>
Date:   Sat Dec 12 02:52:41 2009 +0100

    spoolss: fix spoolss_PrinterData size calculation.
    
    Currently we were crashing in EnumPrinterDataEx when an e.g. an empty (NULL)
    string for a separator file was returned.
    
    Guenther

commit 5ae61cfbc281f346fd3712a975c5796f9cfbc6c2
Author: Günther Deschner <gd at samba.org>
Date:   Sat Dec 12 02:51:44 2009 +0100

    spoolss: trivial fix for spoolss_FormInfo2 IDL.
    
    Guenther

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

Summary of changes:
 librpc/gen_ndr/ndr_spoolss.c |   14 ++++++--------
 librpc/gen_ndr/ndr_spoolss.h |    1 -
 librpc/gen_ndr/spoolss.h     |    5 +++--
 librpc/idl/spoolss.idl       |    5 +++--
 librpc/ndr/ndr_spoolss_buf.c |    8 ++++++++
 librpc/ndr/ndr_spoolss_buf.h |    1 +
 6 files changed, 21 insertions(+), 13 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/gen_ndr/ndr_spoolss.c b/librpc/gen_ndr/ndr_spoolss.c
index 79cabd8..f4cf968 100644
--- a/librpc/gen_ndr/ndr_spoolss.c
+++ b/librpc/gen_ndr/ndr_spoolss.c
@@ -15724,11 +15724,6 @@ _PUBLIC_ void ndr_print_spoolss_PrinterData(struct ndr_print *ndr, const char *n
 	}
 }
 
-_PUBLIC_ size_t ndr_size_spoolss_PrinterData(const union spoolss_PrinterData *r, uint32_t level, struct smb_iconv_convenience *ic, int flags)
-{
-	return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterData, ic);
-}
-
 static enum ndr_err_code ndr_push_spoolss_FormFlags(struct ndr_push *ndr, int ndr_flags, enum spoolss_FormFlags r)
 {
 	NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
@@ -15984,7 +15979,8 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int
 			NDR_CHECK(ndr_push_relative_ptr1(ndr, r->display_name));
 			ndr->flags = _flags_save_string;
 		}
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->lang_id));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->lang_id));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->unused));
 		NDR_CHECK(ndr_push_trailer_align(ndr, 5));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
@@ -16093,7 +16089,8 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_FormInfo2(struct ndr_pull *ndr, int
 			}
 			ndr->flags = _flags_save_string;
 		}
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->lang_id));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->lang_id));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->unused));
 		NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
@@ -16206,7 +16203,8 @@ _PUBLIC_ void ndr_print_spoolss_FormInfo2(struct ndr_print *ndr, const char *nam
 		ndr_print_string(ndr, "display_name", r->display_name);
 	}
 	ndr->depth--;
-	ndr_print_uint32(ndr, "lang_id", r->lang_id);
+	ndr_print_uint16(ndr, "lang_id", r->lang_id);
+	ndr_print_uint16(ndr, "unused", r->unused);
 	ndr->depth--;
 }
 
diff --git a/librpc/gen_ndr/ndr_spoolss.h b/librpc/gen_ndr/ndr_spoolss.h
index 2fb6e9f..b368006 100644
--- a/librpc/gen_ndr/ndr_spoolss.h
+++ b/librpc/gen_ndr/ndr_spoolss.h
@@ -433,7 +433,6 @@ size_t ndr_size_spoolss_OSVersionEx(const struct spoolss_OSVersionEx *r, struct
 enum ndr_err_code ndr_push_spoolss_PrinterData(struct ndr_push *ndr, int ndr_flags, const union spoolss_PrinterData *r);
 enum ndr_err_code ndr_pull_spoolss_PrinterData(struct ndr_pull *ndr, int ndr_flags, union spoolss_PrinterData *r);
 void ndr_print_spoolss_PrinterData(struct ndr_print *ndr, const char *name, const union spoolss_PrinterData *r);
-size_t ndr_size_spoolss_PrinterData(const union spoolss_PrinterData *r, uint32_t level, struct smb_iconv_convenience *ic, int flags);
 void ndr_print_spoolss_FormFlags(struct ndr_print *ndr, const char *name, enum spoolss_FormFlags r);
 void ndr_print_spoolss_FormSize(struct ndr_print *ndr, const char *name, const struct spoolss_FormSize *r);
 void ndr_print_spoolss_FormArea(struct ndr_print *ndr, const char *name, const struct spoolss_FormArea *r);
diff --git a/librpc/gen_ndr/spoolss.h b/librpc/gen_ndr/spoolss.h
index 77d7c52..5b88e08 100644
--- a/librpc/gen_ndr/spoolss.h
+++ b/librpc/gen_ndr/spoolss.h
@@ -1569,7 +1569,7 @@ union spoolss_PrinterData {
 	uint32_t value;/* [case(REG_DWORD)] */
 	const char ** string_array;/* [flag(LIBNDR_FLAG_STR_NULLTERM),case(REG_MULTI_SZ)] */
 	DATA_BLOB data;/* [flag(LIBNDR_FLAG_REMAINING),default] */
-}/* [gensize,public,nodiscriminant] */;
+}/* [nodiscriminant,public] */;
 
 enum spoolss_FormFlags
 #ifndef USE_UINT_ENUMS
@@ -1620,7 +1620,8 @@ struct spoolss_FormInfo2 {
 	const char * mui_dll;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
 	uint32_t ressource_id;
 	const char * display_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
-	uint32_t lang_id;
+	uint16_t lang_id;
+	uint16_t unused;
 }/* [gensize,public] */;
 
 union spoolss_FormInfo {
diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl
index ceff885..1695c5a 100644
--- a/librpc/idl/spoolss.idl
+++ b/librpc/idl/spoolss.idl
@@ -1524,7 +1524,7 @@ import "misc.idl", "security.idl", "winreg.idl";
 		uint8 reserved;
 	} spoolss_OSVersionEx;
 
-	typedef [nodiscriminant,public,gensize] union {
+	typedef [nodiscriminant,public] union {
 		[case(REG_NONE)];
 		[case(REG_SZ)] nstring string;
 		[case(REG_BINARY),flag(NDR_REMAINING)] DATA_BLOB binary;
@@ -1697,7 +1697,8 @@ import "misc.idl", "security.idl", "winreg.idl";
 		[relative] nstring *mui_dll;
 		uint32 ressource_id;
 		[relative] nstring *display_name;
-		uint32 lang_id;
+		uint16 lang_id;
+		uint16 unused;
 	} spoolss_FormInfo2;
 
 	typedef [nodiscriminant,relative_base,public,gensize] union {
diff --git a/librpc/ndr/ndr_spoolss_buf.c b/librpc/ndr/ndr_spoolss_buf.c
index 853d9aa..b8d6f83 100644
--- a/librpc/ndr/ndr_spoolss_buf.c
+++ b/librpc/ndr/ndr_spoolss_buf.c
@@ -1355,3 +1355,11 @@ void ndr_print_spoolss_Field(struct ndr_print *ndr, const char *name, const unio
 	}
 }
 
+_PUBLIC_ size_t ndr_size_spoolss_PrinterData(const union spoolss_PrinterData *r, uint32_t level, struct smb_iconv_convenience *ic, int flags)
+{
+	if (!r) {
+		return 0;
+	}
+	return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterData, ic);
+}
+
diff --git a/librpc/ndr/ndr_spoolss_buf.h b/librpc/ndr/ndr_spoolss_buf.h
index c0c553b..a53ab7b 100644
--- a/librpc/ndr/ndr_spoolss_buf.h
+++ b/librpc/ndr/ndr_spoolss_buf.h
@@ -53,6 +53,7 @@ size_t ndr_size_spoolss_StringArray(const struct spoolss_StringArray *r, struct
 _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, int ndr_flags, const struct spoolss_DriverInfo101 *r);
 _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DriverInfo101(struct ndr_pull *ndr, int ndr_flags, struct spoolss_DriverInfo101 *r);
 void ndr_print_spoolss_Field(struct ndr_print *ndr, const char *name, const union spoolss_Field *r);
+size_t ndr_size_spoolss_PrinterData(const union spoolss_PrinterData *r, uint32_t level, struct smb_iconv_convenience *ic, int flags);
 
 #undef _PRINTF_ATTRIBUTE
 #define _PRINTF_ATTRIBUTE(a1, a2)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list