]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
machined: introduce a ptsname_namespace() call and make use of it
authorLennart Poettering <lennart@poettering.net>
Tue, 1 Sep 2015 18:12:25 +0000 (20:12 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 1 Sep 2015 18:40:24 +0000 (20:40 +0200)
The call is like ptsname() but does not assume the pty path was
accessible in the local namespace. It uses the same internal ioctl
though.

src/basic/terminal-util.c
src/basic/terminal-util.h
src/machine/machine-dbus.c

index cf55263bbfe985c8c0f62927110c36e2624739b2..c5ef5ab0d1e311ed5b4406039d667707eca687e3 100644 (file)
@@ -1074,3 +1074,22 @@ int get_ctty(pid_t pid, dev_t *_devnr, char **r) {
 
         return 0;
 }
+
+int ptsname_namespace(int pty, char **ret) {
+        int no = -1, r;
+
+        /* Like ptsname(), but doesn't assume that the path is
+         * accessible in the local namespace. */
+
+        r = ioctl(pty, TIOCGPTN, &no);
+        if (r < 0)
+                return -errno;
+
+        if (no < 0)
+                return -EIO;
+
+        if (asprintf(ret, "/dev/pts/%i", no) < 0)
+                return -ENOMEM;
+
+        return 0;
+}
index 188714f2284f671370940e0eca1b89468c1323fd..b9a3809a6c821745a5c741c871455f036cf5cc77 100644 (file)
@@ -107,3 +107,5 @@ int get_ctty(pid_t, dev_t *_devnr, char **r);
 
 int getttyname_malloc(int fd, char **r);
 int getttyname_harder(int fd, char **r);
+
+int ptsname_namespace(int pty, char **ret);
index f27b58b89361e77a26b17d76437b43be189e7015..a63b9785af01f79cdae9f6a0d561227935088fdd 100644 (file)
@@ -45,6 +45,7 @@
 #include "formats-util.h"
 #include "process-util.h"
 #include "env-util.h"
+#include "terminal-util.h"
 
 static int property_get_id(
                 sd_bus *bus,
@@ -500,7 +501,7 @@ int bus_machine_method_open_pty(sd_bus_message *message, void *userdata, sd_bus_
         if (master < 0)
                 return master;
 
-        r = ptsname_malloc(master, &pty_name);
+        r = ptsname_namespace(master, &pty_name);
         if (r < 0)
                 return r;
 
@@ -589,7 +590,7 @@ int bus_machine_method_open_login(sd_bus_message *message, void *userdata, sd_bu
         if (master < 0)
                 return master;
 
-        r = ptsname_malloc(master, &pty_name);
+        r = ptsname_namespace(master, &pty_name);
         if (r < 0)
                 return r;
 
@@ -687,7 +688,7 @@ int bus_machine_method_open_shell(sd_bus_message *message, void *userdata, sd_bu
         if (master < 0)
                 return master;
 
-        r = ptsname_malloc(master, &pty_name);
+        r = ptsname_namespace(master, &pty_name);
         if (r < 0)
                 return r;