wreplserver: add "wreplsrv:propagate name releases = yes" for replicated sgroup merges
[ira/wip.git] / source4 / wrepl_server / wrepl_out_helpers.c
index 2599ef4d09851c90319df3a5a5c651098a23cafc..e1e3f38b12e5a1e0463d6a7a1c1496be9964234f 100644 (file)
@@ -29,6 +29,8 @@
 #include "nbt_server/wins/winsdb.h"
 #include "libcli/composite/composite.h"
 #include "libcli/wrepl/winsrepl.h"
+#include "libcli/resolve/resolve.h"
+#include "param/param.h"
 
 enum wreplsrv_out_connect_stage {
        WREPLSRV_OUT_CONNECT_STAGE_WAIT_SOCKET,
@@ -185,13 +187,13 @@ static struct composite_context *wreplsrv_out_connect_send(struct wreplsrv_partn
 
        wreplconn->service      = service;
        wreplconn->partner      = partner;
-       wreplconn->sock         = wrepl_socket_init(wreplconn, service->task->event_ctx);
+       wreplconn->sock         = wrepl_socket_init(wreplconn, service->task->event_ctx, lp_iconv_convenience(service->task->lp_ctx));
        if (!wreplconn->sock) goto failed;
 
        state->stage    = WREPLSRV_OUT_CONNECT_STAGE_WAIT_SOCKET;
        state->wreplconn= wreplconn;
        state->c_req    = wrepl_connect_send(wreplconn->sock,
-                                            partner->our_address,
+                                            partner->our_address?partner->our_address:wrepl_best_ip(service->task->lp_ctx, partner->address),
                                             partner->address);
        if (!state->c_req) goto failed;
 
@@ -379,8 +381,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          = state->table_io.out.partners;
-               talloc_reference(mem_ctx, state->table_io.out.partners);
+               io->out.owners          = talloc_reference(mem_ctx, state->table_io.out.partners);
        }
 
        talloc_free(c);
@@ -535,8 +536,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           = state->pull_io.out.names;
-               talloc_reference(mem_ctx, state->pull_io.out.names);
+               io->out.names           = talloc_reference(mem_ctx, state->pull_io.out.names);
        }
 
        talloc_free(c);