chiark / gitweb /
load-fragment: speed up parsing by using a perfect hash table with configuration...
[elogind.git] / src / logind.c
index a081501a8cefce1da2a0c324ef7556fc66765bb8..ca48aa137fa4b9b75f03e1f7610c269f1007c0c6 100644 (file)
@@ -239,17 +239,18 @@ int manager_add_user(Manager *m, uid_t uid, gid_t gid, const char *name, User **
 }
 
 int manager_add_user_by_name(Manager *m, const char *name, User **_user) {
-        struct passwd *p;
+        uid_t uid;
+        gid_t gid;
+        int r;
 
         assert(m);
         assert(name);
 
-        errno = 0;
-        p = getpwnam(name);
-        if (!p)
-                return errno ? -errno : -ENOENT;
+        r = get_user_creds(&name, &uid, &gid, NULL);
+        if (r < 0)
+                return r;
 
-        return manager_add_user(m, p->pw_uid, p->pw_gid, name, _user);
+        return manager_add_user(m, uid, gid, name, _user);
 }
 
 int manager_add_user_by_uid(Manager *m, uid_t uid, User **_user) {
@@ -1159,22 +1160,6 @@ int manager_run(Manager *m) {
 }
 
 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" },
-                { "KillOnlyUsers",     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;
@@ -1191,7 +1176,7 @@ static int manager_parse_config_file(Manager *m) {
                 return -errno;
         }
 
-        r = config_parse(fn, f, sections, items, false, NULL);
+        r = config_parse(fn, f, "Login\0", config_item_perf_lookup, (void*) logind_gperf_lookup, false, m);
         if (r < 0)
                 log_warning("Failed to parse configuration file: %s", strerror(-r));