This avoids usage/dereferencing 'struct dcerpc_pipe'.
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
s->user_info.in.domain_handle = ctx->samr.handle;
s->user_info.in.level = level;
- userinfo_req = libnet_rpc_userinfo_send(ctx->samr.pipe, s, &s->user_info, monitor);
+ userinfo_req = libnet_rpc_userinfo_send(s, s->ctx->event_ctx,
+ ctx->samr.samr_handle,
+ &s->user_info, monitor);
if (composite_nomem(userinfo_req, c)) return c;
composite_continue(c, userinfo_req, continue_rpc_userinfo, c);
s->user_info.in.username = s->r.in.user_name;
s->user_info.in.level = level;
- userinfo_req = libnet_rpc_userinfo_send(s->ctx->samr.pipe, s, &s->user_info, s->monitor_fn);
+ userinfo_req = libnet_rpc_userinfo_send(s, s->ctx->event_ctx,
+ s->ctx->samr.samr_handle,
+ &s->user_info, s->monitor_fn);
if (composite_nomem(userinfo_req, c)) return;
composite_continue(c, userinfo_req, continue_rpc_userinfo, c);
s->userinfo.in.level = 21;
/* send the request */
- info_req = libnet_rpc_userinfo_send(s->ctx->samr.pipe,
- s,
+ info_req = libnet_rpc_userinfo_send(s, s->ctx->event_ctx,
+ s->ctx->samr.samr_handle,
&s->userinfo,
s->monitor_fn);
if (composite_nomem(info_req, c)) return c;
s->userinfo.in.level = 21;
/* send the request */
- info_req = libnet_rpc_userinfo_send(s->ctx->samr.pipe,
- s,
+ info_req = libnet_rpc_userinfo_send(s, s->ctx->event_ctx,
+ s->ctx->samr.samr_handle,
&s->userinfo,
s->monitor_fn);
if (composite_nomem(info_req, c)) return;
s->userinfo.in.level = 21;
/* send the request */
- info_req = libnet_rpc_userinfo_send(s->ctx->samr.pipe, s, &s->userinfo, s->monitor_fn);
+ info_req = libnet_rpc_userinfo_send(s, s->ctx->event_ctx,
+ s->ctx->samr.samr_handle,
+ &s->userinfo, s->monitor_fn);
if (composite_nomem(info_req, c)) return;
/* set the next stage */
struct userinfo_state {
- struct dcerpc_pipe *pipe;
+ struct dcerpc_binding_handle *binding_handle;
struct policy_handle domain_handle;
struct policy_handle user_handle;
uint16_t level;
/* send request */
subreq = dcerpc_samr_OpenUser_r_send(s, c->event_ctx,
- s->pipe->binding_handle,
+ s->binding_handle,
&s->openuser);
if (composite_nomem(subreq, c)) return;
/* queue rpc call, set event handling and new state */
subreq = dcerpc_samr_QueryUserInfo_r_send(s, c->event_ctx,
- s->pipe->binding_handle,
+ s->binding_handle,
&s->queryuserinfo);
if (composite_nomem(subreq, c)) return;
/* queue rpc call, set event handling and new state */
subreq = dcerpc_samr_Close_r_send(s, c->event_ctx,
- s->pipe->binding_handle,
+ s->binding_handle,
&s->samrclose);
if (composite_nomem(subreq, c)) return;
* @param p dce/rpc call pipe
* @param io arguments and results of the call
*/
-struct composite_context *libnet_rpc_userinfo_send(struct dcerpc_pipe *p,
- TALLOC_CTX *mem_ctx,
+struct composite_context *libnet_rpc_userinfo_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct dcerpc_binding_handle *b,
struct libnet_rpc_userinfo *io,
void (*monitor)(struct monitor_msg*))
{
struct dom_sid *sid;
struct tevent_req *subreq;
- if (!p || !io) return NULL;
+ if (!b || !io) return NULL;
- c = composite_create(mem_ctx, dcerpc_event_context(p));
+ c = composite_create(mem_ctx, ev);
if (c == NULL) return c;
s = talloc_zero(c, struct userinfo_state);
c->private_data = s;
s->level = io->in.level;
- s->pipe = p;
+ s->binding_handle= b;
s->domain_handle = io->in.domain_handle;
s->monitor_fn = monitor;
/* send request */
subreq = dcerpc_samr_OpenUser_r_send(s, c->event_ctx,
- p->binding_handle,
+ s->binding_handle,
&s->openuser);
if (composite_nomem(subreq, c)) return c;
/* send request */
subreq = dcerpc_samr_LookupNames_r_send(s, c->event_ctx,
- p->binding_handle,
+ s->binding_handle,
&s->lookup);
if (composite_nomem(subreq, c)) return c;
TALLOC_CTX *mem_ctx,
struct libnet_rpc_userinfo *io)
{
- struct composite_context *c = libnet_rpc_userinfo_send(p, mem_ctx, io, NULL);
+ struct composite_context *c = libnet_rpc_userinfo_send(mem_ctx, p->conn->event_ctx,
+ p->binding_handle, io, NULL);
return libnet_rpc_userinfo_recv(c, mem_ctx, io);
}
user_sid = dom_sid_add_rid(mem_ctx, domain_sid, *rid);
+ ZERO_STRUCT(user);
+
user.in.domain_handle = *domain_handle;
user.in.sid = dom_sid_string(mem_ctx, user_sid);
user.in.level = level; /* this should be extended */
torture_comment(tctx, "Testing async libnet_rpc_userinfo (SID argument)\n");
- c = libnet_rpc_userinfo_send(p, mem_ctx, &user, msg_handler);
+ c = libnet_rpc_userinfo_send(mem_ctx, tctx->ev, p->binding_handle, &user, msg_handler);
torture_assert(tctx, c != NULL, "Failed to call async libnet_rpc_userinfo_send");
status = libnet_rpc_userinfo_recv(c, mem_ctx, &user);
torture_comment(tctx, "Testing async libnet_rpc_userinfo (username argument)\n");
- c = libnet_rpc_userinfo_send(p, mem_ctx, &user, msg_handler);
+ c = libnet_rpc_userinfo_send(mem_ctx, tctx->ev, p->binding_handle, &user, msg_handler);
torture_assert(tctx, c != NULL, "Failed to call async libnet_rpc_userinfo_send");
status = libnet_rpc_userinfo_recv(c, mem_ctx, &user);