]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Don't use sendto if ifindex is specified
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 12 Mar 2024 15:36:42 +0000 (09:36 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 12 Mar 2024 15:36:48 +0000 (09:36 -0600)
src/lib/util/udpfromto.c

index 1f220541fe453fd3efea8c4b489a72ef27dae78b..5a8e92fb8fb6a3855f0d1dc30d321799b92ea81e 100644 (file)
@@ -451,13 +451,15 @@ int sendfromto(int fd, void *buf, size_t len, int flags,
 #  endif
 
        /*
-        *      No "from" or "from" is 0.0.0.0 or ::/0, just use regular sendto.
+        *      No "from" or "from" is 0.0.0.0 or ::/0, and there's no
+        *      interface binding, just use regular sendto.
         */
        if (!from || (from_len == 0) ||
-               (from->sa_family == AF_INET &&
+               ((ifindex == 0) &&
+               ((from->sa_family == AF_INET &&
                        (((struct sockaddr_in *) from)->sin_addr.s_addr == INADDR_ANY)) ||
                (from->sa_family == AF_INET6 &&
-                       IN6_IS_ADDR_UNSPECIFIED(&((struct sockaddr_in6 *) from)->sin6_addr))) {
+                       IN6_IS_ADDR_UNSPECIFIED(&((struct sockaddr_in6 *) from)->sin6_addr))))) {
                return sendto(fd, buf, len, flags, to, to_len);
        }