summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/winbindd/winbindd_idmap.c6
-rw-r--r--source3/winbindd/winbindd_sid.c16
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);
}