← Commit list

9d6c46955

Denis Vlasenko
Denis Vlasenko
2007-11-14
FAILED Duration: 13s

Subject

Introduce FEATURE_PREFER_IPV4_ADDRESS. If selected, we have: function old new delta str2sockaddr 328 344 +16

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

libbb/xconnect.c+16 -3
@@ -125,6 +125,7 @@ USE_FEATURE_IPV6(sa_family_t af,)
int rc;
len_and_sockaddr *r = NULL;
struct addrinfo *result = NULL;
+ struct addrinfo *used_res;
const char *org_host = host; /* only for error msg */
const char *cp;
struct addrinfo hint;
@@ -169,9 +170,21 @@ USE_FEATURE_IPV6(sa_family_t af,)
xfunc_die();
goto ret;
}
- r = xmalloc(offsetof(len_and_sockaddr, sa) + result->ai_addrlen);
- r->len = result->ai_addrlen;
- memcpy(&r->sa, result->ai_addr, result->ai_addrlen);
+ used_res = result;
+#if ENABLE_FEATURE_PREFER_IPV4_ADDRESS
+ while (1) {
+ if (used_res->ai_family == AF_INET)
+ break;
+ used_res = used_res->ai_next;
+ if (!used_res) {
+ used_res = result;
+ break;
+ }
+ }
+#endif
+ r = xmalloc(offsetof(len_and_sockaddr, sa) + used_res->ai_addrlen);
+ r->len = used_res->ai_addrlen;
+ memcpy(&r->sa, used_res->ai_addr, used_res->ai_addrlen);
set_nport(r, htons(port));
ret:
freeaddrinfo(result);
networking/Config.in+15 -0
@@ -12,6 +12,21 @@ config FEATURE_IPV6
Enable IPv6 support in busybox.
This adds IPv6 support in the networking applets.
+config FEATURE_PREFER_IPV4_ADDRESS
+ bool "Preferentially use IPv4 addresses from DNS queries"
+ default y
+ depends on FEATURE_IPV6
+ help
+ Use IPv4 address of network host if it has one.
+
+ If this option is off, the first returned address will be used.
+ This may cause problems when your DNS server is IPv6-capable and
+ is returning IPv6 host addresses too. If IPv6 address
+ precedes IPv4 one in DNS reply, busybox network applets
+ (e.g. wget) will use IPv6 address. On an IPv6-incapable host
+ or network applets will fail to connect to the host
+ using IPv6 address.
+
config VERBOSE_RESOLUTION_ERRORS
bool "Verbose resolution errors"
default n