[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-1634-g1781a57

Günther Deschner gd at samba.org
Thu Jan 24 13:01:38 GMT 2008


The branch, v3-2-test has been updated
       via  1781a57b18f681f1bc03873330147a813f10eba2 (commit)
       via  57f2b8d0a8d8987a62419e9852ac9a9cf39c3109 (commit)
       via  3b87c5ce4f74f8dd01bfdf8859c6c832da15cd24 (commit)
      from  9b5f69cb1f7d22174b2cd67ebf02a271d4bf6e2f (commit)

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


- Log -----------------------------------------------------------------
commit 1781a57b18f681f1bc03873330147a813f10eba2
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jan 24 13:53:36 2008 +0100

    Re-run make idl and use generated ndr based on samba4 security.idl (except for DOM_SID).
    
    Guenther

commit 57f2b8d0a8d8987a62419e9852ac9a9cf39c3109
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jan 24 13:45:38 2008 +0100

    Merge over security.idl from samba4.
    
    Guenther

commit 3b87c5ce4f74f8dd01bfdf8859c6c832da15cd24
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jan 24 11:44:29 2008 +0100

    Fix samr_EnumDomainUsers in samba3, must not be a ref pointer here.
    
    Guenther

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

Summary of changes:
 source/Makefile.in                                 |    3 +-
 source/include/smb.h                               |    5 +-
 source/librpc/gen_ndr/cli_samr.c                   |    4 +-
 source/librpc/gen_ndr/ndr_samr.c                   |   28 +-
 .../ndr_sec_helper.c => gen_ndr/ndr_security.c}    |  420 +++++++----
 source/librpc/gen_ndr/ndr_security.h               |   41 +-
 source/librpc/gen_ndr/samr.h                       |    2 +-
 source/librpc/gen_ndr/security.h                   |  335 ++++++++-
 source/librpc/idl/samr.idl                         |    2 +-
 source/librpc/idl/security.idl                     |   31 +-
 source/librpc/ndr/libndr.h                         |    2 +-
 source/librpc/ndr/ndr_sec_helper.c                 |  815 --------------------
 source/librpc/ndr/security.h                       |  257 ------
 source/librpc/ndr/sid.c                            |   67 --
 14 files changed, 692 insertions(+), 1320 deletions(-)
 copy source/librpc/{ndr/ndr_sec_helper.c => gen_ndr/ndr_security.c} (68%)
 delete mode 100644 source/librpc/ndr/security.h


Changeset truncated at 500 lines:

diff --git a/source/Makefile.in b/source/Makefile.in
index c519ff8..5b408a5 100644
--- a/source/Makefile.in
+++ b/source/Makefile.in
@@ -257,6 +257,7 @@ LIBNDR_OBJ = librpc/ndr/ndr_basic.o \
 	     librpc/ndr/ndr.o \
 	     librpc/ndr/ndr_misc.o \
 	     librpc/gen_ndr/ndr_misc.o \
+	     librpc/gen_ndr/ndr_security.o \
 	     librpc/ndr/ndr_sec_helper.o \
 	     librpc/ndr/ndr_string.o \
 	     librpc/ndr/sid.o \
@@ -1091,7 +1092,7 @@ modules: SHOWFLAGS $(MODULES)
 ## Perl IDL Compiler
 IDL_FILES = unixinfo.idl lsa.idl dfs.idl echo.idl winreg.idl initshutdown.idl \
 	srvsvc.idl svcctl.idl eventlog.idl wkssvc.idl netlogon.idl notify.idl \
-	epmapper.idl messaging.idl xattr.idl misc.idl samr.idl
+	epmapper.idl messaging.idl xattr.idl misc.idl samr.idl security.idl
 
 idl:
 	@IDL_FILES="$(IDL_FILES)" CPP="$(CPP)" PERL="$(PERL)" \
diff --git a/source/include/smb.h b/source/include/smb.h
index f3cf1db..3160365 100644
--- a/source/include/smb.h
+++ b/source/include/smb.h
@@ -259,9 +259,6 @@ typedef struct dom_sid {
 	uint32 sub_auths[MAXSUBAUTHS];  
 } DOM_SID;
 
