import tempfile
import shutil
import sys
+import errno
def _shuffle_fd3():
os.dup2(1,3)
os.stat(path)
return True
except OSError as oe:
- if oe.errno != os.errno.ENOENT: raise oe
+ if oe.errno != errno.ENOENT: raise oe
return False
- def _sock_dir(d, target_euid):
+ def _sock_dir(d, target_euid, target_root):
run_dir = '/run/user/%d' % target_euid
- if d._exists(run_dir):
+ if d._exists(target_root + run_dir):
return run_dir + '/fishdescriptor'
try:
def fish(d, fds):
# -> list of fds in our process
+ target_root = '/proc/%d/root' % d.pid
+ if not d._exists(target_root):
+ target_root = ''
+
euid = d._geteuid()
- sockdir = d._sock_dir(euid)
+ sockdir = d._sock_dir(euid, target_root)
d.mkdir(sockdir)
sockname = '%s/%s,%d' % (sockdir, os.uname().nodename, d.pid)
- target_root = '/proc/%d/root' % d.pid
- if not d._exists(target_root):
- target_root = ''
-
our_sockname = target_root + sockname
s = None
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.bind(our_sockname)
+ os.chmod(our_sockname, 666)
s.listen(1)
- ancil_len = d.donate(our_sockname, fds)
+ ancil_len = d.donate(sockname, fds)
(s2, dummy) = s.accept()
(msg, ancil, flags, sender) = s2.recvmsg(1, ancil_len)