summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-09-01 19:39:14 +0200
committerLennart Poettering <lennart@poettering.net>2015-09-01 20:40:24 +0200
commit395745ba533ac91fe118f43ec83f13a752c0b473 (patch)
tree55fa10dc719b9d605e82be61bb4448ef17a6365f /src
parentfc94c3260549c12892461be031c4b9dc122ca1ef (diff)
machined: call unlockpt() in container, not host
It makes assumptions about the pty path, hence better call it in the container namespace rather than the host.
Diffstat (limited to 'src')
-rw-r--r--src/basic/util.c3
-rw-r--r--src/machine/machine-dbus.c6
-rw-r--r--src/run/run.c6
3 files changed, 6 insertions, 9 deletions
diff --git a/src/basic/util.c b/src/basic/util.c
index 737f2a221c..f01f5f237b 100644
--- a/src/basic/util.c
+++ b/src/basic/util.c
@@ -6095,6 +6095,9 @@ int openpt_in_namespace(pid_t pid, int flags) {
if (master < 0)
_exit(EXIT_FAILURE);
+ if (unlockpt(master) < 0)
+ _exit(EXIT_FAILURE);
+
cmsg = CMSG_FIRSTHDR(&mh);
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c
index af2b8eff06..f27b58b893 100644
--- a/src/machine/machine-dbus.c
+++ b/src/machine/machine-dbus.c
@@ -597,9 +597,6 @@ int bus_machine_method_open_login(sd_bus_message *message, void *userdata, sd_bu
if (!p)
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "PTS name %s is invalid", pty_name);
- if (unlockpt(master) < 0)
- return -errno;
-
r = container_bus_new(m, &allocated_bus);
if (r < 0)
return r;
@@ -701,9 +698,6 @@ int bus_machine_method_open_shell(sd_bus_message *message, void *userdata, sd_bu
utmp_id = path_startswith(pty_name, "/dev/");
assert(utmp_id);
- if (unlockpt(master) < 0)
- return -errno;
-
r = container_bus_new(m, &allocated_bus);
if (r < 0)
return r;
diff --git a/src/run/run.c b/src/run/run.c
index a69560208c..657c6fcaf1 100644
--- a/src/run/run.c
+++ b/src/run/run.c
@@ -702,6 +702,9 @@ static int start_transient_service(
if (r < 0)
return log_error_errno(r, "Failed to determine tty name: %m");
+ if (unlockpt(master) < 0)
+ return log_error_errno(errno, "Failed to unlock tty: %m");
+
} else if (arg_transport == BUS_TRANSPORT_MACHINE) {
_cleanup_bus_unref_ sd_bus *system_bus = NULL;
const char *s;
@@ -738,9 +741,6 @@ static int start_transient_service(
return log_oom();
} else
assert_not_reached("Can't allocate tty via ssh");
-
- if (unlockpt(master) < 0)
- return log_error_errno(errno, "Failed to unlock tty: %m");
}
if (!arg_no_block) {