r26638: libndr: Require explicitly specifying iconv_convenience for ndr_struct_push_b...
[ira/wip.git] / source4 / libcli / wrepl / winsrepl.c
index 8f808198ebc3d438054c53667474fe0b17d1b7c5..381df902b40e9a6e1b78ab85bc1ffb560e6fb5c2 100644 (file)
@@ -30,6 +30,7 @@
 #include "system/network.h"
 #include "lib/socket/netif.h"
 #include "param/param.h"
+#include "libcli/resolve/resolve.h"
 
 static struct wrepl_request *wrepl_request_finished(struct wrepl_request *req, NTSTATUS status);
 
@@ -312,6 +313,7 @@ static void wrepl_connect_handler(struct composite_context *creq)
   connect a wrepl_socket to a WINS server
 */
 struct composite_context *wrepl_connect_send(struct wrepl_socket *wrepl_socket,
+                                            struct resolve_context *resolve_ctx,
                                             const char *our_ip, const char *peer_ip)
 {
        struct composite_context *result;
@@ -331,7 +333,9 @@ struct composite_context *wrepl_connect_send(struct wrepl_socket *wrepl_socket,
        state->wrepl_socket     = wrepl_socket;
 
        if (!our_ip) {
-               our_ip = iface_best_ip(global_loadparm, peer_ip);
+               struct interface *ifaces;
+               load_interfaces(state, lp_interfaces(global_loadparm), &ifaces);
+               our_ip = iface_best_ip(ifaces, peer_ip);
        }
 
        us = socket_address_from_strings(state, wrepl_socket->sock->backend_name, 
@@ -343,7 +347,8 @@ struct composite_context *wrepl_connect_send(struct wrepl_socket *wrepl_socket,
        if (composite_nomem(peer, result)) return result;
 
        state->creq = socket_connect_send(wrepl_socket->sock, us, peer,
-                                         0, wrepl_socket->event.ctx);
+                                         0, resolve_ctx,
+                                         wrepl_socket->event.ctx);
        composite_continue(result, state->creq, wrepl_connect_handler, state);
        return result;
 }
@@ -369,9 +374,10 @@ NTSTATUS wrepl_connect_recv(struct composite_context *result)
 /*
   connect a wrepl_socket to a WINS server - sync API
 */
-NTSTATUS wrepl_connect(struct wrepl_socket *wrepl_socket, const char *our_ip, const char *peer_ip)
+NTSTATUS wrepl_connect(struct wrepl_socket *wrepl_socket, struct resolve_context *resolve_ctx,
+                      const char *our_ip, const char *peer_ip)
 {
-       struct composite_context *c_req = wrepl_connect_send(wrepl_socket, our_ip, peer_ip);
+       struct composite_context *c_req = wrepl_connect_send(wrepl_socket, resolve_ctx, our_ip, peer_ip);
        return wrepl_connect_recv(c_req);
 }
 
@@ -488,7 +494,7 @@ struct wrepl_request *wrepl_request_send(struct wrepl_socket *wrepl_socket,
        }
 
        wrap.packet = *packet;
-       ndr_err = ndr_push_struct_blob(&blob, req, &wrap,
+       ndr_err = ndr_push_struct_blob(&blob, req, lp_iconv_convenience(global_loadparm), &wrap, 
                                       (ndr_push_flags_fn_t)ndr_push_wrepl_wrap);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                status = ndr_map_error2ntstatus(ndr_err);