diff options
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 */ |