Преглед изворни кода

allow getaddrinfo flag AI_ADDRCONFIG to be disabled

This flags is generally handy to avoid having to deal with ipv6 results on an
ipv4-only system, but it prevents e.g. the testcases from working if the
testsystem has no configured address at the moment (expect loopback), so
allow it to be sidestepped and let the testcases sidestep it.

Git-Dch: Ignore
David Kalnischkies пре 10 година
родитељ
комит
23d35ec15a
2 измењених фајлова са 7 додато и 1 уклоњено
  1. 6 1
      methods/connect.cc
  2. 1 0
      test/integration/framework

+ 6 - 1
methods/connect.cc

@@ -164,7 +164,12 @@ static bool ConnectToHostname(std::string const &Host, int const Port,
       struct addrinfo Hints;
       memset(&Hints,0,sizeof(Hints));
       Hints.ai_socktype = SOCK_STREAM;
-      Hints.ai_flags = AI_ADDRCONFIG;
+      Hints.ai_flags = 0;
+      // see getaddrinfo(3): only return address if system has such a address configured
+      // useful if system is ipv4 only, to not get ipv6, but that fails if the system has
+      // no address configured: e.g. offline and trying to connect to localhost.
+      if (_config->FindB("Acquire::Connect::AddrConfig", true) == true)
+	 Hints.ai_flags |= AI_ADDRCONFIG;
       Hints.ai_protocol = 0;
       
       if(_config->FindB("Acquire::ForceIPv4", false) == true)

+ 1 - 0
test/integration/framework

@@ -377,6 +377,7 @@ EOF
 	fi
 	echo "Acquire::https::CaInfo \"${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem\";" > rootdir/etc/apt/apt.conf.d/99https
 	echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary
+	echo 'Acquire::Connect::AddrConfig "false";' > rootdir/etc/apt/apt.conf.d/connect-addrconfig
 	configcompression '.' 'gz' #'bz2' 'lzma' 'xz'
 	confighashes 'SHA1' # these are tests, not security best-practices