summaryrefslogtreecommitdiff
path: root/src/logind.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2011-06-29 01:47:55 +0200
committerLennart Poettering <lennart@poettering.net>2011-06-29 01:47:55 +0200
commit193197e85ccc5622abd9653dcd939712334d3ea3 (patch)
tree369f6a532af4c54ed653faf036a2e010c6c703b5 /src/logind.c
parent932e3ee76ea0a9d28902f694ad1873e37532da35 (diff)
logind: parse configuration file
Diffstat (limited to 'src/logind.c')
-rw-r--r--src/logind.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/logind.c b/src/logind.c
index d38d7d51c3..fd17d80541 100644
--- a/src/logind.c
+++ b/src/logind.c
@@ -32,6 +32,8 @@
#include "logind.h"
#include "dbus-common.h"
#include "dbus-loop.h"
+#include "strv.h"
+#include "conf-parser.h"
Manager *manager_new(void) {
Manager *m;
@@ -124,6 +126,11 @@ void manager_free(Manager *m) {
if (m->epoll_fd >= 0)
close_nointr_nofail(m->epoll_fd);
+ strv_free(m->controllers);
+ strv_free(m->reset_controllers);
+ strv_free(m->kill_only_users);
+ strv_free(m->kill_exclude_users);
+
free(m->cgroup_path);
free(m);
}
@@ -1144,6 +1151,48 @@ int manager_run(Manager *m) {
return 0;
}
+static int manager_parse_config_file(Manager *m) {
+
+ const ConfigItem items[] = {
+ { "NAutoVTs", config_parse_unsigned, 0, &m->n_autovts, "Login" },
+ { "KillUserProcesses", config_parse_bool, 0, &m->kill_user_processes, "Login" },
+ { "KilOnlyUsers", config_parse_strv, 0, &m->kill_only_users, "Login" },
+ { "KillExcludeUsers", config_parse_strv, 0, &m->kill_exclude_users, "Login" },
+ { "Controllers", config_parse_strv, 0, &m->controllers, "Login" },
+ { "ResetControllers", config_parse_strv, 0, &m->reset_controllers, "Login" },
+ { NULL, NULL, 0, NULL, NULL }
+ };
+
+ static const char * const sections[] = {
+ "Login",
+ NULL
+ };
+
+ FILE *f;
+ const char *fn;
+ int r;
+
+ assert(m);
+
+ fn = "/etc/systemd/systemd-logind.conf";
+ f = fopen(fn, "re");
+ if (!f) {
+ if (errno == ENOENT)
+ return 0;
+
+ log_warning("Failed to open configuration file %s: %m", fn);
+ return -errno;
+ }
+
+ r = config_parse(fn, f, sections, items, false, NULL);
+ if (r < 0)
+ log_warning("Failed to parse configuration file: %s", strerror(-r));
+
+ fclose(f);
+
+ return r;
+}
+
int main(int argc, char *argv[]) {
Manager *m = NULL;
int r;
@@ -1167,6 +1216,8 @@ int main(int argc, char *argv[]) {
goto finish;
}
+ manager_parse_config_file(m);
+
r = manager_startup(m);
if (r < 0) {
log_error("Failed to fully start up daemon: %s", strerror(-r));