On 7/31/19 9:06 AM, Mike Gilbert wrote: > This works around some strange behavior in glibc's getaddrinfo() > implementation when the AI_ADDRCONFIG flag is set. > > For example: > > struct addrinfo *res, hints = { .ai_family = AF_INET, .ai_flags = > AI_ADDRCONFIG }; > getaddrinfo("localhost", NULL, &hints, &res); > > This returns no results if there is no non-loopback interface configured with > an > IPv4 address. > > Bug: https://bugs.gentoo.org/690758 > Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=12377#c13 > Signed-off-by: Mike Gilbert <flop...@gentoo.org> > --- > lib/portage/process.py | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/lib/portage/process.py b/lib/portage/process.py > index dfbda75de..c284c04f3 100644 > --- a/lib/portage/process.py > +++ b/lib/portage/process.py > @@ -446,6 +446,29 @@ def spawn(mycommand, env=None, opt_name=None, > fd_pipes=None, returnpid=False, > # Everything succeeded > return 0 > > +def _configure_dummy_interface(): > + """ > + Configure a dummy interface to work around odd behavior in glibc's > + getaddrinfo() implementation when the AI_ADDRCONFIG flag is set. > + > + For example: > + > + struct addrinfo *res, hints = { .ai_family = AF_INET, .ai_flags = > AI_ADDRCONFIG }; > + getaddrinfo("localhost", NULL, &hints, &res); > + > + This returns no results if there is no non-loopback interface > configured with an > + IPv4 address. > + > + Bug: https://bugs.gentoo.org/690758 > + Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=12377#c13 > + """ > + try: > + > subprocess.check_call(['ip','link','add','dummy','type','dummy']) > + subprocess.check_call(['ip','link','set','dummy','up']) > + > subprocess.check_call(['ip','address','add','10.0.0.1/8','dev','dummy']) > + except subprocess.CalledProcessError: > + writemsg("Unable to configure dummy network interface\n") > + > def _exec(binary, mycommand, opt_name, fd_pipes, > env, gid, groups, uid, umask, cwd, > pre_exec, close_fds, unshare_net, unshare_ipc, unshare_mount, > unshare_pid, > @@ -637,6 +660,7 @@ def _exec(binary, mycommand, opt_name, fd_pipes, > > errno.errorcode.get(e.errno, '?')), > > noiselevel=-1) > sock.close() > + > _configure_dummy_interface() > except AttributeError: > # unshare() not supported by libc > pass >
Maybe it will suffice to add the address to the loopback interface? -- Thanks, Zac
signature.asc
Description: OpenPGP digital signature