Beispiel #1
0
_public_ int sd_pid_get_session(pid_t pid, char **session) {

        assert_return(pid >= 0, -EINVAL);
        assert_return(session, -EINVAL);

        return cg_pid_get_session(pid, session);
}
Beispiel #2
0
_public_ int sd_pid_get_session(pid_t pid, char **session) {
        int r;

        assert_return(pid >= 0, -EINVAL);
        assert_return(session, -EINVAL);

        r = cg_pid_get_session(pid, session);
        return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
}
Beispiel #3
0
_public_ int sd_peer_get_session(int fd, char **session) {
        struct ucred ucred;
        int r;

        assert_return(fd >= 0, -EINVAL);
        assert_return(session, -EINVAL);

        r = getpeercred(fd, &ucred);
        if (r < 0)
                return r;

        return cg_pid_get_session(ucred.pid, session);
}
Beispiel #4
0
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);
        }
}