From 66cdd0f2d0670b054bd27dad16fcb5838b11dde3 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 14 Mar 2014 01:38:19 +0100 Subject: logind: automatically remove SysV + POSIX IPC objects when the users owning them fully log out --- src/login/logind-gperf.gperf | 1 + src/login/logind-user.c | 8 ++++++++ src/login/logind.c | 1 + src/login/logind.conf | 1 + src/login/logind.h | 2 ++ 5 files changed, 13 insertions(+) (limited to 'src/login') diff --git a/src/login/logind-gperf.gperf b/src/login/logind-gperf.gperf index d870f88cd8..006f7286c5 100644 --- a/src/login/logind-gperf.gperf +++ b/src/login/logind-gperf.gperf @@ -31,3 +31,4 @@ Login.LidSwitchIgnoreInhibited, config_parse_bool, 0, offsetof(Manag Login.IdleAction, config_parse_handle_action, 0, offsetof(Manager, idle_action) Login.IdleActionSec, config_parse_sec, 0, offsetof(Manager, idle_action_usec) Login.RuntimeDirectorySize, config_parse_tmpfs_size, 0, offsetof(Manager, runtime_dir_size) +Login.RemoveIPC, config_parse_bool, 0, offsetof(Manager, remove_ipc) diff --git a/src/login/logind-user.c b/src/login/logind-user.c index 9bbe879571..961cbcb27b 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -35,6 +35,7 @@ #include "bus-util.h" #include "bus-error.h" #include "conf-parser.h" +#include "clean-ipc.h" #include "logind-user.h" User* user_new(Manager *m, uid_t uid, gid_t gid, const char *name) { @@ -572,6 +573,13 @@ int user_finalize(User *u) { if (k < 0) r = k; + /* Clean SysV + POSIX IPC objects */ + if (u->manager->remove_ipc) { + k = clean_ipc(u->uid); + if (k < 0) + r = k; + } + unlink(u->state_file); user_add_to_gc_queue(u); diff --git a/src/login/logind.c b/src/login/logind.c index 2d734ff26f..8ba8a9155b 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -49,6 +49,7 @@ Manager *manager_new(void) { m->n_autovts = 6; m->reserve_vt = 6; + m->remove_ipc = true; m->inhibit_delay_max = 5 * USEC_PER_SEC; m->handle_power_key = HANDLE_POWEROFF; m->handle_suspend_key = HANDLE_SUSPEND; diff --git a/src/login/logind.conf b/src/login/logind.conf index ddc23b8aca..79f96ec05b 100644 --- a/src/login/logind.conf +++ b/src/login/logind.conf @@ -25,3 +25,4 @@ #IdleAction=ignore #IdleActionSec=30min #RuntimeDirectorySize=10% +#RemoveIPC=yes diff --git a/src/login/logind.h b/src/login/logind.h index 533554d4bb..31353eff02 100644 --- a/src/login/logind.h +++ b/src/login/logind.h @@ -120,6 +120,8 @@ struct Manager { bool hibernate_key_ignore_inhibited; bool lid_switch_ignore_inhibited; + bool remove_ipc; + Hashmap *polkit_registry; sd_event_source *lid_switch_ignore_event_source; -- cgit v1.2.3-54-g00ecf