Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o, Mike Gilbert <floppym@g.o>
Cc: leio@g.o
Subject: Re: [gentoo-portage-dev] [PATCH] Configure a dummy network interface for network-sandbox
Date: Wed, 31 Jul 2019 18:00:24
Message-Id: dd78132f-0841-08d0-cc09-8a72c30e1176@gentoo.org
In Reply to: [gentoo-portage-dev] [PATCH] Configure a dummy network interface for network-sandbox by Mike Gilbert
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 <floppym@g.o> > --- > 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

Attachments

File name MIME type
signature.asc application/pgp-signature

Replies