X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flogin%2Flogind-core.c;h=041593c5ab933f673fcda5ff451d521e8f7d0897;hp=67b03623acccb20dd24f11a0a9053403e94bc864;hb=162255186046fa7a5e82859b7dba5a7909ce6fc4;hpb=6f5035f2db6ab7b4beae46c44b95e6a8b6d956b5 diff --git a/src/login/logind-core.c b/src/login/logind-core.c index 67b03623a..041593c5a 100644 --- a/src/login/logind-core.c +++ b/src/login/logind-core.c @@ -311,24 +311,41 @@ int manager_process_button_device(Manager *m, struct udev_device *d) { } int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) { + _cleanup_free_ char *session_name = NULL; + Session *s; + int r; + assert(m); assert(session); - /* Without cgroups, we have no way to map from pid to - session. */ - return 0; + if (pid < 1) + return -EINVAL; + + r = cg_pid_get_session(pid, &session_name); + if (r < 0) + return 0; + + s = hashmap_get(m->sessions, session_name); + if (!s) + return 0; + + *session = s; + return 1; } int manager_get_user_by_pid(Manager *m, pid_t pid, User **user) { + Session *s; + int r; + assert(m); assert(user); - if (pid < 1) - return -EINVAL; + r = manager_get_session_by_pid (m, pid, &s); + if (r <= 0) + return r; - /* Without cgroups, we have no way to map from pid to - user. */ - return 0; + *user = s->user; + return 1; } int manager_get_idle_hint(Manager *m, dual_timestamp *t) {