socket_wrapper: don't allow connect() to the broadcast address
authorStefan Metzmacher <metze@samba.org>
Sat, 30 Oct 2010 14:07:31 +0000 (16:07 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 3 Mar 2011 21:57:25 +0000 (22:57 +0100)
This will simplify other code later.

metze

lib/socket_wrapper/socket_wrapper.c

index 563c3a860d471e1b00d703ba855dd26a685ca2cc..346e0dfd453cd497070bb0fd8c2d321e32c1426c 100644 (file)
@@ -1695,6 +1695,7 @@ _PUBLIC_ int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t ad
        int ret;
        struct sockaddr_un un_addr;
        struct socket_info *si = find_socket_info(s);
+       int bcast = 0;
 
        if (!si) {
                return real_connect(s, serv_addr, addrlen);
@@ -1710,9 +1711,15 @@ _PUBLIC_ int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t ad
                return -1;
        }
 
-       ret = sockaddr_convert_to_un(si, (const struct sockaddr *)serv_addr, addrlen, &un_addr, 0, NULL);
+       ret = sockaddr_convert_to_un(si, (const struct sockaddr *)serv_addr,
+                                    addrlen, &un_addr, 0, &bcast);
        if (ret == -1) return -1;
 
+       if (bcast) {
+               errno = ENETUNREACH;
+               return -1;
+       }
+
        if (si->type == SOCK_DGRAM) {
                si->defer_connect = 1;
                ret = 0;