chiark / gitweb /
fishdescriptor: When looking for run_dir, look in target root
[chiark-utils.git] / fishdescriptor / py / fishdescriptor / fish.py
index 9d2d3c631fbead808ec46e3c5751819606419458..dcb7c32ac817a3bcbfb2cc50a803933938c6e69a 100644 (file)
@@ -114,9 +114,9 @@ class Donor():
             if oe.errno != os.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:
@@ -133,16 +133,16 @@ class Donor():
     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