s3:libsmb: also remember the local socket address after connect
authorStefan Metzmacher <metze@samba.org>
Mon, 11 Jul 2011 12:26:23 +0000 (14:26 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 11 Jul 2011 14:39:15 +0000 (16:39 +0200)
metze

source3/include/client.h
source3/libsmb/cliconnect.c

index 4fb785e9d6635bb075f19a0e8babe33689c16766..b01136be379ef7c567cd6ca0e97fe30b4e975778 100644 (file)
@@ -82,6 +82,7 @@ struct cli_state {
        char *share;
        char *dev;
        struct nmb_name called;
+       struct sockaddr_storage src_ss;
        struct nmb_name calling;
        struct sockaddr_storage dest_ss;
 
index c5432973d38b179df42e0f9bed3d5b2853fcf92f..515bc3ff071315e575ed5b2663fb38d7d8f7dc75 100644 (file)
@@ -2886,6 +2886,14 @@ NTSTATUS cli_connect_nb(const char *host, struct sockaddr_storage *pss,
        cli->fd = fd;
        cli->port = port;
 
+       length = sizeof(cli->src_ss);
+       ret = getsockname(fd, (struct sockaddr *)(void *)&cli->src_ss,
+                         &length);
+       if (ret == -1) {
+               status = map_nt_error_from_unix(errno);
+               cli_shutdown(cli);
+               goto fail;
+       }
        length = sizeof(cli->dest_ss);
        ret = getpeername(fd, (struct sockaddr *)(void *)&cli->dest_ss,
                          &length);