Use UTS namespace to override hostname when network-sandbox is enabled.
Set it to 'localhost' as that has a better chance of being present
in /etc/hosts.  This fixes tests in some packages that try to connect
to localhost via hostname obtained using gethostname(), e.g. docker-py,
and suffer resolution problems due to the system hostname not being
defined in /etc/hosts.
---
 lib/portage/process.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/lib/portage/process.py b/lib/portage/process.py
index c1fc4bcf6..0f9789acb 100644
--- a/lib/portage/process.py
+++ b/lib/portage/process.py
@@ -348,12 +348,14 @@ def spawn(mycommand, env=None, opt_name=None, 
fd_pipes=None, returnpid=False,
        if unshare_net or unshare_ipc or unshare_mount or unshare_pid:
                # from /usr/include/bits/sched.h
                CLONE_NEWNS = 0x00020000
+               CLONE_NEWUTS = 0x04000000
                CLONE_NEWIPC = 0x08000000
                CLONE_NEWPID = 0x20000000
                CLONE_NEWNET = 0x40000000
 
                if unshare_net:
-                       unshare_flags |= CLONE_NEWNET
+                       # UTS namespace to override hostname
+                       unshare_flags |= CLONE_NEWNET | CLONE_NEWUTS
                if unshare_ipc:
                        unshare_flags |= CLONE_NEWIPC
                if unshare_mount:
@@ -704,6 +706,8 @@ def _exec(binary, mycommand, opt_name, fd_pipes,
                                                                        
noiselevel=-1)
                                                                os._exit(1)
                                                if unshare_net:
+                                                       # use 'localhost' to 
avoid hostname resolution problems
+                                                       
socket.sethostname('localhost')
                                                        
_configure_loopback_interface()
                                except AttributeError:
                                        # unshare() not supported by libc
-- 
2.26.0


Reply via email to