[SCM] Samba Shared Repository - branch v3-2-test updated - release-3-2-0pre2-3146-g9c35abf

Günther Deschner gd at samba.org
Fri Nov 14 15:15:06 GMT 2008


The branch, v3-2-test has been updated
       via  9c35abfd79d42b1ba04ad8a72a45c4471f8c2fa7 (commit)
       via  3fa176b5552341ed8ccd40786bd4caee39b414df (commit)
      from  71bc142bea33af124f07b6244f97bde289fe3a2d (commit)

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


- Log -----------------------------------------------------------------
commit 9c35abfd79d42b1ba04ad8a72a45c4471f8c2fa7
Author: Günther Deschner <gd at samba.org>
Date:   Fri Nov 14 16:12:34 2008 +0100

    re-run make idl.
    
    Guenther
    (cherry picked from commit 19568f4e4e94266a7792e6dce8eaa5086f435fc3)

commit 3fa176b5552341ed8ccd40786bd4caee39b414df
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Nov 7 10:49:59 2008 +0100

    security.idl: sometimes ACEs have some padding at the end
    
    metze
    (cherry picked from commit 2dc120377baec2c8b7c9b6fe40d15218588c97fd)

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

Summary of changes:
 source/librpc/gen_ndr/ndr_security.c |   19 -------------------
 source/librpc/gen_ndr/security.h     |    2 +-
 source/librpc/idl/security.idl       |    2 +-
 source/librpc/ndr/ndr_sec_helper.c   |   30 ++++++++++++++++++++++++++++++
 4 files changed, 32 insertions(+), 21 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/librpc/gen_ndr/ndr_security.c b/source/librpc/gen_ndr/ndr_security.c
index d54fdb2..23c8645 100644
--- a/source/librpc/gen_ndr/ndr_security.c
+++ b/source/librpc/gen_ndr/ndr_security.c
@@ -431,25 +431,6 @@ _PUBLIC_ enum ndr_err_code ndr_push_security_ace(struct ndr_push *ndr, int ndr_f
 	return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ enum ndr_err_code ndr_pull_security_ace(struct ndr_pull *ndr, int ndr_flags, struct security_ace *r)
-{
-	if (ndr_flags & NDR_SCALARS) {
-		NDR_CHECK(ndr_pull_align(ndr, 4));
-		NDR_CHECK(ndr_pull_security_ace_type(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_security_ace_flags(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->access_mask));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->object, r->type));
-		NDR_CHECK(ndr_pull_security_ace_object_ctr(ndr, NDR_SCALARS, &r->object));
-		NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, &r->trustee));
-	}
-	if (ndr_flags & NDR_BUFFERS) {
-		NDR_CHECK(ndr_pull_security_ace_object_ctr(ndr, NDR_BUFFERS, &r->object));
-		NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_BUFFERS, &r->trustee));
-	}
-	return NDR_ERR_SUCCESS;
-}
-
 _PUBLIC_ void ndr_print_security_ace(struct ndr_print *ndr, const char *name, const struct security_ace *r)
 {
 	ndr_print_struct(ndr, name, "security_ace");
diff --git a/source/librpc/gen_ndr/security.h b/source/librpc/gen_ndr/security.h
index 04655b1..e029aec 100644
--- a/source/librpc/gen_ndr/security.h
+++ b/source/librpc/gen_ndr/security.h
@@ -241,7 +241,7 @@ struct security_ace {
 	uint32_t access_mask;
 	union security_ace_object_ctr object;/* [switch_is(type)] */
 	struct dom_sid trustee;
-}/* [gensize,public,nosize] */;
+}/* [gensize,public,nopull,nosize] */;
 
 enum security_acl_revision
 #ifndef USE_UINT_ENUMS
diff --git a/source/librpc/idl/security.idl b/source/librpc/idl/security.idl
index c1dfe27..7a5d95f 100644
--- a/source/librpc/idl/security.idl
+++ b/source/librpc/idl/security.idl
@@ -289,7 +289,7 @@ interface security
 		[default];
 	} security_ace_object_ctr;
 
-	typedef [public,gensize,nosize] struct {
+	typedef [public,nopull,gensize,nosize] struct {
 		security_ace_type type;  /* SEC_ACE_TYPE_* */
 		security_ace_flags flags; /* SEC_ACE_FLAG_* */
 		[value(ndr_size_security_ace(r,ndr->flags))] uint16 size;
diff --git a/source/librpc/ndr/ndr_sec_helper.c b/source/librpc/ndr/ndr_sec_helper.c
index 18d3437..b3e3b4a 100644
--- a/source/librpc/ndr/ndr_sec_helper.c
+++ b/source/librpc/ndr/ndr_sec_helper.c
@@ -51,6 +51,36 @@ size_t ndr_size_dom_sid0(const struct dom_sid *sid, int flags)
 	return ndr_size_dom_sid28(sid, flags);
 }
 
+enum ndr_err_code ndr_pull_security_ace(struct ndr_pull *ndr, int ndr_flags, struct security_ace *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		uint32_t start_ofs = ndr->offset;
+		uint32_t size = 0;
+		uint32_t pad = 0;
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		NDR_CHECK(ndr_pull_security_ace_type(ndr, NDR_SCALARS, &r->type));
+		NDR_CHECK(ndr_pull_security_ace_flags(ndr, NDR_SCALARS, &r->flags));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->access_mask));
+		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->object, r->type));
+		NDR_CHECK(ndr_pull_security_ace_object_ctr(ndr, NDR_SCALARS, &r->object));
+		NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, &r->trustee));
+		size = ndr->offset - start_ofs;
+		if (r->size < size) {
+			return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,
+					      "ndr_pull_security_ace: r->size %u < size %u",
+					      (unsigned)r->size, size);
+		}
+		pad = r->size - size;
+		NDR_PULL_NEED_BYTES(ndr, pad);
+		ndr->offset += pad;
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+		NDR_CHECK(ndr_pull_security_ace_object_ctr(ndr, NDR_BUFFERS, &r->object));
+	}
+	return NDR_ERR_SUCCESS;
+}
+
 /*
   return the wire size of a security_ace
 */


-- 
Samba Shared Repository


More information about the samba-cvs mailing list