chiark / gitweb /
Start ctrl-alt-del.target irreversibly
[elogind.git] / src / login / sd-login.c
index 35deb85f2dbc58b7c3a4d16cd00ffc6338979f64..d0dc42f685977fde230f1d951e7409d79c56f2f6 100644 (file)
@@ -591,14 +591,14 @@ _public_ int sd_get_uids(uid_t **users) {
         return r;
 }
 
-int sd_get_machine_names(char ***machines) {
+_public_ int sd_get_machine_names(char ***machines) {
         _cleanup_closedir_ DIR *d = NULL;
         _cleanup_strv_free_ char **l = NULL;
         _cleanup_free_ char *md = NULL;
         char *n;
         int c = 0, r;
 
-        r = cg_get_machine_path(&md);
+        r = cg_get_machine_path(NULL, &md);
         if (r < 0)
                 return r;
 
@@ -677,6 +677,27 @@ _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) {
                 good = true;
         }
 
+        if (!category || streq(category, "machine")) {
+                _cleanup_free_ char *md = NULL, *p = NULL;
+                int r;
+
+                r = cg_get_machine_path(NULL, &md);
+                if (r < 0)
+                        return r;
+
+                r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, md, NULL, &p);
+                if (r < 0)
+                        return r;
+
+                k = inotify_add_watch(fd, p, IN_MOVED_TO|IN_CREATE|IN_DELETE);
+                if (k < 0) {
+                        close_nointr_nofail(fd);
+                        return -errno;
+                }
+
+                good = true;
+        }
+
         if (!good) {
                 close_nointr(fd);
                 return -EINVAL;