-#define dom_sid2 dom_sid
-#define dom_sid28 dom_sid
-
 enum id_mapping {
 	ID_UNKNOWN = 0,
 	ID_MAPPED,
@@ -296,7 +293,7 @@ typedef struct data_blob {
 extern const DATA_BLOB data_blob_null;
 
 #include "librpc/gen_ndr/misc.h"
-#include "librpc/ndr/security.h"
+#include "librpc/gen_ndr/security.h"
 #include "librpc/ndr/libndr.h"
 #include "librpc/gen_ndr/lsa.h"
 #include "librpc/gen_ndr/dfs.h"
diff --git a/source/librpc/gen_ndr/cli_samr.c b/source/librpc/gen_ndr/cli_samr.c
index 99e7e45..73c123b 100644
--- a/source/librpc/gen_ndr/cli_samr.c
+++ b/source/librpc/gen_ndr/cli_samr.c
@@ -621,7 +621,9 @@ NTSTATUS rpccli_samr_EnumDomainUsers(struct rpc_pipe_client *cli,
 
 	/* Return variables */
 	*resume_handle = *r.out.resume_handle;
-	*sam = *r.out.sam;
+	if (sam && r.out.sam) {
+		*sam = *r.out.sam;
+	}
 	*num_entries = *r.out.num_entries;
 
 	/* Return result */
diff --git a/source/librpc/gen_ndr/ndr_samr.c b/source/librpc/gen_ndr/ndr_samr.c
index f407fcf..ed80da2 100644
--- a/source/librpc/gen_ndr/ndr_samr.c
+++ b/source/librpc/gen_ndr/ndr_samr.c
@@ -6409,10 +6409,10 @@ static enum ndr_err_code ndr_push_samr_EnumDomainUsers(struct ndr_push *ndr, int
 			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
 		}
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, *r->out.resume_handle));
-		if (r->out.sam == NULL) {
-			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->out.sam));
+		if (r->out.sam) {
+			NDR_CHECK(ndr_push_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sam));
 		}
-		NDR_CHECK(ndr_push_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sam));
 		if (r->out.num_entries == NULL) {
 			return ndr_push_error(ndr, NDR_ERR_INVALID_POINTER, "NULL [ref] pointer");
 		}
@@ -6424,6 +6424,7 @@ static enum ndr_err_code ndr_push_samr_EnumDomainUsers(struct ndr_push *ndr, int
 
 static enum ndr_err_code ndr_pull_samr_EnumDomainUsers(struct ndr_pull *ndr, int flags, struct samr_EnumDomainUsers *r)
 {
+	uint32_t _ptr_sam;
 	TALLOC_CTX *_mem_save_domain_handle_0;
 	TALLOC_CTX *_mem_save_resume_handle_0;
 	TALLOC_CTX *_mem_save_sam_0;
@@ -6449,8 +6450,6 @@ static enum ndr_err_code ndr_pull_samr_EnumDomainUsers(struct ndr_pull *ndr, int
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.max_size));
 		NDR_PULL_ALLOC(ndr, r->out.resume_handle);
 		*r->out.resume_handle = *r->in.resume_handle;
-		NDR_PULL_ALLOC(ndr, r->out.sam);
-		ZERO_STRUCTP(r->out.sam);
 		NDR_PULL_ALLOC(ndr, r->out.num_entries);
 		ZERO_STRUCTP(r->out.num_entries);
 	}
@@ -6462,13 +6461,18 @@ static enum ndr_err_code ndr_pull_samr_EnumDomainUsers(struct ndr_pull *ndr, int
 		NDR_PULL_SET_MEM_CTX(ndr, r->out.resume_handle, LIBNDR_FLAG_REF_ALLOC);
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, r->out.resume_handle));
 		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_resume_handle_0, LIBNDR_FLAG_REF_ALLOC);
-		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sam));
+		if (_ptr_sam) {
 			NDR_PULL_ALLOC(ndr, r->out.sam);
+		} else {
+			r->out.sam = NULL;
+		}
+		if (r->out.sam) {
+			_mem_save_sam_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->out.sam, 0);
+			NDR_CHECK(ndr_pull_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sam));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam_0, 0);
 		}
-		_mem_save_sam_0 = NDR_PULL_GET_MEM_CTX(ndr);
-		NDR_PULL_SET_MEM_CTX(ndr, r->out.sam, LIBNDR_FLAG_REF_ALLOC);
-		NDR_CHECK(ndr_pull_samr_SamArray(ndr, NDR_SCALARS|NDR_BUFFERS, r->out.sam));
-		NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sam_0, LIBNDR_FLAG_REF_ALLOC);
 		if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) {
 			NDR_PULL_ALLOC(ndr, r->out.num_entries);
 		}
