Blame src/systemd.cpp

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
}