chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
conf-parser: restrict .include usage
[elogind.git]
/
src
/
login
/
logind.c
diff --git
a/src/login/logind.c
b/src/login/logind.c
index 63422f4c323f947e829724623666d2a422667aed..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;
}
@@
-1041,16
+1051,13
@@
int manager_get_session_by_cgroup(Manager *m, const char *cgroup, Session **sess
return 1;
}
return 1;
}
- p = strdup(cgroup);
- if (!p)
- return log_oom();
+ p = strdupa(cgroup);
for (;;) {
char *e;
e = strrchr(p, '/');
if (!e || e == p) {
for (;;) {
char *e;
e = strrchr(p, '/');
if (!e || e == p) {
- free(p);
*session = NULL;
return 0;
}
*session = NULL;
return 0;
}
@@
-1059,7
+1066,6
@@
int manager_get_session_by_cgroup(Manager *m, const char *cgroup, Session **sess
s = hashmap_get(m->session_cgroups, p);
if (s) {
s = hashmap_get(m->session_cgroups, p);
if (s) {
- free(p);
*session = s;
return 1;
}
*session = s;
return 1;
}
@@
-1080,7
+1086,7
@@
int manager_get_user_by_cgroup(Manager *m, const char *cgroup, User **user) {
return 1;
}
return 1;
}
- p = strdup(cgroup);
+ p = strdup
a
(cgroup);
if (!p)
return log_oom();
if (!p)
return log_oom();
@@
-1089,7
+1095,6
@@
int manager_get_user_by_cgroup(Manager *m, const char *cgroup, User **user) {
e = strrchr(p, '/');
if (!e || e == p) {
e = strrchr(p, '/');
if (!e || e == p) {
- free(p);
*user = NULL;
return 0;
}
*user = NULL;
return 0;
}
@@
-1098,7
+1103,6
@@
int manager_get_user_by_cgroup(Manager *m, const char *cgroup, User **user) {
u = hashmap_get(m->user_cgroups, p);
if (u) {
u = hashmap_get(m->user_cgroups, p);
if (u) {
- free(p);
*user = u;
return 1;
}
*user = u;
return 1;
}
@@
-1106,21
+1110,18
@@
int manager_get_user_by_cgroup(Manager *m, const char *cgroup, User **user) {
}
int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) {
}
int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) {
-
char *p
;
+
_cleanup_free_ char *p = NULL
;
int r;
assert(m);
assert(pid >= 1);
assert(session);
int r;
assert(m);
assert(pid >= 1);
assert(session);
- r = cg_
get_by_pid
(SYSTEMD_CGROUP_CONTROLLER, pid, &p);
+ r = cg_
pid_get_path
(SYSTEMD_CGROUP_CONTROLLER, pid, &p);
if (r < 0)
return r;
if (r < 0)
return r;
- r = manager_get_session_by_cgroup(m, p, session);
- free(p);
-
- return r;
+ return manager_get_session_by_cgroup(m, p, session);
}
void manager_cgroup_notify_empty(Manager *m, const char *cgroup) {
}
void manager_cgroup_notify_empty(Manager *m, const char *cgroup) {
@@
-1625,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);
@@
-1682,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)
@@
-1698,12
+1698,11
@@
static int manager_parse_config_file(Manager *m) {
return -errno;
}
return -errno;
}
- r = config_parse(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;
}