return cg_pid_get_machine_name(pid, name);
}
-_public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
- int r;
- _cleanup_free_ char *root = NULL, *cgroup = NULL, *p = NULL, *cc = NULL;
- struct stat st;
+_public_ int sd_pid_get_slice(pid_t pid, char **slice) {
if (pid < 0)
return -EINVAL;
-
- if (!uid)
+ if (!slice)
return -EINVAL;
- r = cg_pid_get_path_shifted(pid, &root, &cgroup);
- if (r < 0)
- return r;
-
- if (!startswith(cgroup, "/user/"))
- return -ENOENT;
-
- p = strchr(cgroup + 6, '/');
- if (!p)
- return -ENOENT;
-
- p++;
- p += strcspn(p, "/");
- *p = 0;
-
- r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, root, cgroup, &cc);
-
- if (r < 0)
- return -ENOMEM;
+ return cg_pid_get_slice(pid, slice);
+}
- r = lstat(cc, &st);
+_public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
- if (r < 0)
- return -errno;
+ if (pid < 0)
+ return -EINVAL;
- if (!S_ISDIR(st.st_mode))
- return -ENOTDIR;
+ if (!uid)
+ return -EINVAL;
- *uid = st.st_uid;
- return 0;
+ return cg_pid_get_owner_uid(pid, uid);
}
_public_ int sd_uid_get_state(uid_t uid, char**state) {
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;
}
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;