summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2006-12-07 15:24:23 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:28:57 -0500
commita28b67c7337b4b2b753d6bfad1ed16af04744870 (patch)
treee966759048aa6c358da23b16546b9ee275ab65bb
parent0df2c30821e3a052342c0baf29e83dd471644d28 (diff)
downloadsamba-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)
-rw-r--r--source4/librpc/idl/drsuapi.idl12
-rw-r--r--source4/librpc/ndr/libndr.h1
-rw-r--r--source4/librpc/ndr/ndr_sec_helper.c15
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
*/