diff options
author | Stefan Metzmacher <metze@samba.org> | 2006-12-07 15:24:23 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:28:57 -0500 |
commit | a28b67c7337b4b2b753d6bfad1ed16af04744870 (patch) | |
tree | e966759048aa6c358da23b16546b9ee275ab65bb /source4/librpc | |
parent | 0df2c30821e3a052342c0baf29e83dd471644d28 (diff) | |
download | samba-a28b67c7337b4b2b753d6bfad1ed16af04744870.tar.gz samba-a28b67c7337b4b2b753d6bfad1ed16af04744870.tar.bz2 samba-a28b67c7337b4b2b753d6bfad1ed16af04744870.zip |
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)
Diffstat (limited to 'source4/librpc')
-rw-r--r-- | source4/librpc/idl/drsuapi.idl | 12 | ||||
-rw-r--r-- | source4/librpc/ndr/libndr.h | 1 | ||||
-rw-r--r-- | source4/librpc/ndr/ndr_sec_helper.c | 15 |
3 files changed, 22 insertions, 6 deletions
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 */ |