* @param p dce/rpc call pipe
* @param io arguments and results of the call
*/
+
struct composite_context *rpc_composite_useradd_send(struct dcerpc_pipe *p,
struct rpc_composite_useradd *io)
{
struct composite_context *c;
struct useradd_state *s;
- struct dom_sid *sid;
c = talloc_zero(p, struct composite_context);
if (c == NULL) goto failure;
/**
* Waits for and receives result of asynchronous useradd call
*
- * @param c composite context returned by asynchronous userinfo call
+ * @param c composite context returned by asynchronous useradd call
* @param mem_ctx memory context of the call
* @param io pointer to results (and arguments) of the call
* @return nt status code of execution
/*
- * Composite user del function
+ * Composite user delete function
*/
static void userdel_handler(struct rpc_request*);
};
+/**
+ * Stage 1: Lookup the user name and resolve it to rid
+ */
static NTSTATUS userdel_lookup(struct composite_context *c,
struct userdel_state *s)
{
}
+/**
+ * Stage 2: Open user account.
+ */
static NTSTATUS userdel_open(struct composite_context *c,
struct userdel_state *s)
{
- NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-
c->status = dcerpc_ndr_request_recv(s->req);
NT_STATUS_NOT_OK_RETURN(c->status);
}
+/**
+ * Stage 3: Delete user account
+ */
static NTSTATUS userdel_delete(struct composite_context *c,
struct userdel_state *s)
{
- NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
-
c->status = dcerpc_ndr_request_recv(s->req);
NT_STATUS_NOT_OK_RETURN(c->status);
}
+/**
+ * Event handler for asynchronous request. Handles transition through
+ * intermediate stages of the call.
+ *
+ * @param req rpc call context
+ */
static void userdel_handler(struct rpc_request *req)
{
struct composite_context *c = req->async.private;
}
+/**
+ * Sends asynchronous userdel request
+ *
+ * @param p dce/rpc call pipe
+ * @param io arguments and results of the call
+ */
+
struct composite_context *rpc_composite_userdel_send(struct dcerpc_pipe *p,
struct rpc_composite_userdel *io)
{
s = talloc_zero(c, struct userdel_state);
if (s == NULL) goto failure;
- s->pipe = p;
c->state = SMBCLI_REQUEST_SEND;
c->private = s;
c->event_ctx = dcerpc_event_context(p);
+ s->pipe = p;
+ s->domain_handle = io->in.domain_handle;
+
+ /* preparing parameters to send rpc request */
s->lookupname.in.domain_handle = &io->in.domain_handle;
s->lookupname.in.num_names = 1;
s->lookupname.in.names = talloc_zero(s, struct samr_String);
s->lookupname.in.names->string = io->in.username;
+ /* send the request */
s->req = dcerpc_samr_LookupNames_send(p, c, &s->lookupname);
-
+
+ /* callback handler */
s->req->async.callback = userdel_handler;
s->req->async.private = c;
s->stage = USERDEL_LOOKUP;
}
+/**
+ * Waits for and receives results of asynchronous userdel call
+ *
+ * @param c composite context returned by asynchronous userdel call
+ * @param mem_ctx memory context of the call
+ * @param io pointer to results (and arguments) of the call
+ * @return nt status code of execution
+ */
+
NTSTATUS rpc_composite_userdel_recv(struct composite_context *c, TALLOC_CTX *mem_ctx,
struct rpc_composite_userdel *io)
{
}
+/**
+ * Synchronous version of userdel call
+ *
+ * @param pipe dce/rpc call pipe
+ * @param mem_ctx memory context for the call
+ * @param io arguments and results of the call
+ * @return nt status code of execution
+ */
+
NTSTATUS rpc_composite_userdel(struct dcerpc_pipe *pipe,
TALLOC_CTX *mem_ctx,
struct rpc_composite_userdel *io)