|
Packit |
76ec6a |
#include <config.h>
|
|
Packit |
76ec6a |
#include <stdlib.h>
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
#ifdef HAVE_SYSTEMD
|
|
Packit |
76ec6a |
#include <systemd/sd-login.h>
|
|
Packit |
76ec6a |
#endif
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
#include "application.h"
|
|
Packit |
76ec6a |
#include "systemd.h"
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
bool
|
|
Packit |
76ec6a |
procman::systemd_logind_running()
|
|
Packit |
76ec6a |
{
|
|
Packit |
76ec6a |
#ifdef HAVE_SYSTEMD
|
|
Packit |
76ec6a |
static bool init;
|
|
Packit |
76ec6a |
static bool is_running;
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
if (!init) {
|
|
Packit |
76ec6a |
/* check if logind is running */
|
|
Packit |
76ec6a |
if (access("/run/systemd/seats/", F_OK) >= 0) {
|
|
Packit |
76ec6a |
is_running = true;
|
|
Packit |
76ec6a |
}
|
|
Packit |
76ec6a |
init = true;
|
|
Packit |
76ec6a |
}
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
return is_running;
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
#else
|
|
Packit |
76ec6a |
return false;
|
|
Packit |
76ec6a |
#endif
|
|
Packit |
76ec6a |
}
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
void
|
|
Packit |
76ec6a |
procman::get_process_systemd_info(ProcInfo *info)
|
|
Packit |
76ec6a |
{
|
|
Packit |
76ec6a |
#ifdef HAVE_SYSTEMD
|
|
Packit |
76ec6a |
uid_t uid;
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
if (!systemd_logind_running())
|
|
Packit |
76ec6a |
return;
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
char* unit = NULL;
|
|
Packit |
76ec6a |
sd_pid_get_unit(info->pid, &unit);
|
|
Packit |
76ec6a |
info->unit = make_string(unit);
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
char* session = NULL;
|
|
Packit |
76ec6a |
sd_pid_get_session(info->pid, &session);
|
|
Packit |
76ec6a |
info->session = make_string(session);
|
|
Packit |
76ec6a |
|
|
Packit |
76ec6a |
if (!info->session.empty()) {
|
|
Packit |
76ec6a |
char* seat = NULL;
|
|
Packit |
76ec6a |
sd_session_get_seat(info->session.c_str(), &seat;;
|
|
Packit |
76ec6a |
info->seat = make_string(seat);
|
|
Packit |
76ec6a |
}
|
|
Packit |
76ec6a |
if (sd_pid_get_owner_uid(info->pid, &uid) >= 0)
|
|
Packit |
76ec6a |
info->owner = info->lookup_user(uid);
|
|
Packit |
76ec6a |
else
|
|
Packit |
76ec6a |
info->owner = "";
|
|
Packit |
76ec6a |
#endif
|
|
Packit |
76ec6a |
}
|