@@ -6512,7 +6516,9 @@ _PUBLIC_ void ndr_print_samr_EnumDomainUsers(struct ndr_print *ndr, const char *
 		ndr->depth--;
 		ndr_print_ptr(ndr, "sam", r->out.sam);
 		ndr->depth++;
-		ndr_print_samr_SamArray(ndr, "sam", r->out.sam);
+		if (r->out.sam) {
+			ndr_print_samr_SamArray(ndr, "sam", r->out.sam);
+		}
 		ndr->depth--;
 		ndr_print_ptr(ndr, "num_entries", r->out.num_entries);
 		ndr->depth++;
diff --git a/source/librpc/ndr/ndr_sec_helper.c b/source/librpc/gen_ndr/ndr_security.c
similarity index 68%
copy from source/librpc/ndr/ndr_sec_helper.c
copy to source/librpc/gen_ndr/ndr_security.c
index d1938b9..ab34143 100644
--- a/source/librpc/ndr/ndr_sec_helper.c
+++ b/source/librpc/gen_ndr/ndr_security.c
@@ -1,95 +1,9 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   fast routines for getting the wire size of security objects
-
-   Copyright (C) Andrew Tridgell 2003
-   
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-   
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
+/* parser auto-generated by pidl */
 
 #include "includes.h"
+#include "librpc/gen_ndr/ndr_security.h"
 
-/*
-  return the wire size of a dom_sid
-*/
-size_t ndr_size_dom_sid(const struct dom_sid *sid, int flags)
-{
-	if (!sid) return 0;
-	return 8 + 4*sid->num_auths;
-}
-
-/*
-  return the wire size of a security_ace
-*/
-size_t ndr_size_security_ace(const struct security_ace *ace, int flags)
-{
-	if (!ace) return 0;
-	return 8 + ndr_size_dom_sid(&ace->trustee, flags);
-}
-
-
-/*
-  return the wire size of a security_acl
-*/
-size_t ndr_size_security_acl(const struct security_acl *acl, int flags)
-{
-	size_t ret;
-	int i;
-	if (!acl) return 0;
-	ret = 8;
-	for (i=0;i<acl->num_aces;i++) {
-		ret += ndr_size_security_ace(&acl->aces[i], flags);
-	}
-	return ret;
-}
-
-/*
-  return the wire size of a security descriptor
-*/
-size_t ndr_size_security_descriptor(const struct security_descriptor *sd, int flags)
-{
-	size_t ret;
-	if (!sd) return 0;
-	
-	ret = 20;
-	ret += ndr_size_dom_sid(sd->owner_sid, flags);
-	ret += ndr_size_dom_sid(sd->group_sid, flags);
-	ret += ndr_size_security_acl(sd->dacl, flags);
-	ret += ndr_size_security_acl(sd->sacl, flags);
-	return ret;
-}
-
-/*
-  print a dom_sid
-*/
-void ndr_print_dom_sid(struct ndr_print *ndr, const char *name, const struct dom_sid *sid)
-{
-	ndr->print(ndr, "%-25s: %s", name, dom_sid_string(ndr, sid));
-}
-
-void ndr_print_dom_sid2(struct ndr_print *ndr, const char *name, const struct dom_sid *sid)
-{
-	ndr_print_dom_sid(ndr, name, sid);
-}
-
-void ndr_print_dom_sid28(struct ndr_print *ndr, const char *name, const struct dom_sid *sid)
-{
-	ndr_print_dom_sid(ndr, name, sid);
-}
-
+#include "librpc/gen_ndr/ndr_misc.h"
 static enum ndr_err_code ndr_push_security_ace_flags(struct ndr_push *ndr, int ndr_flags, uint8_t r)
 {
 	NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r));
@@ -104,7 +18,7 @@ static enum ndr_err_code ndr_pull_security_ace_flags(struct ndr_pull *ndr, int n
 	return NDR_ERR_SUCCESS;
 }
 
-void ndr_print_security_ace_flags(struct ndr_print *ndr, const char *name, uint8_t r)
+_PUBLIC_ void ndr_print_security_ace_flags(struct ndr_print *ndr, const char *name, uint8_t r)
 {
 	ndr_print_uint8(ndr, name, r);
 	ndr->depth++;
@@ -129,11 +43,11 @@ static enum ndr_err_code ndr_pull_security_ace_type(struct ndr_pull *ndr, int nd
 {
 	uint8_t v;
 	NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v));
-	*r = (enum security_ace_type)v;
+	*r = v;
 	return NDR_ERR_SUCCESS;
 }
 
