diff options
Diffstat (limited to 'source3/winbindd')
-rw-r--r-- | source3/winbindd/winbindd_idmap.c | 6 | ||||
-rw-r--r-- | source3/winbindd/winbindd_sid.c | 16 |
2 files changed, 15 insertions, 7 deletions
diff --git a/source3/winbindd/winbindd_idmap.c b/source3/winbindd/winbindd_idmap.c index 379e7b51ea..be090afbf1 100644 --- a/source3/winbindd/winbindd_idmap.c +++ b/source3/winbindd/winbindd_idmap.c @@ -772,15 +772,15 @@ static void winbindd_dump_id_maps_recv(TALLOC_CTX *mem_ctx, bool success, cont(private_data, True); } -void winbindd_dump_maps_async(TALLOC_CTX *mem_ctx, void *data, int size, +void winbindd_dump_maps_async(TALLOC_CTX *mem_ctx, const char *logfile, void (*cont)(void *private_data, bool success), void *private_data) { struct winbindd_request request; ZERO_STRUCT(request); request.cmd = WINBINDD_DUAL_DUMP_MAPS; - request.extra_data.data = (char *)data; - request.extra_len = size; + request.extra_data.data = discard_const(logfile); + request.extra_len = strlen(logfile)+1; do_async(mem_ctx, idmap_child(), &request, winbindd_dump_id_maps_recv, (void *)cont, private_data); } diff --git a/source3/winbindd/winbindd_sid.c b/source3/winbindd/winbindd_sid.c index 601971e36b..c01c6f04ab 100644 --- a/source3/winbindd/winbindd_sid.c +++ b/source3/winbindd/winbindd_sid.c @@ -532,6 +532,8 @@ static void dump_maps_recv(void *private_data, bool success) void winbindd_dump_maps(struct winbindd_cli_state *state) { + const char *logfile; + if ( ! state->privileged) { DEBUG(0, ("Only root is allowed to ask for an idmap dump!\n")); request_error(state); @@ -540,9 +542,15 @@ void winbindd_dump_maps(struct winbindd_cli_state *state) DEBUG(3, ("[%5lu]: dump maps\n", (unsigned long)state->pid)); - winbindd_dump_maps_async(state->mem_ctx, - state->request.extra_data.data, - state->request.extra_len, - dump_maps_recv, state); + logfile = talloc_strndup(state->mem_ctx, + (const char *)state->request.extra_data.data, + state->request.extra_len); + if (!logfile) { + request_error(state); + return; + } + + winbindd_dump_maps_async(state->mem_ctx, logfile, + dump_maps_recv, state); } |