static void unbecomeDC_drsuapi_bind_recv(struct rpc_request *req) { struct libnet_UnbecomeDC_state *s = talloc_get_type(req->async.private_data, struct libnet_UnbecomeDC_state); struct composite_context *c = s->creq; c->status = dcerpc_ndr_request_recv(req); if (!composite_is_ok(c)) return; if (!W_ERROR_IS_OK(s->drsuapi.bind_r.out.result)) { composite_error(c, werror_to_ntstatus(s->drsuapi.bind_r.out.result)); return; } ZERO_STRUCT(s->drsuapi.remote_info28); if (s->drsuapi.bind_r.out.bind_info) { switch (s->drsuapi.bind_r.out.bind_info->length) { case 24: { struct drsuapi_DsBindInfo24 *info24; info24 = &s->drsuapi.bind_r.out.bind_info->info.info24; s->drsuapi.remote_info28.supported_extensions = info24->supported_extensions; s->drsuapi.remote_info28.site_guid = info24->site_guid; s->drsuapi.remote_info28.pid = info24->pid; s->drsuapi.remote_info28.repl_epoch = 0; break; } case 48: { struct drsuapi_DsBindInfo48 *info48; info48 = &s->drsuapi.bind_r.out.bind_info->info.info48; s->drsuapi.remote_info28.supported_extensions = info48->supported_extensions; s->drsuapi.remote_info28.site_guid = info48->site_guid; s->drsuapi.remote_info28.pid = info48->pid; s->drsuapi.remote_info28.repl_epoch = info48->repl_epoch; break; } case 28: s->drsuapi.remote_info28 = s->drsuapi.bind_r.out.bind_info->info.info28; break; } } unbecomeDC_drsuapi_remove_ds_server_send(s); }
static void unbecomeDC_drsuapi_bind_recv(struct tevent_req *subreq) { struct libnet_UnbecomeDC_state *s = tevent_req_callback_data(subreq, struct libnet_UnbecomeDC_state); struct composite_context *c = s->creq; c->status = dcerpc_drsuapi_DsBind_r_recv(subreq, s); TALLOC_FREE(subreq); if (!composite_is_ok(c)) return; if (!W_ERROR_IS_OK(s->drsuapi.bind_r.out.result)) { composite_error(c, werror_to_ntstatus(s->drsuapi.bind_r.out.result)); return; } ZERO_STRUCT(s->drsuapi.remote_info28); if (s->drsuapi.bind_r.out.bind_info) { switch (s->drsuapi.bind_r.out.bind_info->length) { case 24: { struct drsuapi_DsBindInfo24 *info24; info24 = &s->drsuapi.bind_r.out.bind_info->info.info24; s->drsuapi.remote_info28.supported_extensions = info24->supported_extensions; s->drsuapi.remote_info28.site_guid = info24->site_guid; s->drsuapi.remote_info28.pid = info24->pid; s->drsuapi.remote_info28.repl_epoch = 0; break; } case 48: { struct drsuapi_DsBindInfo48 *info48; info48 = &s->drsuapi.bind_r.out.bind_info->info.info48; s->drsuapi.remote_info28.supported_extensions = info48->supported_extensions; s->drsuapi.remote_info28.site_guid = info48->site_guid; s->drsuapi.remote_info28.pid = info48->pid; s->drsuapi.remote_info28.repl_epoch = info48->repl_epoch; break; } 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); }