chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mount: when learning about the root mount from mountinfo, don't add conflicting dep...
[elogind.git]
/
src
/
login
/
logind.c
diff --git
a/src/login/logind.c
b/src/login/logind.c
index 66a786a3f8fab020dc2d281ea32330853b52c483..5a394401dc414e5b09806982b80ca827ad814739 100644
(file)
--- a/
src/login/logind.c
+++ b/
src/login/logind.c
@@
-597,9
+597,9
@@
int manager_enumerate_seats(Manager *m) {
}
static int manager_enumerate_users_from_cgroup(Manager *m) {
}
static int manager_enumerate_users_from_cgroup(Manager *m) {
+ _cleanup_closedir_ DIR *d = NULL;
int r = 0, k;
char *name;
int r = 0, k;
char *name;
- DIR *d;
r = cg_enumerate_subgroups(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_path, &d);
if (r < 0) {
r = cg_enumerate_subgroups(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_path, &d);
if (r < 0) {
@@
-612,31
+612,37
@@
static int manager_enumerate_users_from_cgroup(Manager *m) {
while ((k = cg_read_subgroup(d, &name)) > 0) {
User *user;
while ((k = cg_read_subgroup(d, &name)) > 0) {
User *user;
+ char *e;
- k = manager_add_user_by_name(m, name, &user);
- if (k < 0) {
- free(name);
- r = k;
- continue;
- }
-
- user_add_to_gc_queue(user);
+ e = endswith(name, ".user");
+ if (e) {
+ *e = 0;
- if (!user->cgroup_path)
- if (asprintf(&user->cgroup_path, "%s/%s", m->cgroup_path, name) < 0) {
- r = -ENOMEM;
+ k = manager_add_user_by_name(m, name, &user);
+ if (k < 0) {
free(name);
free(name);
- break;
+ r = k;
+ continue;
}
}
+ user_add_to_gc_queue(user);
+
+ if (!user->cgroup_path) {
+ user->cgroup_path = strjoin(m->cgroup_path, "/", name, NULL);
+ if (!user->cgroup_path) {
+ k = log_oom();
+ free(name);
+ break;
+ }
+ }
+ }
+
free(name);
}
free(name);
}
- if (
r >= 0 &&
k < 0)
+ if (k < 0)
r = k;
r = k;
- closedir(d);
-
return r;
}
return r;
}
@@
-732,7
+738,7
@@
static int manager_enumerate_sessions_from_cgroup(Manager *m) {
int r = 0;
HASHMAP_FOREACH(u, m->users, i) {
int r = 0;
HASHMAP_FOREACH(u, m->users, i) {
-
DIR *d
;
+
_cleanup_closedir_ DIR *d = NULL
;
char *name;
int k;
char *name;
int k;
@@
-751,30
+757,34
@@
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;
+ char *e;
- if (streq(name, "shared"))
- continue;
+ e = endswith(name, ".session");
+ if (e) {
+ *e = 0;
- k = manager_add_session(m, u, name, &session);
- if (k < 0) {
- free(name);
- break;
- }
+ k = manager_add_session(m, u, name, &session);
+ if (k < 0) {
+ free(name);
+ r = k;
+ continue;
+ }
- session_add_to_gc_queue(session);
+
session_add_to_gc_queue(session);
- if (!session->cgroup_path)
- if (asprintf(&session->cgroup_path, "%s/%s", u->cgroup_path, name) < 0) {
- k = -ENOMEM;
- free(name);
- break;
+ if (!session->cgroup_path) {
+ session->cgroup_path = strjoin(m->cgroup_path, "/", name, NULL);
+ if (!session->cgroup_path) {
+ k = log_oom();
+ free(name);
+ break;
+ }
}
}
+ }
free(name);
}
free(name);
}
- closedir(d);
-
if (k < 0)
r = k;
}
if (k < 0)
r = k;
}
@@
-1616,7
+1626,7
@@
int manager_run(Manager *m) {
manager_gc(m, true);
manager_gc(m, true);
- if (m->action_what != 0) {
+ if (m->action_what != 0
&& !m->action_job
) {
usec_t x, y;
x = now(CLOCK_MONOTONIC);
usec_t x, y;
x = now(CLOCK_MONOTONIC);
@@
-1673,13
+1683,12
@@
int manager_run(Manager *m) {
}
static int manager_parse_config_file(Manager *m) {
}
static int manager_parse_config_file(Manager *m) {
-
FILE *f
;
-
const char *fn
;
+
static const char fn[] = "/etc/systemd/logind.conf"
;
+
_cleanup_fclose_ FILE *f = NULL
;
int r;
assert(m);
int r;
assert(m);
- fn = "/etc/systemd/logind.conf";
f = fopen(fn, "re");
if (!f) {
if (errno == ENOENT)
f = fopen(fn, "re");
if (!f) {
if (errno == ENOENT)
@@
-1689,12
+1698,11
@@
static int manager_parse_config_file(Manager *m) {
return -errno;
}
return -errno;
}
- r = config_parse(NULL, fn, f, "Login\0", config_item_perf_lookup, (void*) logind_gperf_lookup, false, m);
+ r = config_parse(NULL, fn, f, "Login\0", config_item_perf_lookup,
+ (void*) logind_gperf_lookup, false, false, m);
if (r < 0)
log_warning("Failed to parse configuration file: %s", strerror(-r));
if (r < 0)
log_warning("Failed to parse configuration file: %s", strerror(-r));
- fclose(f);
-
return r;
}
return r;
}