swrap: check whether an address:port is already in use in swrap_bind()
authorMichael Adam <obnox@samba.org>
Tue, 3 Jun 2014 13:14:44 +0000 (15:14 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 5 Jun 2014 21:57:10 +0000 (23:57 +0200)
Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
lib/socket_wrapper/socket_wrapper.c

index 477f1159715e8f2fdd7b5b233782f85603e77442..f6adc95c152c978a08039214bb58f8c43f80e34b 100644 (file)
@@ -2829,6 +2829,7 @@ static int swrap_bind(int s, const struct sockaddr *myaddr, socklen_t addrlen)
        struct sockaddr_un un_addr;
        struct socket_info *si = find_socket_info(s);
        int bind_error = 0;
+       bool in_use;
 
        if (!si) {
                return libc_bind(s, myaddr, addrlen);
@@ -2884,6 +2885,12 @@ static int swrap_bind(int s, const struct sockaddr *myaddr, socklen_t addrlen)
                return -1;
        }
 
+       in_use = check_addr_port_in_use(myaddr, addrlen);
+       if (in_use) {
+               errno = EADDRINUSE;
+               return -1;
+       }
+
        free(si->myname);
        si->myname_len = addrlen;
        si->myname = sockaddr_dup(myaddr, addrlen);