chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
logind: properly write user state files
[elogind.git]
/
src
/
logind.c
diff --git
a/src/logind.c
b/src/logind.c
index cbc878e68234a01a27edb2d1537e7c4e7a58c126..8b99065b23f6c5c6aaa335d819df9ff58c68b289 100644
(file)
--- a/
src/logind.c
+++ b/
src/logind.c
@@
-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) {
}
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);
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) {
}
int manager_add_user_by_uid(Manager *m, uid_t uid, User **_user) {
@@
-451,7
+452,6
@@
static int manager_enumerate_users_from_cgroup(Manager *m) {
return r;
}
return r;
}
-
static int manager_enumerate_linger_users(Manager *m) {
DIR *d;
struct dirent *de;
static int manager_enumerate_linger_users(Manager *m) {
DIR *d;
struct dirent *de;
@@
-510,19
+510,19
@@
int manager_enumerate_users(Manager *m) {
}
while ((de = readdir(d))) {
}
while ((de = readdir(d))) {
- u
nsigned long ul
;
+ u
id_t uid
;
User *u;
if (!dirent_is_file(de))
continue;
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;
}
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(u
l
));
+ u = hashmap_get(m->users, ULONG_TO_PTR(u
id
));
if (!u) {
unlinkat(dirfd(d), de->d_name, 0);
continue;
if (!u) {
unlinkat(dirfd(d), de->d_name, 0);
continue;
@@
-564,6
+564,9
@@
static int manager_enumerate_sessions_from_cgroup(Manager *m) {
while ((k = cg_read_subgroup(d, &name)) > 0) {
Session *session;
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);
k = manager_add_session(m, u, name, &session);
if (k < 0) {
free(name);