_public_ int sd_pid_get_machine_name(pid_t pid, char **name) { assert_return(pid >= 0, -EINVAL); assert_return(name, -EINVAL); return cg_pid_get_machine_name(pid, name); }
_public_ int sd_pid_get_machine_name(pid_t pid, char **name) { int r; assert_return(pid >= 0, -EINVAL); assert_return(name, -EINVAL); r = cg_pid_get_machine_name(pid, name); return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r; }
_public_ int sd_peer_get_machine_name(int fd, char **machine) { struct ucred ucred; int r; assert_return(fd >= 0, -EINVAL); assert_return(machine, -EINVAL); r = getpeercred(fd, &ucred); if (r < 0) return r; return cg_pid_get_machine_name(ucred.pid, machine); }
static void test_proc(void) { _cleanup_closedir_ DIR *d = NULL; struct dirent *de; int r; d = opendir("/proc"); assert_se(d); FOREACH_DIRENT(de, d, break) { _cleanup_free_ char *path = NULL, *path_shifted = NULL, *session = NULL, *unit = NULL, *user_unit = NULL, *machine = NULL, *slice = NULL; pid_t pid; uid_t uid = UID_INVALID; if (de->d_type != DT_DIR && de->d_type != DT_UNKNOWN) continue; r = parse_pid(de->d_name, &pid); if (r < 0) continue; if (is_kernel_thread(pid)) continue; cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, pid, &path); cg_pid_get_path_shifted(pid, NULL, &path_shifted); cg_pid_get_owner_uid(pid, &uid); cg_pid_get_session(pid, &session); cg_pid_get_unit(pid, &unit); cg_pid_get_user_unit(pid, &user_unit); cg_pid_get_machine_name(pid, &machine); cg_pid_get_slice(pid, &slice); printf(PID_FMT"\t%s\t%s\t"UID_FMT"\t%s\t%s\t%s\t%s\t%s\n", pid, path, path_shifted, uid, session, unit, user_unit, machine, slice); } }