chiark / gitweb /
logind: after deserializatio readd systemd units to unit-to-object hashmap correctly
[elogind.git] / src / login / sd-login.c
index 157b7e0fb4e13eb0b452414a8a2d7cddf4148cde..06587921cd2864ca7fc59a9ad9c835d34a7bc276 100644 (file)
@@ -72,6 +72,16 @@ _public_ int sd_pid_get_machine_name(pid_t pid, char **name) {
         return cg_pid_get_machine_name(pid, name);
 }
 
+_public_ int sd_pid_get_slice(pid_t pid, char **slice) {
+
+        if (pid < 0)
+                return -EINVAL;
+        if (!slice)
+                return -EINVAL;
+
+        return cg_pid_get_slice(pid, slice);
+}
+
 _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
 
         if (pid < 0)
@@ -591,6 +601,10 @@ _public_ int sd_get_uids(uid_t **users) {
         return r;
 }
 
+_public_ int sd_get_machine_names(char ***machines) {
+        return get_files_in_directory("/run/systemd/machines/", machines);
+}
+
 static inline int MONITOR_TO_FD(sd_login_monitor *m) {
         return (int) (unsigned long) m - 1;
 }
@@ -640,6 +654,16 @@ _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) {
                 good = true;
         }
 
+        if (!category || streq(category, "machine")) {
+                k = inotify_add_watch(fd, "/run/systemd/machines/", IN_MOVED_TO|IN_DELETE);
+                if (k < 0) {
+                        close_nointr_nofail(fd);
+                        return -errno;
+                }
+
+                good = true;
+        }
+
         if (!good) {
                 close_nointr(fd);
                 return -EINVAL;