}
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) {
if (streq_ptr(udev_device_get_action(d), "remove")) {
- /* FIXME: use syspath instead of sysname here, as soon as fb driver is fixed */
- device = hashmap_get(m->devices, udev_device_get_sysname(d));
+ device = hashmap_get(m->devices, udev_device_get_syspath(d));
if (!device)
return 0;
Seat *seat;
sn = udev_device_get_property_value(d, "ID_SEAT");
- if (!sn)
+ if (isempty(sn))
sn = "seat0";
if (!seat_name_is_valid(sn)) {
return 0;
}
- r = manager_add_device(m, udev_device_get_sysname(d), &device);
+ r = manager_add_device(m, udev_device_get_syspath(d), &device);
if (r < 0)
return r;
return r;
}
-
static int manager_enumerate_linger_users(Manager *m) {
DIR *d;
struct dirent *de;
}
while ((de = readdir(d))) {
- unsigned long ul;
+ uid_t uid;
User *u;
if (!dirent_is_file(de))
continue;
- k = safe_atolu(de->d_name, &ul);
+ k = parse_uid(de->d_name, &uid);
if (k < 0) {
log_error("Failed to parse file name %s: %s", de->d_name, strerror(-k));
continue;
}
- u = hashmap_get(m->users, ULONG_TO_PTR(ul));
+ u = hashmap_get(m->users, ULONG_TO_PTR(uid));
if (!u) {
unlinkat(dirfd(d), de->d_name, 0);
continue;
while ((k = cg_read_subgroup(d, &name)) > 0) {
Session *session;
+ if (streq(name, "shared"))
+ continue;
+
k = manager_add_session(m, u, name, &session);
if (k < 0) {
free(name);
}
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;
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));
log_parse_environment();
log_open();
+ umask(0022);
+
if (argc != 1) {
log_error("This program takes no arguments.");
r = -EINVAL;
goto finish;
}
- umask(0022);
-
m = manager_new();
if (!m) {
log_error("Out of memory");