-void ndr_print_security_ace_type(struct ndr_print *ndr, const char *name, enum security_ace_type r)
+_PUBLIC_ void ndr_print_security_ace_type(struct ndr_print *ndr, const char *name, enum security_ace_type r)
 {
 	const char *val = NULL;
 
@@ -165,7 +79,7 @@ static enum ndr_err_code ndr_pull_security_ace_object_flags(struct ndr_pull *ndr
 	return NDR_ERR_SUCCESS;
 }
 
-void ndr_print_security_ace_object_flags(struct ndr_print *ndr, const char *name, uint32_t r)
+_PUBLIC_ void ndr_print_security_ace_object_flags(struct ndr_print *ndr, const char *name, uint32_t r)
 {
 	ndr_print_uint32(ndr, name, r);
 	ndr->depth++;
@@ -176,9 +90,8 @@ void ndr_print_security_ace_object_flags(struct ndr_print *ndr, const char *name
 
 static enum ndr_err_code ndr_push_security_ace_object_type(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_type *r)
 {
-	int level;
-	level = ndr_push_get_switch_value(ndr, r);
 	if (ndr_flags & NDR_SCALARS) {
+		int level = ndr_push_get_switch_value(ndr, r);
 		switch (level) {
 			case SEC_ACE_OBJECT_TYPE_PRESENT:
 				NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->type));
@@ -190,8 +103,10 @@ static enum ndr_err_code ndr_push_security_ace_object_type(struct ndr_push *ndr,
 		}
 	}
 	if (ndr_flags & NDR_BUFFERS) {
+		int level = ndr_push_get_switch_value(ndr, r);
 		switch (level) {
 			case SEC_ACE_OBJECT_TYPE_PRESENT:
+				NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->type));
 			break;
 
 			default:
@@ -220,6 +135,7 @@ static enum ndr_err_code ndr_pull_security_ace_object_type(struct ndr_pull *ndr,
 	if (ndr_flags & NDR_BUFFERS) {
 		switch (level) {
 			case SEC_ACE_OBJECT_TYPE_PRESENT:
+				NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->type));
 			break;
 
 			default:
@@ -230,7 +146,7 @@ static enum ndr_err_code ndr_pull_security_ace_object_type(struct ndr_pull *ndr,
 	return NDR_ERR_SUCCESS;
 }
 
-void ndr_print_security_ace_object_type(struct ndr_print *ndr, const char *name, const union security_ace_object_type *r)
+_PUBLIC_ void ndr_print_security_ace_object_type(struct ndr_print *ndr, const char *name, const union security_ace_object_type *r)
 {
 	int level;
 	level = ndr_print_get_switch_value(ndr, r);
@@ -248,9 +164,8 @@ void ndr_print_security_ace_object_type(struct ndr_print *ndr, const char *name,
 
 static enum ndr_err_code ndr_push_security_ace_object_inherited_type(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_inherited_type *r)
 {
-	int level;
-	level = ndr_push_get_switch_value(ndr, r);
 	if (ndr_flags & NDR_SCALARS) {
+		int level = ndr_push_get_switch_value(ndr, r);
 		switch (level) {
 			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
 				NDR_CHECK(ndr_push_GUID(ndr, NDR_SCALARS, &r->inherited_type));
@@ -262,8 +177,10 @@ static enum ndr_err_code ndr_push_security_ace_object_inherited_type(struct ndr_
 		}
 	}
 	if (ndr_flags & NDR_BUFFERS) {
+		int level = ndr_push_get_switch_value(ndr, r);
 		switch (level) {
 			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
+				NDR_CHECK(ndr_push_GUID(ndr, NDR_BUFFERS, &r->inherited_type));
 			break;
 
 			default:
@@ -292,6 +209,7 @@ static enum ndr_err_code ndr_pull_security_ace_object_inherited_type(struct ndr_
 	if (ndr_flags & NDR_BUFFERS) {
 		switch (level) {
 			case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
+				NDR_CHECK(ndr_pull_GUID(ndr, NDR_BUFFERS, &r->inherited_type));
 			break;
 
 			default:
@@ -302,7 +220,7 @@ static enum ndr_err_code ndr_pull_security_ace_object_inherited_type(struct ndr_
 	return NDR_ERR_SUCCESS;
 }
 
-void ndr_print_security_ace_object_inherited_type(struct ndr_print *ndr, const char *name, const union security_ace_object_inherited_type *r)
+_PUBLIC_ void ndr_print_security_ace_object_inherited_type(struct ndr_print *ndr, const char *name, const union security_ace_object_inherited_type *r)
 {
 	int level;
 	level = ndr_print_get_switch_value(ndr, r);
@@ -323,9 +241,9 @@ static enum ndr_err_code ndr_push_security_ace_object(struct ndr_push *ndr, int
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
 		NDR_CHECK(ndr_push_security_ace_object_flags(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->type, r->flags&SEC_ACE_OBJECT_TYPE_PRESENT));
+		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->type, r->flags & SEC_ACE_OBJECT_TYPE_PRESENT));
 		NDR_CHECK(ndr_push_security_ace_object_type(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->inherited_type, r->flags&SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
+		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->inherited_type, r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
 		NDR_CHECK(ndr_push_security_ace_object_inherited_type(ndr, NDR_SCALARS, &r->inherited_type));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
@@ -340,9 +258,9 @@ static enum ndr_err_code ndr_pull_security_ace_object(struct ndr_pull *ndr, int
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 4));
 		NDR_CHECK(ndr_pull_security_ace_object_flags(ndr, NDR_SCALARS, &r->flags));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->type, r->flags&SEC_ACE_OBJECT_TYPE_PRESENT));
+		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->type, r->flags & SEC_ACE_OBJECT_TYPE_PRESENT));
 		NDR_CHECK(ndr_pull_security_ace_object_type(ndr, NDR_SCALARS, &r->type));
-		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->inherited_type, r->flags&SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
+		NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->inherited_type, r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
 		NDR_CHECK(ndr_pull_security_ace_object_inherited_type(ndr, NDR_SCALARS, &r->inherited_type));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
@@ -352,23 +270,22 @@ static enum ndr_err_code ndr_pull_security_ace_object(struct ndr_pull *ndr, int
 	return NDR_ERR_SUCCESS;
 }
 
-void ndr_print_security_ace_object(struct ndr_print *ndr, const char *name, const struct security_ace_object *r)
+_PUBLIC_ void ndr_print_security_ace_object(struct ndr_print *ndr, const char *name, const struct security_ace_object *r)
 {
 	ndr_print_struct(ndr, name, "security_ace_object");
 	ndr->depth++;
 	ndr_print_security_ace_object_flags(ndr, "flags", r->flags);
-	ndr_print_set_switch_value(ndr, &r->type, r->flags&SEC_ACE_OBJECT_TYPE_PRESENT);
+	ndr_print_set_switch_value(ndr, &r->type, r->flags & SEC_ACE_OBJECT_TYPE_PRESENT);
 	ndr_print_security_ace_object_type(ndr, "type", &r->type);
-	ndr_print_set_switch_value(ndr, &r->inherited_type, r->flags&SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT);
+	ndr_print_set_switch_value(ndr, &r->inherited_type, r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT);
 	ndr_print_security_ace_object_inherited_type(ndr, "inherited_type", &r->inherited_type);
 	ndr->depth--;
 }
 
 static enum ndr_err_code ndr_push_security_ace_object_ctr(struct ndr_push *ndr, int ndr_flags, const union security_ace_object_ctr *r)
 {
-	int level;
-	level = ndr_push_get_switch_value(ndr, r);
 	if (ndr_flags & NDR_SCALARS) {
+		int level = ndr_push_get_switch_value(ndr, r);
 		switch (level) {
 			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
 				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_SCALARS, &r->object));
@@ -392,6 +309,7 @@ static enum ndr_err_code ndr_push_security_ace_object_ctr(struct ndr_push *ndr,
 		}
 	}
 	if (ndr_flags & NDR_BUFFERS) {
+		int level = ndr_push_get_switch_value(ndr, r);
 		switch (level) {
 			case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
 				NDR_CHECK(ndr_push_security_ace_object(ndr, NDR_BUFFERS, &r->object));
@@ -470,7 +388,7 @@ static enum ndr_err_code ndr_pull_security_ace_object_ctr(struct ndr_pull *ndr,
 	return NDR_ERR_SUCCESS;
 }
 
-void ndr_print_security_ace_object_ctr(struct ndr_print *ndr, const char *name, const union security_ace_object_ctr *r)
+_PUBLIC_ void ndr_print_security_ace_object_ctr(struct ndr_print *ndr, const char *name, const union security_ace_object_ctr *r)
 {
 	int level;
 	level = ndr_print_get_switch_value(ndr, r);
@@ -498,13 +416,13 @@ void ndr_print_security_ace_object_ctr(struct ndr_print *ndr, const char *name,
 	}
 }
 
-enum ndr_err_code ndr_push_security_ace(struct ndr_push *ndr, int ndr_flags, const struct security_ace *r)
+_PUBLIC_ enum ndr_err_code ndr_push_security_ace(struct ndr_push *ndr, int ndr_flags, const struct security_ace *r)
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
 		NDR_CHECK(ndr_push_security_ace_type(ndr, NDR_SCALARS, r->type));
 		NDR_CHECK(ndr_push_security_ace_flags(ndr, NDR_SCALARS, r->flags));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_security_ace(r,ndr->flags)));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_security_ace(r, ndr->flags)));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->access_mask));
 		NDR_CHECK(ndr_push_set_switch_value(ndr, &r->object, r->type));
 		NDR_CHECK(ndr_push_security_ace_object_ctr(ndr, NDR_SCALARS, &r->object));
@@ -512,11 +430,12 @@ enum ndr_err_code ndr_push_security_ace(struct ndr_push *ndr, int ndr_flags, con
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 		NDR_CHECK(ndr_push_security_ace_object_ctr(ndr, NDR_BUFFERS, &r->object));
+		NDR_CHECK(ndr_push_dom_sid(ndr, NDR_BUFFERS, &r->trustee));
 	}
 	return NDR_ERR_SUCCESS;
 }
 
-enum ndr_err_code ndr_pull_security_ace(struct ndr_pull *ndr, int ndr_flags, struct security_ace *r)
+_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));
@@ -530,17 +449,18 @@ enum ndr_err_code ndr_pull_security_ace(struct ndr_pull *ndr, int ndr_flags, str
 	}
 	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;
 }
 
-void ndr_print_security_ace(struct ndr_print *ndr, const char *name, const struct security_ace *r)
+_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");
 	ndr->depth++;
 	ndr_print_security_ace_type(ndr, "type", r->type);
 	ndr_print_security_ace_flags(ndr, "flags", r->flags);
-	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_ace(r,ndr->flags):r->size);
+	ndr_print_uint16(ndr, "size", (ndr->flags & LIBNDR_PRINT_SET_VALUES)?ndr_size_security_ace(r, ndr->flags):r->size);
 	ndr_print_uint32(ndr, "access_mask", r->access_mask);
 	ndr_print_set_switch_value(ndr, &r->object, r->type);
 	ndr_print_security_ace_object_ctr(ndr, "object", &r->object);
@@ -558,11 +478,11 @@ static enum ndr_err_code ndr_pull_security_acl_revision(struct ndr_pull *ndr, in
 {
 	uint16_t v;
 	NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v));
-	*r = (enum security_acl_revision)v;
+	*r = v;
 	return NDR_ERR_SUCCESS;
 }
 
