From 449d49946b295f574e1fed83b5a5ffbf1c1b1e30 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sat, 18 May 2019 11:25:01 -0700 Subject: [PATCH] s3: winbind: Convert idmap to use file_ploadv_send(). BUG: https://bugzilla.samba.org/show_bug.cgi?id=13964 Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- source3/winbindd/idmap_script.c | 57 +++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/source3/winbindd/idmap_script.c b/source3/winbindd/idmap_script.c index e4de1a09ba0..aa3a2e00396 100644 --- a/source3/winbindd/idmap_script.c +++ b/source3/winbindd/idmap_script.c @@ -63,7 +63,7 @@ struct idmap_script_context { */ struct idmap_script_xid2sid_state { - const char *syscmd; + char **argl; size_t idx; uint8_t *out; }; @@ -101,13 +101,32 @@ static struct tevent_req *idmap_script_xid2sid_send( return tevent_req_post(req, ev); } - state->syscmd = talloc_asprintf(state, "%s IDTOSID %cID %lu", script, key, - (unsigned long)xid.id); - if (tevent_req_nomem(state->syscmd, req)) { + state->argl = talloc_zero_array(state, + char *, + 5); + if (tevent_req_nomem(state->argl, req)) { return tevent_req_post(req, ev); } + state->argl[0] = talloc_strdup(state->argl, script); + if (tevent_req_nomem(state->argl[0], req)) { + return tevent_req_post(req, ev); + } + state->argl[1] = talloc_strdup(state->argl, "IDTOSID"); + if (tevent_req_nomem(state->argl[1], req)) { + return tevent_req_post(req, ev); + } + state->argl[2] = talloc_asprintf(state->argl, "%cID", key); + if (tevent_req_nomem(state->argl[2], req)) { + return tevent_req_post(req, ev); + } + state->argl[3] = talloc_asprintf(state->argl, "%lu", + (unsigned long)xid.id); + if (tevent_req_nomem(state->argl[3], req)) { + return tevent_req_post(req, ev); + } + state->argl[4] = NULL; - subreq = file_pload_send(state, ev, state->syscmd, 1024); + subreq = file_ploadv_send(state, ev, state->argl, 1024); if (tevent_req_nomem(subreq, req)) { return tevent_req_post(req, ev); } @@ -320,7 +339,7 @@ static NTSTATUS idmap_script_unixids_to_sids(struct idmap_domain *dom, } struct idmap_script_sid2xid_state { - const char *syscmd; + char **argl; size_t idx; uint8_t *out; }; @@ -342,16 +361,28 @@ static struct tevent_req *idmap_script_sid2xid_send( } state->idx = idx; - state->syscmd = talloc_asprintf( - state, - "%s SIDTOID %s", - script, - dom_sid_str_buf(sid, &sidbuf)); - if (tevent_req_nomem(state->syscmd, req)) { + state->argl = talloc_zero_array(state, + char *, + 4); + if (tevent_req_nomem(state->argl, req)) { + return tevent_req_post(req, ev); + } + state->argl[0] = talloc_strdup(state->argl, script); + if (tevent_req_nomem(state->argl[0], req)) { + return tevent_req_post(req, ev); + } + state->argl[1] = talloc_strdup(state->argl, "SIDTOID"); + if (tevent_req_nomem(state->argl[1], req)) { + return tevent_req_post(req, ev); + } + state->argl[2] = talloc_asprintf(state->argl, "%s", + dom_sid_str_buf(sid, &sidbuf)); + if (tevent_req_nomem(state->argl[2], req)) { return tevent_req_post(req, ev); } + state->argl[3] = NULL; - subreq = file_pload_send(state, ev, state->syscmd, 1024); + subreq = file_ploadv_send(state, ev, state->argl, 1024); if (tevent_req_nomem(subreq, req)) { return tevent_req_post(req, ev); } -- 2.47.3