The Samba-Bugzilla – Attachment 10543 Details for
Bug 11006
'domain join' fails - 'drsuapi.DsBindInfoFallBack' has no attribute 'supported_extensions'
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patches for v4-0-test
tmp40.diff.txt (text/plain), 29.52 KB, created by
Stefan Metzmacher
on 2014-12-15 09:33:17 UTC
(
hide
)
Description:
Patches for v4-0-test
Filename:
MIME Type:
Creator:
Stefan Metzmacher
Created:
2014-12-15 09:33:17 UTC
Size:
29.52 KB
patch
obsolete
>From 75ce1305b521890ab41792db8fae2b6e01be2d5f Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Mon, 23 Sep 2013 08:05:41 +0200 >Subject: [PATCH 1/6] drsuapi.idl: change the range for attribute values to > 26214400 bytes. > >This matches the IDL from [MS-DRSR]. > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >Reviewed-by: Matthieu Patou <mat@matws.net> >(cherry picked from commit 51d8eba8417c58c2ade30d58a838441008209542) >--- > librpc/idl/drsuapi.idl | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > >diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl >index ed85205..063d135 100644 >--- a/librpc/idl/drsuapi.idl >+++ b/librpc/idl/drsuapi.idl >@@ -546,7 +546,7 @@ interface drsuapi > > /* Generic DATA_BLOB values */ > typedef struct { >- [range(0,10485760),value(ndr_size_DATA_BLOB(0,blob,0))] uint32 __ndr_size; >+ [range(0,26214400),value(ndr_size_DATA_BLOB(0,blob,0))] uint32 __ndr_size; > DATA_BLOB *blob; > } drsuapi_DsAttributeValue; > >-- >1.9.1 > > >From 5827c1db399bee722246a2cfd76c32dd4549c317 Mon Sep 17 00:00:00 2001 >From: Matthieu Patou <mat@matws.net> >Date: Sun, 20 Oct 2013 20:16:27 -0700 >Subject: [PATCH 2/6] librpc-idl: replace int32 by the enumeration as it's the > type that we use in union's switch drsuapi_DsGetDCInfoCtrLevels > >Signed-off-by: Matthieu Patou <mat@matws.net> >Signed-off-by: Stefan Metzmacher <metze@samba.org> >Reviewed-by: Stefan Metzmacher <metze@samba.org> >(cherry picked from commit 568bf16dfadb4bd3003ed18b19098a3d1473f2fe) >--- > librpc/idl/drsuapi.idl | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > >diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl >index 063d135..297db08 100644 >--- a/librpc/idl/drsuapi.idl >+++ b/librpc/idl/drsuapi.idl >@@ -1107,9 +1107,16 @@ interface drsuapi > > /*****************/ > /* Function 0x10 */ >+ typedef [v1_enum] enum { >+ DRSUAPI_DC_INFO_CTR_1 = 1, >+ DRSUAPI_DC_INFO_CTR_2 = 2, >+ DRSUAPI_DC_INFO_CTR_3 = 3, >+ DRSUAPI_DC_CONNECTION_CTR_01 = 0xFFFFFFFF >+ } drsuapi_DsGetDCInfoCtrLevels; >+ > typedef struct { > [charset(UTF16),string] uint16 *domain_name; /* netbios or dns */ >- int32 level; /* specifies the switch level for the request */ >+ drsuapi_DsGetDCInfoCtrLevels level; /* specifies the switch level for the request */ > } drsuapi_DsGetDCInfoRequest1; > > typedef [switch_type(int32)] union { >@@ -1204,14 +1211,7 @@ interface drsuapi > [size_is(count)] drsuapi_DsGetDCConnection01 *array; > } drsuapi_DsGetDCConnectionCtr01; > >- typedef [v1_enum] enum { >- DRSUAPI_DC_INFO_CTR_1 = 1, >- DRSUAPI_DC_INFO_CTR_2 = 2, >- DRSUAPI_DC_INFO_CTR_3 = 3, >- DRSUAPI_DC_CONNECTION_CTR_01 = -1 >- } drsuapi_DsGetDCInfoCtrLevels; >- >- typedef [switch_type(int32)] union { >+ typedef [switch_type(drsuapi_DsGetDCInfoCtrLevels)] union { > [case(DRSUAPI_DC_INFO_CTR_1)] drsuapi_DsGetDCInfoCtr1 ctr1; > [case(DRSUAPI_DC_INFO_CTR_2)] drsuapi_DsGetDCInfoCtr2 ctr2; > [case(DRSUAPI_DC_INFO_CTR_3)] drsuapi_DsGetDCInfoCtr3 ctr3; >@@ -1222,7 +1222,7 @@ interface drsuapi > [in] policy_handle *bind_handle, > [in] int32 level, > [in,ref,switch_is(level)] drsuapi_DsGetDCInfoRequest *req, >- [out,ref] int32 *level_out, >+ [out,ref] drsuapi_DsGetDCInfoCtrLevels *level_out, > [out,ref,switch_is(*level_out)] drsuapi_DsGetDCInfoCtr *ctr > ); > >-- >1.9.1 > > >From ebccdad1e2cb1175cd0227726c415188b5c882ec Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Mon, 21 Oct 2013 08:40:28 +0200 >Subject: [PATCH 3/6] librpc-idl: replace int32 by uint32 as the values are > always > 0 > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >Reviewed-by: Stefan Metzmacher <metze@samba.org> >(cherry picked from commit 1e2e421632c275f8cf7529935f72ef3639ddea14) >--- > librpc/idl/drsuapi.idl | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > >diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl >index 297db08..7e3d343 100644 >--- a/librpc/idl/drsuapi.idl >+++ b/librpc/idl/drsuapi.idl >@@ -1119,7 +1119,7 @@ interface drsuapi > drsuapi_DsGetDCInfoCtrLevels level; /* specifies the switch level for the request */ > } drsuapi_DsGetDCInfoRequest1; > >- typedef [switch_type(int32)] union { >+ typedef [switch_type(uint32)] union { > [case(1)] drsuapi_DsGetDCInfoRequest1 req1; > } drsuapi_DsGetDCInfoRequest; > >@@ -1220,7 +1220,7 @@ interface drsuapi > > WERROR drsuapi_DsGetDomainControllerInfo( > [in] policy_handle *bind_handle, >- [in] int32 level, >+ [in] uint32 level, > [in,ref,switch_is(level)] drsuapi_DsGetDCInfoRequest *req, > [out,ref] drsuapi_DsGetDCInfoCtrLevels *level_out, > [out,ref,switch_is(*level_out)] drsuapi_DsGetDCInfoCtr *ctr >-- >1.9.1 > > >From c0259e3e282cb6e0e573f7c596ef9b4135cad348 Mon Sep 17 00:00:00 2001 >From: Matthieu Patou <mat@matws.net> >Date: Sun, 20 Oct 2013 13:37:17 -0700 >Subject: [PATCH 4/6] librpc-idl: change the drsuapi_DsBindInfoCtr so that it > match what is on the wire both in NDR32 and NDR64. > >Previous implementation had a problem with NDR64 with uint32 and >uint3264 being in the wrong order > >Signed-off-by: Matthieu Patou <mat@matws.net> >Reviewed-by: Stefan Metzmacher <metze@samba.org> > >Autobuild-User(master): Stefan Metzmacher <metze@samba.org> >Autobuild-Date(master): Wed Oct 30 10:16:02 CET 2013 on sn-devel-104 > >(cherry picked from commit 8dc931bafca00c1c61a4366ffb6cfa72a98bb412) >--- > librpc/idl/drsuapi.idl | 57 ++++++++++++++--- > librpc/ndr/ndr_drsuapi.c | 156 +++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 204 insertions(+), 9 deletions(-) > >diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl >index 7e3d343..f1c6cd6 100644 >--- a/librpc/idl/drsuapi.idl >+++ b/librpc/idl/drsuapi.idl >@@ -115,14 +115,14 @@ interface drsuapi > } drsuapi_SupportedExtensionsExt; > > /* this is used by w2k */ >- typedef struct { >+ typedef [public] struct { > drsuapi_SupportedExtensions supported_extensions; > GUID site_guid; > uint32 pid; > } drsuapi_DsBindInfo24; > > /* this is used by w2k3 */ >- typedef struct { >+ typedef [public] struct { > drsuapi_SupportedExtensions supported_extensions; > GUID site_guid; > uint32 pid; >@@ -130,7 +130,7 @@ interface drsuapi > } drsuapi_DsBindInfo28; > > /* this is used by w2k8 */ >- typedef struct { >+ typedef [public] struct { > drsuapi_SupportedExtensions supported_extensions; > GUID site_guid; > uint32 pid; >@@ -139,15 +139,21 @@ interface drsuapi > GUID config_dn_guid; > } drsuapi_DsBindInfo48; > >- typedef struct { >+ typedef [public] struct { > [flag(NDR_REMAINING)] DATA_BLOB info; > } drsuapi_DsBindInfoFallBack; > >- typedef [nodiscriminant] union { >- [case(24)][subcontext(4)] drsuapi_DsBindInfo24 info24; >- [case(28)][subcontext(4)] drsuapi_DsBindInfo28 info28; >- [case(48)][subcontext(4)] drsuapi_DsBindInfo48 info48; >- [default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack; >+ typedef [nopull, nopush, noprint] [nodiscriminant] union { >+ [case(24)][subcontext(0), subcontext_size(24)] drsuapi_DsBindInfo24 info24; >+ [case(28)][subcontext(0), subcontext_size(28)] drsuapi_DsBindInfo28 info28; >+ [case(48)][subcontext(0), subcontext_size(48)] drsuapi_DsBindInfo48 info48; >+ /* >+ * The size for the defaut case is a bit arbitrary it in fact the value >+ * of the switch but we can't reference it. >+ * As we hand(un-)marshall this structure it has 0 impact and makes >+ * pidl happy for wireshark too >+ */ >+ [default][subcontext(0), subcontext_size(48)] drsuapi_DsBindInfoFallBack Fallback; > } drsuapi_DsBindInfo; > > /* the drsuapi_DsBindInfoCtr was this before >@@ -160,11 +166,44 @@ interface drsuapi > * so we're doing it here > */ > >+ /* >+ * MS-DRSR.pdf gives the following definition >+ typedef struct { >+ [range(1,10000)] DWORD cb; >+ [size_is(cb)] BYTE rgb[]; >+ } DRS_EXTENSIONS; >+ >+ But we use a subcontext which has a slighly different signification on how >+ data are laid out. >+ With the MS-DRSR definition we will have >+ size_is_cb cv rgb_array >+ with size_is_cb being a uint3264 and cv being a uint32 >+ >+ We used to have > typedef struct { > [range(1,10000)] uint32 length; > [switch_is(length)] drsuapi_DsBindInfo info; > } drsuapi_DsBindInfoCtr; > >+ typedef [nodiscriminant] union { >+ [case(24)][subcontext(4)] drsuapi_DsBindInfo24 info24; >+ [case(28)][subcontext(4)] drsuapi_DsBindInfo28 info28; >+ [case(48)][subcontext(4)] drsuapi_DsBindInfo48 info48; >+ [default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack; >+ } drsuapi_DsBindInfo; >+ >+ With this definition data is laid out this way: >+ length subcontext_size drsuapi_DsBindInfoxx >+ with length being a uint32 and subcontext_size being a uint3264 >+ >+ It has clearly an impact on the way things are aligned when using NDR64 >+ */ >+ typedef [flag(NDR_NOALIGN)] struct { >+ [range(1,10000)] uint3264 length; >+ [value(length)] uint32 __ndr_length; >+ [switch_is(length)] drsuapi_DsBindInfo info; >+ } drsuapi_DsBindInfoCtr; >+ > /* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work > * > * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04 >diff --git a/librpc/ndr/ndr_drsuapi.c b/librpc/ndr/ndr_drsuapi.c >index f7125e6..cef617b 100644 >--- a/librpc/ndr/ndr_drsuapi.c >+++ b/librpc/ndr/ndr_drsuapi.c >@@ -4,6 +4,7 @@ > routines for printing some linked list structs in DRSUAPI > > Copyright (C) Stefan (metze) Metzmacher 2005 >+ Copyright (C) Matthieu Patou 2013 > > 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 >@@ -406,3 +407,158 @@ _PUBLIC_ void ndr_print_drsuapi_DsAddEntry_AttrErrListItem_V1(struct ndr_print * > ndr_print_drsuapi_DsAddEntry_AttrErrListItem_V1(ndr, "next", r->next); > } > } >+ >+enum ndr_err_code ndr_push_drsuapi_DsBindInfo(struct ndr_push *ndr, int ndr_flags, const union drsuapi_DsBindInfo *r) >+{ >+ NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags); >+ if (ndr_flags & NDR_SCALARS) { >+ uint32_t level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_union_align(ndr, 4)); >+ switch (level) { >+ case 24: { >+ { >+ struct ndr_push *_ndr_info24; >+ NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info24, 0, 24)); >+ NDR_CHECK(ndr_push_drsuapi_DsBindInfo24(_ndr_info24, NDR_SCALARS, &r->info24)); >+ NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info24, 0, 24)); >+ } >+ break; } >+ >+ case 28: { >+ { >+ struct ndr_push *_ndr_info28; >+ NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info28, 0, 28)); >+ NDR_CHECK(ndr_push_drsuapi_DsBindInfo28(_ndr_info28, NDR_SCALARS, &r->info28)); >+ NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info28, 0, 28)); >+ } >+ break; } >+ >+ case 48: { >+ { >+ struct ndr_push *_ndr_info48; >+ NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info48, 0, 48)); >+ NDR_CHECK(ndr_push_drsuapi_DsBindInfo48(_ndr_info48, NDR_SCALARS, &r->info48)); >+ NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info48, 0, 48)); >+ } >+ break; } >+ >+ default: { >+ { >+ struct ndr_push *_ndr_Fallback; >+ NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_Fallback, 0, level)); >+ NDR_CHECK(ndr_push_drsuapi_DsBindInfoFallBack(_ndr_Fallback, NDR_SCALARS, &r->Fallback)); >+ NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_Fallback, 0, level)); >+ } >+ break; } >+ >+ } >+ } >+ if (ndr_flags & NDR_BUFFERS) { >+ uint32_t level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 24: >+ break; >+ >+ case 28: >+ break; >+ >+ case 48: >+ break; >+ >+ default: >+ break; >+ >+ } >+ } >+ return NDR_ERR_SUCCESS; >+} >+ >+enum ndr_err_code ndr_pull_drsuapi_DsBindInfo(struct ndr_pull *ndr, int ndr_flags, union drsuapi_DsBindInfo *r) >+{ >+ uint32_t level; >+ level = ndr_pull_get_switch_value(ndr, r); >+ NDR_PULL_CHECK_FLAGS(ndr, ndr_flags); >+ if (ndr_flags & NDR_SCALARS) { >+ NDR_CHECK(ndr_pull_union_align(ndr, 4)); >+ switch (level) { >+ case 24: { >+ { >+ struct ndr_pull *_ndr_info24; >+ NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_info24, 0, 24)); >+ NDR_CHECK(ndr_pull_drsuapi_DsBindInfo24(_ndr_info24, NDR_SCALARS, &r->info24)); >+ NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_info24, 0, 24)); >+ } >+ break; } >+ >+ case 28: { >+ { >+ struct ndr_pull *_ndr_info28; >+ NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_info28, 0, 28)); >+ NDR_CHECK(ndr_pull_drsuapi_DsBindInfo28(_ndr_info28, NDR_SCALARS, &r->info28)); >+ NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_info28, 0, 28)); >+ } >+ break; } >+ >+ case 48: { >+ { >+ struct ndr_pull *_ndr_info48; >+ NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_info48, 0, 48)); >+ NDR_CHECK(ndr_pull_drsuapi_DsBindInfo48(_ndr_info48, NDR_SCALARS, &r->info48)); >+ NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_info48, 0, 48)); >+ } >+ break; } >+ >+ default: { >+ { >+ struct ndr_pull *_ndr_Fallback; >+ NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_Fallback, 0, level)); >+ NDR_CHECK(ndr_pull_drsuapi_DsBindInfoFallBack(_ndr_Fallback, NDR_SCALARS, &r->Fallback)); >+ NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_Fallback, 0, level)); >+ } >+ break; } >+ >+ } >+ } >+ if (ndr_flags & NDR_BUFFERS) { >+ switch (level) { >+ case 24: >+ break; >+ >+ case 28: >+ break; >+ >+ case 48: >+ break; >+ >+ default: >+ break; >+ >+ } >+ } >+ return NDR_ERR_SUCCESS; >+} >+ >+_PUBLIC_ void ndr_print_drsuapi_DsBindInfo(struct ndr_print *ndr, const char *name, const union drsuapi_DsBindInfo *r) >+{ >+ uint32_t level; >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "drsuapi_DsBindInfo"); >+ switch (level) { >+ case 24: >+ ndr_print_drsuapi_DsBindInfo24(ndr, "info24", &r->info24); >+ break; >+ >+ case 28: >+ ndr_print_drsuapi_DsBindInfo28(ndr, "info28", &r->info28); >+ break; >+ >+ case 48: >+ ndr_print_drsuapi_DsBindInfo48(ndr, "info48", &r->info48); >+ break; >+ >+ default: >+ ndr_print_drsuapi_DsBindInfoFallBack(ndr, "Fallback", &r->Fallback); >+ break; >+ >+ } >+} >-- >1.9.1 > > >From 4aa30929961c98e4227b7cdc9c48bfe8147c4063 Mon Sep 17 00:00:00 2001 >From: Samuel Cabrero <scabrero@zentyal.com> >Date: Fri, 4 Jul 2014 12:45:59 +0200 >Subject: [PATCH 5/6] idl:drsuapi: Manage all possible lengths of > drsuapi_DsBindInfo > >Signed-off-by: Samuel Cabrero <scabrero@zentyal.com> >Reviewed-by: Kamen Mazdrashki <kamenim@samba.org> >Reviewed-by: Andrew Bartlett <abartlet@samba.org> >Reviewed-by: Kamen Mazdrashki <kamenim@samba.org> >(cherry picked from commit d747372d28273542298f86530e715e8faaf907f2) >--- > librpc/idl/drsuapi.idl | 21 +++++++++++++++++++++ > source3/libnet/libnet_dssync.c | 21 ++++++++++++++++++++- > source3/rpcclient/cmd_drsuapi.c | 4 ++++ > source4/dsdb/repl/drepl_out_helpers.c | 27 ++++++++++++++++++++++++++- > source4/libnet/libnet_become_dc.c | 25 ++++++++++++++++++++++++- > source4/libnet/libnet_unbecome_dc.c | 25 ++++++++++++++++++++++++- > source4/torture/drs/rpc/dssync.c | 21 ++++++++++++++++++++- > source4/torture/drs/rpc/msds_intid.c | 21 ++++++++++++++++++++- > source4/torture/rpc/dsgetinfo.c | 21 ++++++++++++++++++++- > 9 files changed, 179 insertions(+), 7 deletions(-) > >diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl >index f1c6cd6..b78a865 100644 >--- a/librpc/idl/drsuapi.idl >+++ b/librpc/idl/drsuapi.idl >@@ -129,6 +129,14 @@ interface drsuapi > uint32 repl_epoch; > } drsuapi_DsBindInfo28; > >+ typedef [public] struct { >+ drsuapi_SupportedExtensions supported_extensions; >+ GUID site_guid; >+ uint32 pid; >+ uint32 repl_epoch; >+ drsuapi_SupportedExtensionsExt supported_extensions_ext; >+ } drsuapi_DsBindInfo32; >+ > /* this is used by w2k8 */ > typedef [public] struct { > drsuapi_SupportedExtensions supported_extensions; >@@ -139,6 +147,17 @@ interface drsuapi > GUID config_dn_guid; > } drsuapi_DsBindInfo48; > >+ /* this is used by w2k12 R2 [MS-DRSR] Section 5.39 */ >+ typedef [public] struct { >+ drsuapi_SupportedExtensions supported_extensions; >+ GUID site_guid; >+ uint32 pid; >+ uint32 repl_epoch; >+ drsuapi_SupportedExtensionsExt supported_extensions_ext; >+ GUID config_dn_guid; >+ drsuapi_SupportedExtensionsExt supported_capabilities_ext; >+ } drsuapi_DsBindInfo52; >+ > typedef [public] struct { > [flag(NDR_REMAINING)] DATA_BLOB info; > } drsuapi_DsBindInfoFallBack; >@@ -146,7 +165,9 @@ interface drsuapi > typedef [nopull, nopush, noprint] [nodiscriminant] union { > [case(24)][subcontext(0), subcontext_size(24)] drsuapi_DsBindInfo24 info24; > [case(28)][subcontext(0), subcontext_size(28)] drsuapi_DsBindInfo28 info28; >+ [case(32)][subcontext(0), subcontext_size(32)] drsuapi_DsBindInfo32 info32; > [case(48)][subcontext(0), subcontext_size(48)] drsuapi_DsBindInfo48 info48; >+ [case(52)][subcontext(0), subcontext_size(52)] drsuapi_DsBindInfo52 info52; > /* > * The size for the defaut case is a bit arbitrary it in fact the value > * of the switch but we can't reference it. >diff --git a/source3/libnet/libnet_dssync.c b/source3/libnet/libnet_dssync.c >index a843106..94f0628 100644 >--- a/source3/libnet/libnet_dssync.c >+++ b/source3/libnet/libnet_dssync.c >@@ -195,9 +195,19 @@ static NTSTATUS libnet_dssync_bind(TALLOC_CTX *mem_ctx, > ctx->remote_info28.repl_epoch = 0; > break; > } >- case 28: >+ case 28: { > ctx->remote_info28 = bind_info.info.info28; > break; >+ } >+ case 32: { >+ struct drsuapi_DsBindInfo32 *info32; >+ info32 = &bind_info.info.info32; >+ ctx->remote_info28.site_guid = info32->site_guid; >+ ctx->remote_info28.supported_extensions = info32->supported_extensions; >+ ctx->remote_info28.pid = info32->pid; >+ ctx->remote_info28.repl_epoch = info32->repl_epoch; >+ break; >+ } > case 48: { > struct drsuapi_DsBindInfo48 *info48; > info48 = &bind_info.info.info48; >@@ -207,6 +217,15 @@ static NTSTATUS libnet_dssync_bind(TALLOC_CTX *mem_ctx, > ctx->remote_info28.repl_epoch = info48->repl_epoch; > break; > } >+ case 52: { >+ struct drsuapi_DsBindInfo52 *info52; >+ info52 = &bind_info.info.info52; >+ ctx->remote_info28.site_guid = info52->site_guid; >+ ctx->remote_info28.supported_extensions = info52->supported_extensions; >+ ctx->remote_info28.pid = info52->pid; >+ ctx->remote_info28.repl_epoch = info52->repl_epoch; >+ break; >+ } > default: > DEBUG(1, ("Warning: invalid info length in bind info: %d\n", > bind_info.length)); >diff --git a/source3/rpcclient/cmd_drsuapi.c b/source3/rpcclient/cmd_drsuapi.c >index 0c281cf..6a1fac7 100644 >--- a/source3/rpcclient/cmd_drsuapi.c >+++ b/source3/rpcclient/cmd_drsuapi.c >@@ -420,8 +420,12 @@ static WERROR cmd_drsuapi_getncchanges(struct rpc_pipe_client *cli, > supported_extensions = bind_info.info.info24.supported_extensions; > } else if (bind_info.length == 28) { > supported_extensions = bind_info.info.info28.supported_extensions; >+ } else if (bind_info.length == 32) { >+ supported_extensions = bind_info.info.info32.supported_extensions; > } else if (bind_info.length == 48) { > supported_extensions = bind_info.info.info48.supported_extensions; >+ } else if (bind_info.length == 52) { >+ supported_extensions = bind_info.info.info52.supported_extensions; > } > > if (!nc_dn) { >diff --git a/source4/dsdb/repl/drepl_out_helpers.c b/source4/dsdb/repl/drepl_out_helpers.c >index 57205a8..df19e8f 100644 >--- a/source4/dsdb/repl/drepl_out_helpers.c >+++ b/source4/dsdb/repl/drepl_out_helpers.c >@@ -183,10 +183,35 @@ static void dreplsrv_out_drsuapi_bind_done(struct tevent_req *subreq) > info28->repl_epoch = info48->repl_epoch; > break; > } >- case 28: >+ case 28: { > *info28 = state->bind_r.out.bind_info->info.info28; > break; > } >+ case 32: { >+ struct drsuapi_DsBindInfo32 *info32; >+ info32 = &state->bind_r.out.bind_info->info.info32; >+ >+ info28->supported_extensions = info32->supported_extensions; >+ info28->site_guid = info32->site_guid; >+ info28->pid = info32->pid; >+ info28->repl_epoch = info32->repl_epoch; >+ break; >+ } >+ case 52: { >+ struct drsuapi_DsBindInfo52 *info52; >+ info52 = &state->bind_r.out.bind_info->info.info52; >+ >+ info28->supported_extensions = info52->supported_extensions; >+ info28->site_guid = info52->site_guid; >+ info28->pid = info52->pid; >+ info28->repl_epoch = info52->repl_epoch; >+ break; >+ } >+ default: >+ DEBUG(1, ("Warning: invalid info length in bind info: %d\n", >+ state->bind_r.out.bind_info->length)); >+ break; >+ } > } > > tevent_req_done(req); >diff --git a/source4/libnet/libnet_become_dc.c b/source4/libnet/libnet_become_dc.c >index 3e4c7f8..6838794 100644 >--- a/source4/libnet/libnet_become_dc.c >+++ b/source4/libnet/libnet_become_dc.c >@@ -1708,10 +1708,33 @@ static WERROR becomeDC_drsuapi_bind_recv(struct libnet_BecomeDC_state *s, > drsuapi->remote_info28.repl_epoch = info48->repl_epoch; > break; > } >- case 28: >+ case 28: { > drsuapi->remote_info28 = drsuapi->bind_r.out.bind_info->info.info28; > break; > } >+ case 32: { >+ struct drsuapi_DsBindInfo32 *info32; >+ info32 = &drsuapi->bind_r.out.bind_info->info.info32; >+ drsuapi->remote_info28.supported_extensions = info32->supported_extensions; >+ drsuapi->remote_info28.site_guid = info32->site_guid; >+ drsuapi->remote_info28.pid = info32->pid; >+ drsuapi->remote_info28.repl_epoch = info32->repl_epoch; >+ break; >+ } >+ case 52: { >+ struct drsuapi_DsBindInfo52 *info52; >+ info52 = &drsuapi->bind_r.out.bind_info->info.info52; >+ drsuapi->remote_info28.supported_extensions = info52->supported_extensions; >+ drsuapi->remote_info28.site_guid = info52->site_guid; >+ drsuapi->remote_info28.pid = info52->pid; >+ drsuapi->remote_info28.repl_epoch = info52->repl_epoch; >+ break; >+ } >+ default: >+ DEBUG(1, ("Warning: invalid info length in bind info: %d\n", >+ drsuapi->bind_r.out.bind_info->length)); >+ break; >+ } > } > > return WERR_OK; >diff --git a/source4/libnet/libnet_unbecome_dc.c b/source4/libnet/libnet_unbecome_dc.c >index a46d143..a830d3f 100644 >--- a/source4/libnet/libnet_unbecome_dc.c >+++ b/source4/libnet/libnet_unbecome_dc.c >@@ -644,10 +644,33 @@ static void unbecomeDC_drsuapi_bind_recv(struct tevent_req *subreq) > s->drsuapi.remote_info28.repl_epoch = info48->repl_epoch; > break; > } >- case 28: >+ case 28: { > s->drsuapi.remote_info28 = s->drsuapi.bind_r.out.bind_info->info.info28; > break; > } >+ case 32: { >+ struct drsuapi_DsBindInfo32 *info32; >+ info32 = &s->drsuapi.bind_r.out.bind_info->info.info32; >+ s->drsuapi.remote_info28.supported_extensions = info32->supported_extensions; >+ s->drsuapi.remote_info28.site_guid = info32->site_guid; >+ s->drsuapi.remote_info28.pid = info32->pid; >+ s->drsuapi.remote_info28.repl_epoch = info32->repl_epoch; >+ break; >+ } >+ case 52: { >+ struct drsuapi_DsBindInfo52 *info52; >+ info52 = &s->drsuapi.bind_r.out.bind_info->info.info52; >+ s->drsuapi.remote_info28.supported_extensions = info52->supported_extensions; >+ s->drsuapi.remote_info28.site_guid = info52->site_guid; >+ s->drsuapi.remote_info28.pid = info52->pid; >+ s->drsuapi.remote_info28.repl_epoch = info52->repl_epoch; >+ break; >+ } >+ default: >+ DEBUG(1, ("Warning: invalid info length in bind info: %d\n", >+ s->drsuapi.bind_r.out.bind_info->length)); >+ break; >+ } > } > > unbecomeDC_drsuapi_remove_ds_server_send(s); >diff --git a/source4/torture/drs/rpc/dssync.c b/source4/torture/drs/rpc/dssync.c >index f6cc0f1..525c9f0 100644 >--- a/source4/torture/drs/rpc/dssync.c >+++ b/source4/torture/drs/rpc/dssync.c >@@ -238,9 +238,28 @@ static bool _test_DsBind(struct torture_context *tctx, > b->peer_bind_info28.repl_epoch = info48->repl_epoch; > break; > } >- case 28: >+ case 28: { > b->peer_bind_info28 = b->req.out.bind_info->info.info28; > break; >+ } >+ case 32: { >+ struct drsuapi_DsBindInfo32 *info32; >+ info32 = &b->req.out.bind_info->info.info32; >+ b->peer_bind_info28.supported_extensions= info32->supported_extensions; >+ b->peer_bind_info28.site_guid = info32->site_guid; >+ b->peer_bind_info28.pid = info32->pid; >+ b->peer_bind_info28.repl_epoch = info32->repl_epoch; >+ break; >+ } >+ case 52: { >+ struct drsuapi_DsBindInfo52 *info52; >+ info52 = &b->req.out.bind_info->info.info52; >+ b->peer_bind_info28.supported_extensions= info52->supported_extensions; >+ b->peer_bind_info28.site_guid = info52->site_guid; >+ b->peer_bind_info28.pid = info52->pid; >+ b->peer_bind_info28.repl_epoch = info52->repl_epoch; >+ break; >+ } > default: > printf("DsBind - warning: unknown BindInfo length: %u\n", > b->req.out.bind_info->length); >diff --git a/source4/torture/drs/rpc/msds_intid.c b/source4/torture/drs/rpc/msds_intid.c >index c866c21..a74f52b 100644 >--- a/source4/torture/drs/rpc/msds_intid.c >+++ b/source4/torture/drs/rpc/msds_intid.c >@@ -237,9 +237,28 @@ static bool _test_DsaBind(struct torture_context *tctx, > bi->srv_info48.repl_epoch = info28->repl_epoch; > break; > } >- case 48: >+ case 48: { > bi->srv_info48 = r.out.bind_info->info.info48; > break; >+ } >+ case 32: { >+ struct drsuapi_DsBindInfo32 *info32; >+ info32 = &r.out.bind_info->info.info32; >+ bi->srv_info48.supported_extensions = info32->supported_extensions; >+ bi->srv_info48.site_guid = info32->site_guid; >+ bi->srv_info48.pid = info32->pid; >+ bi->srv_info48.repl_epoch = info32->repl_epoch; >+ break; >+ } >+ case 52: { >+ struct drsuapi_DsBindInfo52 *info52; >+ info52 = &r.out.bind_info->info.info52; >+ bi->srv_info48.supported_extensions = info52->supported_extensions; >+ bi->srv_info48.site_guid = info52->site_guid; >+ bi->srv_info48.pid = info52->pid; >+ bi->srv_info48.repl_epoch = info52->repl_epoch; >+ break; >+ } > default: > torture_result(tctx, TORTURE_FAIL, > "DsBind: unknown BindInfo length: %u", >diff --git a/source4/torture/rpc/dsgetinfo.c b/source4/torture/rpc/dsgetinfo.c >index a0360e8..179b010 100644 >--- a/source4/torture/rpc/dsgetinfo.c >+++ b/source4/torture/rpc/dsgetinfo.c >@@ -200,9 +200,28 @@ static bool _test_DsBind(struct torture_context *tctx, > b->peer_bind_info28.repl_epoch = info48->repl_epoch; > break; > } >- case 28: >+ case 28: { > b->peer_bind_info28 = b->req.out.bind_info->info.info28; > break; >+ } >+ case 32: { >+ struct drsuapi_DsBindInfo32 *info32; >+ info32 = &b->req.out.bind_info->info.info32; >+ b->peer_bind_info28.supported_extensions= info32->supported_extensions; >+ b->peer_bind_info28.site_guid = info32->site_guid; >+ b->peer_bind_info28.pid = info32->pid; >+ b->peer_bind_info28.repl_epoch = info32->repl_epoch; >+ break; >+ } >+ case 52: { >+ struct drsuapi_DsBindInfo52 *info52; >+ info52 = &b->req.out.bind_info->info.info52; >+ b->peer_bind_info28.supported_extensions= info52->supported_extensions; >+ b->peer_bind_info28.site_guid = info52->site_guid; >+ b->peer_bind_info28.pid = info52->pid; >+ b->peer_bind_info28.repl_epoch = info52->repl_epoch; >+ break; >+ } > default: > printf("DsBind - warning: unknown BindInfo length: %u\n", > b->req.out.bind_info->length); >-- >1.9.1 > > >From 36082148af4f009840439230d12c8c749a62a0e7 Mon Sep 17 00:00:00 2001 >From: Matthieu Patou <mat@matws.net> >Date: Tue, 23 Sep 2014 13:45:32 -0700 >Subject: [PATCH 6/6] librpc/ndr_drsuapi: Allow ndrdump to dump dsinfo52 blobs > >Change-Id: I6968b25c67587296b928b2193a9d48093c69c01a >Signed-off-by: Matthieu Patou <mat@matws.net> >Reviewed-by: Stefan Metzmacher <metze@samba.org> >Reviewed-by: Andrew Bartlett <abartlet@samba.org> >(cherry picked from commit 1ac96a416d7d6db2476f56129166fd9e018e7306) >--- > librpc/ndr/ndr_drsuapi.c | 34 ++++++++++++++++++++++++++++++++++ > 1 file changed, 34 insertions(+) > >diff --git a/librpc/ndr/ndr_drsuapi.c b/librpc/ndr/ndr_drsuapi.c >index cef617b..45d3ac09 100644 >--- a/librpc/ndr/ndr_drsuapi.c >+++ b/librpc/ndr/ndr_drsuapi.c >@@ -410,6 +410,8 @@ _PUBLIC_ void ndr_print_drsuapi_DsAddEntry_AttrErrListItem_V1(struct ndr_print * > > enum ndr_err_code ndr_push_drsuapi_DsBindInfo(struct ndr_push *ndr, int ndr_flags, const union drsuapi_DsBindInfo *r) > { >+ uint32_t _flags_save = ndr->flags; >+ ndr->flags = ndr->flags & ~LIBNDR_FLAG_NDR64; > NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags); > if (ndr_flags & NDR_SCALARS) { > uint32_t level = ndr_push_get_switch_value(ndr, r); >@@ -442,6 +444,15 @@ enum ndr_err_code ndr_push_drsuapi_DsBindInfo(struct ndr_push *ndr, int ndr_flag > } > break; } > >+ case 52: { >+ { >+ struct ndr_push *_ndr_info52; >+ NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info52, 0, 52)); >+ NDR_CHECK(ndr_push_drsuapi_DsBindInfo52(_ndr_info52, NDR_SCALARS, &r->info52)); >+ NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info52, 0, 52)); >+ } >+ break; } >+ > default: { > { > struct ndr_push *_ndr_Fallback; >@@ -465,17 +476,23 @@ enum ndr_err_code ndr_push_drsuapi_DsBindInfo(struct ndr_push *ndr, int ndr_flag > case 48: > break; > >+ case 52: >+ break; >+ > default: > break; > > } > } >+ ndr->flags = _flags_save; > return NDR_ERR_SUCCESS; > } > > enum ndr_err_code ndr_pull_drsuapi_DsBindInfo(struct ndr_pull *ndr, int ndr_flags, union drsuapi_DsBindInfo *r) > { > uint32_t level; >+ uint32_t _flags_save = ndr->flags; >+ ndr->flags = ndr->flags & ~LIBNDR_FLAG_NDR64; > level = ndr_pull_get_switch_value(ndr, r); > NDR_PULL_CHECK_FLAGS(ndr, ndr_flags); > if (ndr_flags & NDR_SCALARS) { >@@ -508,6 +525,15 @@ enum ndr_err_code ndr_pull_drsuapi_DsBindInfo(struct ndr_pull *ndr, int ndr_flag > } > break; } > >+ case 52: { >+ { >+ struct ndr_pull *_ndr_info52; >+ NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_info52, 0, 52)); >+ NDR_CHECK(ndr_pull_drsuapi_DsBindInfo52(_ndr_info52, NDR_SCALARS, &r->info52)); >+ NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_info52, 0, 52)); >+ } >+ break; } >+ > default: { > { > struct ndr_pull *_ndr_Fallback; >@@ -530,11 +556,15 @@ enum ndr_err_code ndr_pull_drsuapi_DsBindInfo(struct ndr_pull *ndr, int ndr_flag > case 48: > break; > >+ case 52: >+ break; >+ > default: > break; > > } > } >+ ndr->flags = _flags_save; > return NDR_ERR_SUCCESS; > } > >@@ -556,6 +586,10 @@ _PUBLIC_ void ndr_print_drsuapi_DsBindInfo(struct ndr_print *ndr, const char *na > ndr_print_drsuapi_DsBindInfo48(ndr, "info48", &r->info48); > break; > >+ case 52: >+ ndr_print_drsuapi_DsBindInfo52(ndr, "info52", &r->info52); >+ break; >+ > default: > ndr_print_drsuapi_DsBindInfoFallBack(ndr, "Fallback", &r->Fallback); > break; >-- >1.9.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
metze
:
review?
(
abartlet
)
Actions:
View
Attachments on
bug 11006
:
10532
|
10542
| 10543