mirror of https://github.com/fairyglade/ly.git
Allowed arbitrary length uids when setting XDG_RUNTIME_DIR
This commit is contained in:
parent
2ffb86213b
commit
f0e38634ef
32
src/login.c
32
src/login.c
|
|
@ -257,16 +257,32 @@ void env_xdg_session(const enum display_server display_server)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned int ilog10(unsigned int n) {
|
||||||
|
unsigned int res = 0;
|
||||||
|
while (n >= 10) {
|
||||||
|
++res;
|
||||||
|
n /= 10;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
void env_xdg(const char* tty_id, const char* desktop_name)
|
void env_xdg(const char* tty_id, const char* desktop_name)
|
||||||
{
|
{
|
||||||
char user[15];
|
uid_t user_uid = getuid();
|
||||||
snprintf(user, 15, "/run/user/%d", getuid());
|
char* xdg_runtime_dir_prefix = "/run/user/";
|
||||||
setenv("XDG_RUNTIME_DIR", user, 0);
|
// ilog10(n) + 1 == number of digits in n
|
||||||
setenv("XDG_SESSION_CLASS", "user", 0);
|
unsigned int xdg_runtime_dir_length = strlen(xdg_runtime_dir_prefix) + ilog10(user_uid) + 1;
|
||||||
setenv("XDG_SESSION_ID", "1", 0);
|
char* user = malloc(sizeof(*user) * (xdg_runtime_dir_length + 1));
|
||||||
setenv("XDG_SESSION_DESKTOP", desktop_name, 0);
|
snprintf(user, xdg_runtime_dir_length + 1, "%s%d", xdg_runtime_dir_prefix, user_uid);
|
||||||
setenv("XDG_SEAT", "seat0", 0);
|
setenv("XDG_RUNTIME_DIR", user, 0);
|
||||||
setenv("XDG_VTNR", tty_id, 0);
|
free(user);
|
||||||
|
user = NULL;
|
||||||
|
|
||||||
|
setenv("XDG_SESSION_CLASS", "user", 0);
|
||||||
|
setenv("XDG_SESSION_ID", "1", 0);
|
||||||
|
setenv("XDG_SESSION_DESKTOP", desktop_name, 0);
|
||||||
|
setenv("XDG_SEAT", "seat0", 0);
|
||||||
|
setenv("XDG_VTNR", tty_id, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_utmp_entry(
|
void add_utmp_entry(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue