s4:wrepl_out_helpers.c: avoid talloc_reference() in most cases
authorStefan Metzmacher <metze@samba.org>
Thu, 8 Aug 2013 17:16:26 +0000 (19:16 +0200)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 12 Aug 2013 04:48:54 +0000 (16:48 +1200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/wrepl_server/wrepl_out_helpers.c

index 660e1badb7e02b8786baf9fe85902b05bb46a78a..782e2f2908f8e57da308bee6c4741cefa781c8c5 100644 (file)
@@ -357,8 +357,23 @@ static struct composite_context *wreplsrv_pull_table_send(TALLOC_CTX *mem_ctx, s
        c->private_data = state;
 
        if (io->in.num_owners) {
+               struct wrepl_wins_owner *partners;
+               uint32_t i;
+
+               partners = talloc_array(state,
+                                       struct wrepl_wins_owner,
+                                       io->in.num_owners);
+               if (composite_nomem(partners, c)) goto failed;
+
+               for (i=0; i < io->in.num_owners; i++) {
+                       partners[i] = io->in.owners[i];
+                       partners[i].address = talloc_strdup(partners,
+                                               io->in.owners[i].address);
+                       if (composite_nomem(partners[i].address, c)) goto failed;
+               }
+
                state->table_io.out.num_partners        = io->in.num_owners;
-               state->table_io.out.partners            = io->in.owners;
+               state->table_io.out.partners            = partners;
                state->stage                            = WREPLSRV_PULL_TABLE_STAGE_DONE;
                composite_done(c);
                return c;
@@ -388,7 +403,7 @@ static NTSTATUS wreplsrv_pull_table_recv(struct composite_context *c, TALLOC_CTX
                struct wreplsrv_pull_table_state *state = talloc_get_type(c->private_data,
                                                          struct wreplsrv_pull_table_state);
                io->out.num_owners      = state->table_io.out.num_partners;
-               io->out.owners          = talloc_reference(mem_ctx, state->table_io.out.partners);
+               io->out.owners          = talloc_move(mem_ctx, &state->table_io.out.partners);
        }
 
        talloc_free(c);
@@ -548,7 +563,7 @@ static NTSTATUS wreplsrv_pull_names_recv(struct composite_context *c, TALLOC_CTX
                struct wreplsrv_pull_names_state *state = talloc_get_type(c->private_data,
                                                          struct wreplsrv_pull_names_state);
                io->out.num_names       = state->pull_io.out.num_names;
-               io->out.names           = talloc_reference(mem_ctx, state->pull_io.out.names);
+               io->out.names           = talloc_move(mem_ctx, &state->pull_io.out.names);
        }
 
        talloc_free(c);