[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