-void ndr_print_security_acl_revision(struct ndr_print *ndr, const char *name, enum security_acl_revision r)
+_PUBLIC_ void ndr_print_security_acl_revision(struct ndr_print *ndr, const char *name, enum security_acl_revision r)
 {
 	const char *val = NULL;
 
@@ -573,13 +493,13 @@ void ndr_print_security_acl_revision(struct ndr_print *ndr, const char *name, en
 	ndr_print_enum(ndr, name, "ENUM", val, r);
 }
 
-enum ndr_err_code ndr_push_security_acl(struct ndr_push *ndr, int ndr_flags, const struct security_acl *r)
+_PUBLIC_ enum ndr_err_code ndr_push_security_acl(struct ndr_push *ndr, int ndr_flags, const struct security_acl *r)
 {
 	uint32_t cntr_aces_0;
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 4));
 		NDR_CHECK(ndr_push_security_acl_revision(ndr, NDR_SCALARS, r->revision));
-		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_security_acl(r,ndr->flags)));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, ndr_size_security_acl(r, ndr->flags)));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_aces));
 		for (cntr_aces_0 = 0; cntr_aces_0 < r->num_aces; cntr_aces_0++) {
 			NDR_CHECK(ndr_push_security_ace(ndr, NDR_SCALARS, &r->aces[cntr_aces_0]));
@@ -593,7 +513,7 @@ enum ndr_err_code ndr_push_security_acl(struct ndr_push *ndr, int ndr_flags, con
 	return NDR_ERR_SUCCESS;
 }
 
-enum ndr_err_code ndr_pull_security_acl(struct ndr_pull *ndr, int ndr_flags, struct security_acl *r)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list