1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2024-12-24 21:34:08 +03:00

logind: get rid of X11 display socket symlink

X11 never made use of it anyway and it's probably better to just push
$DISPLAY into the systemd daemon from gnome-session (or equivalent
program) than to change libX11 to look for this socket. In particular
since we won't need this for Wayland anyway and we shouldn't add
infrastructure for stuff that's on its way out anyway.
This commit is contained in:
Lennart Poettering 2014-01-15 15:19:17 +08:00
parent f89a4474e0
commit 6a38d04a03

View File

@ -444,72 +444,6 @@ int session_activate(Session *s) {
return 0;
}
static int session_link_x11_socket(Session *s) {
_cleanup_free_ char *t = NULL, *f = NULL;
char *c;
size_t k;
assert(s);
assert(s->user);
assert(s->user->runtime_path);
if (s->user->display)
return 0;
if (!s->display || !display_is_local(s->display))
return 0;
k = strspn(s->display+1, "0123456789");
f = new(char, sizeof("/tmp/.X11-unix/X") + k);
if (!f)
return log_oom();
c = stpcpy(f, "/tmp/.X11-unix/X");
memcpy(c, s->display+1, k);
c[k] = 0;
if (access(f, F_OK) < 0) {
log_warning("Session %s has display %s with non-existing socket %s.", s->id, s->display, f);
return -ENOENT;
}
/* Note that this cannot be in a subdir to avoid
* vulnerabilities since we are privileged but the runtime
* path is owned by the user */
t = strappend(s->user->runtime_path, "/X11-display");
if (!t)
return log_oom();
if (link(f, t) < 0) {
if (errno == EEXIST) {
unlink(t);
if (link(f, t) >= 0)
goto done;
}
if (symlink(f, t) < 0) {
if (errno == EEXIST) {
unlink(t);
if (symlink(f, t) >= 0)
goto done;
}
log_error("Failed to link %s to %s: %m", f, t);
return -errno;
}
}
done:
log_info("Linked %s to %s.", f, t);
s->user->display = s;
return 0;
}
static int session_start_scope(Session *s) {
int r;
@ -581,9 +515,6 @@ int session_start(Session *s) {
"MESSAGE=New session %s of user %s.", s->id, s->user->name,
NULL);
/* Create X11 symlink */
session_link_x11_socket(s);
if (!dual_timestamp_is_set(&s->timestamp))
dual_timestamp_get(&s->timestamp);
@ -634,26 +565,6 @@ static int session_stop_scope(Session *s) {
return 0;
}
static int session_unlink_x11_socket(Session *s) {
_cleanup_free_ char *t = NULL;
int r;
assert(s);
assert(s->user);
if (s->user->display != s)
return 0;
s->user->display = NULL;
t = strappend(s->user->runtime_path, "/X11-display");
if (!t)
return log_oom();
r = unlink(t);
return r < 0 ? -errno : 0;
}
int session_stop(Session *s) {
int r;
@ -693,9 +604,6 @@ int session_finalize(Session *s) {
while ((sd = hashmap_first(s->devices)))
session_device_free(sd);
/* Remove X11 symlink */
session_unlink_x11_socket(s);
unlink(s->state_file);
session_add_to_gc_queue(s);
user_add_to_gc_queue(s->user);