From 0f51ae83f09fa90362cae12a37ca4debc35f8491 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 19 Oct 2005 13:45:44 +0000 Subject: r11181: Implement wbinfo -s and wbinfo --user-sids. The patch is so large because --user-sids required the extension to trusted domains. Implement "winbind sealed pipes" parameter for debugging purposes. Volker (This used to be commit 3821a17bdb68b2f1389b5a150502c057d28569d2) --- source4/winbind/wb_cmd_userdomgroups.c | 72 ++++++++-------------------------- 1 file changed, 17 insertions(+), 55 deletions(-) (limited to 'source4/winbind/wb_cmd_userdomgroups.c') diff --git a/source4/winbind/wb_cmd_userdomgroups.c b/source4/winbind/wb_cmd_userdomgroups.c index ea2db9877f9..b69547b3e46 100644 --- a/source4/winbind/wb_cmd_userdomgroups.c +++ b/source4/winbind/wb_cmd_userdomgroups.c @@ -29,70 +29,29 @@ struct cmd_userdomgroups_state { struct composite_context *ctx; - struct wbsrv_domain *domain; + struct dom_sid *dom_sid; uint32_t user_rid; int num_rids; uint32_t *rids; }; -static void composite_trigger_now(struct event_context *ev, - struct timed_event *te, - struct timeval t, void *ptr) -{ - struct composite_context *c = - talloc_get_type(ptr, struct composite_context); - if (NT_STATUS_IS_OK(c->status)) { - c->state = COMPOSITE_STATE_ERROR; - } else { - c->state = COMPOSITE_STATE_DONE; - } - - if (c->async.fn) { - c->async.fn(c); - } -} - - -static struct composite_context *userdomgroups_send_req(void *p); +static struct composite_context *userdomgroups_send_req(struct wbsrv_domain *domain, void *p); static NTSTATUS userdomgroups_recv_req(struct composite_context *ctx, void *p); -struct composite_context *wb_cmd_userdomgroups_send(struct wbsrv_call *call, +struct composite_context *wb_cmd_userdomgroups_send(struct wbsrv_service *service, const struct dom_sid *sid) { struct cmd_userdomgroups_state *state; - struct wbsrv_service *service = call->wbconn->listen_socket->service; state = talloc(NULL, struct cmd_userdomgroups_state); - state->domain = service->domains; - - if (dom_sid_in_domain(state->domain->sid, sid)) { - state->user_rid = sid->sub_auths[sid->num_auths-1]; - state->ctx = wb_queue_domain_send(state, state->domain, - call->event_ctx, - call->wbconn->conn->msg_ctx, - userdomgroups_send_req, - userdomgroups_recv_req, - state); - if (state->ctx == NULL) goto failed; - state->ctx->private_data = state; - return state->ctx; - } - state->ctx = talloc(state, struct composite_context); + state->user_rid = sid->sub_auths[sid->num_auths-1]; + state->ctx = wb_domain_request_send(state, service, sid, + userdomgroups_send_req, + userdomgroups_recv_req, + state); if (state->ctx == NULL) goto failed; - state->ctx->state = COMPOSITE_STATE_IN_PROGRESS; - state->ctx->async.fn = NULL; - state->ctx->event_ctx = call->event_ctx; - state->ctx->status = NT_STATUS_NO_SUCH_USER; state->ctx->private_data = state; - - /* Using composite_trigger_error here causes problems with the client - * socket. Linux 2.6.8 gives me a ECONNRESET on the next read after - * writing the reply when I don't wait the 100 milliseconds. */ - - event_add_timed(state->ctx->event_ctx, state->ctx, - timeval_current_ofs(0, 100000), - composite_trigger_now, state->ctx); return state->ctx; failed: @@ -100,13 +59,16 @@ struct composite_context *wb_cmd_userdomgroups_send(struct wbsrv_call *call, return NULL; } -static struct composite_context *userdomgroups_send_req(void *p) +static struct composite_context *userdomgroups_send_req(struct wbsrv_domain *domain, + void *p) { struct cmd_userdomgroups_state *state = talloc_get_type(p, struct cmd_userdomgroups_state); - return wb_samr_userdomgroups_send(state->domain->samr_pipe, - state->domain->domain_handle, + state->dom_sid = talloc_reference(state, domain->sid); + if (state->dom_sid == NULL) return NULL; + return wb_samr_userdomgroups_send(domain->samr_pipe, + domain->domain_handle, state->user_rid); } @@ -140,7 +102,7 @@ NTSTATUS wb_cmd_userdomgroups_recv(struct composite_context *c, } for (i=0; inum_rids; i++) { - (*sids)[i] = dom_sid_add_rid((*sids), state->domain->sid, + (*sids)[i] = dom_sid_add_rid((*sids), state->dom_sid, state->rids[i]); if ((*sids)[i] == NULL) { status = NT_STATUS_NO_MEMORY; @@ -153,12 +115,12 @@ done: return status; } -NTSTATUS wb_cmd_userdomgroups(struct wbsrv_call *call, +NTSTATUS wb_cmd_userdomgroups(struct wbsrv_service *service, const struct dom_sid *sid, TALLOC_CTX *mem_ctx, int *num_sids, struct dom_sid ***sids) { struct composite_context *c = - wb_cmd_userdomgroups_send(call, sid); + wb_cmd_userdomgroups_send(service, sid); return wb_cmd_userdomgroups_recv(c, mem_ctx, num_sids, sids); } -- cgit