mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
dirmngr: Use IPv4 or IPv6 interface only if available.
* dirmngr/dns-stuff.c (cached_inet_support): New variable. (dns_stuff_housekeeping): New. (check_inet_support): New. * dirmngr/http.c (connect_server): Use only detected interfaces. * dirmngr/dirmngr.c (housekeeping_thread): Flush the new cache. -- This currently works only for Windows but that is where users really ran into problems. The old workaround was to configure disable-ipv4 or disable-ipv6. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
40daa0bc0b
commit
12def3a84e
4 changed files with 119 additions and 3 deletions
|
@ -2908,7 +2908,7 @@ connect_server (ctrl_t ctrl, const char *server, unsigned short port,
|
|||
unsigned int srvcount = 0;
|
||||
int hostfound = 0;
|
||||
int anyhostaddr = 0;
|
||||
int srv, connected;
|
||||
int srv, connected, v4_valid, v6_valid;
|
||||
gpg_error_t last_err = 0;
|
||||
struct srventry *serverlist = NULL;
|
||||
|
||||
|
@ -2918,6 +2918,8 @@ connect_server (ctrl_t ctrl, const char *server, unsigned short port,
|
|||
init_sockets ();
|
||||
#endif /*Windows*/
|
||||
|
||||
check_inet_support (&v4_valid, &v6_valid);
|
||||
|
||||
/* Onion addresses require special treatment. */
|
||||
if (is_onion_address (server))
|
||||
{
|
||||
|
@ -2996,9 +2998,11 @@ connect_server (ctrl_t ctrl, const char *server, unsigned short port,
|
|||
|
||||
for (ai = aibuf; ai && !connected; ai = ai->next)
|
||||
{
|
||||
if (ai->family == AF_INET && (flags & HTTP_FLAG_IGNORE_IPv4))
|
||||
if (ai->family == AF_INET
|
||||
&& ((flags & HTTP_FLAG_IGNORE_IPv4) || !v4_valid))
|
||||
continue;
|
||||
if (ai->family == AF_INET6 && (flags & HTTP_FLAG_IGNORE_IPv6))
|
||||
if (ai->family == AF_INET6
|
||||
&& ((flags & HTTP_FLAG_IGNORE_IPv6) || !v6_valid))
|
||||
continue;
|
||||
|
||||
if (sock != ASSUAN_INVALID_FD)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue