From a28b67c7337b4b2b753d6bfad1ed16af04744870 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 7 Dec 2006 15:24:23 +0000 Subject: r20064: - fix pushing of DeReplicaObjectIdentifierX, this lets the DsAddEntry() request work correctly - the error structures all have the same type metze (This used to be commit 3322dbd901106262b22db35e9ef455a08ac2867c) --- source4/librpc/idl/drsuapi.idl | 12 ++++++------ source4/librpc/ndr/libndr.h | 1 + source4/librpc/ndr/ndr_sec_helper.c | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) (limited to 'source4/librpc') diff --git a/source4/librpc/idl/drsuapi.idl b/source4/librpc/idl/drsuapi.idl index f6ba02897c..a5b3432bdd 100644 --- a/source4/librpc/idl/drsuapi.idl +++ b/source4/librpc/idl/drsuapi.idl @@ -126,7 +126,7 @@ interface drsuapi /* Function 0x02 */ typedef [public,gensize] struct { [value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->flags)-4)] uint32 __ndr_size; - [value(ndr_size_dom_sid(&r->sid, ndr->flags))] uint32 __ndr_size_sid; + [value(ndr_size_dom_sid28(&r->sid, ndr->flags))] uint32 __ndr_size_sid; GUID guid; dom_sid28 sid; [flag(STR_SIZE4|STR_CHARLEN|STR_CONFORMANT)] string dn; @@ -454,7 +454,7 @@ interface drsuapi /* DN String values */ typedef [public,gensize] struct { [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->flags))] uint32 __ndr_size; - [value(ndr_size_dom_sid(&r->sid,ndr->flags))] uint32 __ndr_size_sid; + [value(ndr_size_dom_sid28(&r->sid,ndr->flags))] uint32 __ndr_size_sid; GUID guid; dom_sid28 sid; [flag(STR_SIZE4|STR_CHARLEN)] string dn; @@ -1113,10 +1113,10 @@ interface drsuapi [case(1)] drsuapi_DsAddEntryErrorInfo1 error1; /* [case(2)] drsuapi_DsAddEntryErrorInfo2 error2; [case(3)] drsuapi_DsAddEntryErrorInfo3 error3; -*/ [case(4)] drsuapi_DsAddEntryErrorInfoX error4; - [case(5)] drsuapi_DsAddEntryErrorInfoX error5; - [case(6)] drsuapi_DsAddEntryErrorInfoX error6; - [case(7)] drsuapi_DsAddEntryErrorInfoX error7; +*/ [case(4)] drsuapi_DsAddEntryErrorInfoX errorX; + [case(5)] drsuapi_DsAddEntryErrorInfoX errorX; + [case(6)] drsuapi_DsAddEntryErrorInfoX errorX; + [case(7)] drsuapi_DsAddEntryErrorInfoX errorX; } drsuapi_DsAddEntryErrorInfo; typedef struct { diff --git a/source4/librpc/ndr/libndr.h b/source4/librpc/ndr/libndr.h index fb151e4120..eb0c970208 100644 --- a/source4/librpc/ndr/libndr.h +++ b/source4/librpc/ndr/libndr.h @@ -299,5 +299,6 @@ void ndr_print_dom_sid2(struct ndr_print *ndr, const char *name, const struct do NTSTATUS ndr_push_dom_sid28(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *sid); NTSTATUS ndr_pull_dom_sid28(struct ndr_pull *ndr, int ndr_flags, struct dom_sid *sid); void ndr_print_dom_sid28(struct ndr_print *ndr, const char *name, const struct dom_sid *sid); +size_t ndr_size_dom_sid28(const struct dom_sid *sid, int flags); #endif /* __LIBNDR_H__ */ diff --git a/source4/librpc/ndr/ndr_sec_helper.c b/source4/librpc/ndr/ndr_sec_helper.c index dd4435daf1..8059c0f4ea 100644 --- a/source4/librpc/ndr/ndr_sec_helper.c +++ b/source4/librpc/ndr/ndr_sec_helper.c @@ -34,6 +34,21 @@ size_t ndr_size_dom_sid(const struct dom_sid *sid, int flags) return 8 + 4*sid->num_auths; } +size_t ndr_size_dom_sid28(const struct dom_sid *sid, int flags) +{ + struct dom_sid zero_sid; + + if (!sid) return 0; + + ZERO_STRUCT(zero_sid); + + if (memcmp(&zero_sid, sid, sizeof(zero_sid)) == 0) { + return 0; + } + + return 8 + 4*sid->num_auths; +} + /* return the wire size of a security_ace */ -- cgit