chiark / gitweb /
missing: add __NR_getrandom for powerpc architecture
[elogind.git] / src / machine / machine-dbus.c
index cbdbc52a1490ac21949c6dcd810c4f842726e5a3..da8e6c08e70a0e72e5c3b89c3e457d931f3c0564 100644 (file)
@@ -175,6 +175,9 @@ int bus_machine_method_get_addresses(sd_bus *bus, sd_bus_message *message, void
         assert(message);
         assert(m);
 
+        if (m->class != MACHINE_CONTAINER)
+                return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Requesting IP address data is only supported on container machines.");
+
         r = readlink_malloc("/proc/self/ns/net", &us);
         if (r < 0)
                 return sd_bus_error_set_errno(error, r);
@@ -252,7 +255,7 @@ int bus_machine_method_get_addresses(sd_bus *bus, sd_bus_message *message, void
                 iov[0] = (struct iovec) { .iov_base = &family, .iov_len = sizeof(family) };
                 iov[1] = (struct iovec) { .iov_base = &in_addr, .iov_len = sizeof(in_addr) };
 
-                n = recvmsg(pair[0], &mh, 0);
+                n = recvmsg(pair[0], &mh, MSG_CMSG_CLOEXEC);
                 if (n < 0)
                         return sd_bus_error_set_errno(error, -errno);
                 if ((size_t) n < sizeof(family))
@@ -319,6 +322,9 @@ int bus_machine_method_get_os_release(sd_bus *bus, sd_bus_message *message, void
         assert(message);
         assert(m);
 
+        if (m->class != MACHINE_CONTAINER)
+                return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Requesting OS release data is only supported on container machines.");
+
         r = namespace_open(m->leader, NULL, &mntns_fd, NULL, &root_fd);
         if (r < 0)
                 return r;
@@ -403,6 +409,9 @@ int bus_machine_method_open_pty(sd_bus *bus, sd_bus_message *message, void *user
         assert(message);
         assert(m);
 
+        if (m->class != MACHINE_CONTAINER)
+                return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Opening pseudo TTYs is only supported on container machines.");
+
         master = openpt_in_namespace(m->leader, O_RDWR|O_NOCTTY|O_CLOEXEC);
         if (master < 0)
                 return master;
@@ -431,6 +440,9 @@ int bus_machine_method_open_login(sd_bus *bus, sd_bus_message *message, void *us
         const char *p;
         int r;
 
+        if (m->class != MACHINE_CONTAINER)
+                return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Opening logins is only supported on container machines.");
+
         r = bus_verify_polkit_async(
                         message,
                         CAP_SYS_ADMIN,
@@ -463,9 +475,9 @@ int bus_machine_method_open_login(sd_bus *bus, sd_bus_message *message, void *us
                 return r;
 
 #ifdef ENABLE_KDBUS
-        asprintf(&container_bus->address, "x-container-kernel:pid=" PID_FMT ";x-container-unix:pid=" PID_FMT, m->leader, m->leader);
+        asprintf(&container_bus->address, "x-machine-kernel:pid=" PID_FMT ";x-machine-unix:pid=" PID_FMT, m->leader, m->leader);
 #else
-        asprintf(&container_bus->address, "x-container-kernel:pid=" PID_FMT, m->leader);
+        asprintf(&container_bus->address, "x-machine-kernel:pid=" PID_FMT, m->leader);
 #endif
         if (!container_bus->address)
                 return -ENOMEM;