summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source4/libnet/libnet_become_dc.c77
1 files changed, 36 insertions, 41 deletions
diff --git a/source4/libnet/libnet_become_dc.c b/source4/libnet/libnet_become_dc.c
index 13e69a84e30..746b2429ceb 100644
--- a/source4/libnet/libnet_become_dc.c
+++ b/source4/libnet/libnet_become_dc.c
@@ -981,6 +981,34 @@ static void becomeDC_drsuapi_bind_send(struct libnet_BecomeDC_state *s,
composite_continue_rpc(c, req, recv_fn, s);
}
+static WERROR becomeDC_drsuapi_bind_recv(struct libnet_BecomeDC_state *s,
+ struct becomeDC_drsuapi *drsuapi)
+{
+ if (!W_ERROR_IS_OK(drsuapi->bind_r.out.result)) {
+ return drsuapi->bind_r.out.result;
+ }
+
+ ZERO_STRUCT(drsuapi->remote_info28);
+ if (drsuapi->bind_r.out.bind_info) {
+ switch (drsuapi->bind_r.out.bind_info->length) {
+ case 24: {
+ struct drsuapi_DsBindInfo24 *info24;
+ info24 = &drsuapi->bind_r.out.bind_info->info.info24;
+ drsuapi->remote_info28.supported_extensions = info24->supported_extensions;
+ drsuapi->remote_info28.site_guid = info24->site_guid;
+ drsuapi->remote_info28.u1 = info24->u1;
+ drsuapi->remote_info28.repl_epoch = 0;
+ break;
+ }
+ case 28:
+ drsuapi->remote_info28 = drsuapi->bind_r.out.bind_info->info.info28;
+ break;
+ }
+ }
+
+ return WERR_OK;
+}
+
static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s);
static void becomeDC_drsuapi1_bind_recv(struct rpc_request *req)
@@ -988,33 +1016,17 @@ static void becomeDC_drsuapi1_bind_recv(struct rpc_request *req)
struct libnet_BecomeDC_state *s = talloc_get_type(req->async.private,
struct libnet_BecomeDC_state);
struct composite_context *c = s->creq;
+ WERROR status;
c->status = dcerpc_ndr_request_recv(req);
if (!composite_is_ok(c)) return;
- if (!W_ERROR_IS_OK(s->drsuapi1.bind_r.out.result)) {
- composite_error(c, werror_to_ntstatus(s->drsuapi1.bind_r.out.result));
+ status = becomeDC_drsuapi_bind_recv(s, &s->drsuapi1);
+ if (!W_ERROR_IS_OK(status)) {
+ composite_error(c, werror_to_ntstatus(status));
return;
}
- ZERO_STRUCT(s->drsuapi1.remote_info28);
- if (s->drsuapi1.bind_r.out.bind_info) {
- switch (s->drsuapi1.bind_r.out.bind_info->length) {
- case 24: {
- struct drsuapi_DsBindInfo24 *info24;
- info24 = &s->drsuapi1.bind_r.out.bind_info->info.info24;
- s->drsuapi1.remote_info28.supported_extensions = info24->supported_extensions;
- s->drsuapi1.remote_info28.site_guid = info24->site_guid;
- s->drsuapi1.remote_info28.u1 = info24->u1;
- s->drsuapi1.remote_info28.repl_epoch = 0;
- break;
- }
- case 28:
- s->drsuapi1.remote_info28 = s->drsuapi1.bind_r.out.bind_info->info.info28;
- break;
- }
- }
-
becomeDC_drsuapi1_add_entry_send(s);
}
@@ -1484,34 +1496,17 @@ static void becomeDC_drsuapi2_bind_recv(struct rpc_request *req)
struct libnet_BecomeDC_state *s = talloc_get_type(req->async.private,
struct libnet_BecomeDC_state);
struct composite_context *c = s->creq;
- struct composite_context *creq;
+ WERROR status;
c->status = dcerpc_ndr_request_recv(req);
if (!composite_is_ok(c)) return;
- if (!W_ERROR_IS_OK(s->drsuapi2.bind_r.out.result)) {
- composite_error(c, werror_to_ntstatus(s->drsuapi2.bind_r.out.result));
+ status = becomeDC_drsuapi_bind_recv(s, &s->drsuapi2);
+ if (!W_ERROR_IS_OK(status)) {
+ composite_error(c, werror_to_ntstatus(status));
return;
}
- ZERO_STRUCT(s->drsuapi2.remote_info28);
- if (s->drsuapi2.bind_r.out.bind_info) {
- switch (s->drsuapi2.bind_r.out.bind_info->length) {
- case 24: {
- struct drsuapi_DsBindInfo24 *info24;
- info24 = &s->drsuapi2.bind_r.out.bind_info->info.info24;
- s->drsuapi2.remote_info28.supported_extensions = info24->supported_extensions;
- s->drsuapi2.remote_info28.site_guid = info24->site_guid;
- s->drsuapi2.remote_info28.u1 = info24->u1;
- s->drsuapi2.remote_info28.repl_epoch = 0;
- break;
- }
- case 28:
- s->drsuapi2.remote_info28 = s->drsuapi2.bind_r.out.bind_info->info.info28;
- break;
- }
- }
-
/* this avoids the epmapper lookup on the 2nd connection */
s->drsuapi3.binding = s->drsuapi2.binding;