44
44
static void cmd_list_trustdoms_recv_domain(struct composite_context *ctx);
45
45
static void cmd_list_trustdoms_recv_lsa(struct composite_context *ctx);
46
static void cmd_list_trustdoms_recv_doms(struct rpc_request *req);
46
static void cmd_list_trustdoms_recv_doms(struct tevent_req *subreq);
48
48
struct composite_context *wb_cmd_list_trustdoms_send(TALLOC_CTX *mem_ctx,
49
49
struct wbsrv_service *service)
94
94
struct cmd_list_trustdom_state *state =
95
95
talloc_get_type(ctx->async.private_data,
96
96
struct cmd_list_trustdom_state);
97
struct rpc_request *req;
97
struct tevent_req *subreq;
99
99
state->ctx->status = wb_init_lsa_recv(ctx, state,
100
100
&state->lsa_pipe,
114
114
state->r.out.resume_handle = &state->resume_handle;
115
115
state->r.out.domains = &state->domainlist;
117
req = dcerpc_lsa_EnumTrustDom_send(state->lsa_pipe, state, &state->r);
118
composite_continue_rpc(state->ctx, req, cmd_list_trustdoms_recv_doms,
117
subreq = dcerpc_lsa_EnumTrustDom_r_send(state,
118
state->ctx->event_ctx,
119
state->lsa_pipe->binding_handle,
121
if (composite_nomem(subreq, state->ctx)) return;
122
tevent_req_set_callback(subreq, cmd_list_trustdoms_recv_doms, state);
122
static void cmd_list_trustdoms_recv_doms(struct rpc_request *req)
125
static void cmd_list_trustdoms_recv_doms(struct tevent_req *subreq)
124
127
struct cmd_list_trustdom_state *state =
125
talloc_get_type(req->async.private_data,
126
struct cmd_list_trustdom_state);
127
int i, old_num_domains;
128
tevent_req_callback_data(subreq,
129
struct cmd_list_trustdom_state);
130
uint32_t i, old_num_domains;
129
state->ctx->status = dcerpc_ndr_request_recv(req);
132
state->ctx->status = dcerpc_lsa_EnumTrustDom_r_recv(subreq, state);
130
134
if (!composite_is_ok(state->ctx)) return;
131
135
state->ctx->status = state->r.out.result;
147
151
composite_nomem(state->domains, state->ctx)) return;
149
153
for (i=0; i<state->r.out.domains->count; i++) {
150
int j = i+old_num_domains;
154
uint32_t j = i+old_num_domains;
151
155
state->domains[j] = talloc(state->domains,
152
156
struct wb_dom_info);
153
157
if (composite_nomem(state->domains[i], state->ctx)) return;
173
177
state->r.out.resume_handle = &state->resume_handle;
174
178
state->r.out.domains = &state->domainlist;
176
req = dcerpc_lsa_EnumTrustDom_send(state->lsa_pipe, state, &state->r);
177
composite_continue_rpc(state->ctx, req, cmd_list_trustdoms_recv_doms,
180
subreq = dcerpc_lsa_EnumTrustDom_r_send(state,
181
state->ctx->event_ctx,
182
state->lsa_pipe->binding_handle,
184
if (composite_nomem(subreq, state->ctx)) return;
185
tevent_req_set_callback(subreq, cmd_list_trustdoms_recv_doms, state);
181
188
NTSTATUS wb_cmd_list_trustdoms_recv(struct composite_context *ctx,
182
189
TALLOC_CTX *mem_ctx,
190
uint32_t *num_domains,
184
191
struct wb_dom_info ***domains)
186
193
NTSTATUS status = composite_wait(ctx);