Merge dev into master (closes #182) (#425)

Merge dev into master branch
Co-authored-by: AnErrupTion <anerruption@disroot.org>
This commit is contained in:
ShiningLea
2022-08-12 21:27:06 +02:00
committed by GitHub
parent 86d035346e
commit 09ee6293bd
3 changed files with 33 additions and 13 deletions

View File

@@ -7,6 +7,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <ctype.h>
void handle_desktop(void* input_struct, struct tb_event* event) void handle_desktop(void* input_struct, struct tb_event* event)
{ {
@@ -76,6 +77,7 @@ void handle_text(void* input_struct, struct tb_event* event)
void input_desktop(struct desktop* target) void input_desktop(struct desktop* target)
{ {
target->list = NULL; target->list = NULL;
target->list_simple = NULL;
target->cmd = NULL; target->cmd = NULL;
target->display_server = NULL; target->display_server = NULL;
target->cur = 0; target->cur = 0;
@@ -176,7 +178,8 @@ void input_desktop_add(
{ {
++(target->len); ++(target->len);
target->list = realloc(target->list, target->len * (sizeof (char*))); target->list = realloc(target->list, target->len * (sizeof (char*)));
target->cmd = realloc(target->cmd, target->len * (sizeof (char*))); target->list_simple = realloc(target->list_simple, target->len * (sizeof (char*)));
target->cmd = realloc(target->cmd, target->len * (sizeof (char*)));
target->display_server = realloc( target->display_server = realloc(
target->display_server, target->display_server,
target->len * (sizeof (enum display_server))); target->len * (sizeof (enum display_server)));
@@ -190,8 +193,25 @@ void input_desktop_add(
return; return;
} }
target->list[target->cur] = name; target->list[target->cur] = name;
target->cmd[target->cur] = cmd;
int name_len = strlen(name);
char* name_simple = malloc(name_len);
memcpy(name_simple, name, name_len);
if (strstr(name_simple, " ") != NULL)
{
name_simple = strtok(name_simple, " ");
}
for (int i = 0; i < name_len; i++)
{
name_simple[i] = tolower(name_simple[i]);
}
target->list_simple[target->cur] = name_simple;
target->cmd[target->cur] = cmd;
target->display_server[target->cur] = display_server; target->display_server[target->cur] = display_server;
} }

View File

@@ -23,6 +23,7 @@ struct text
struct desktop struct desktop
{ {
char** list; char** list;
char** list_simple;
char** cmd; char** cmd;
enum display_server* display_server; enum display_server* display_server;

View File

@@ -257,13 +257,14 @@ void env_xdg_session(const enum display_server display_server)
} }
} }
void env_xdg(const char* tty_id) void env_xdg(const char* tty_id, const char* desktop_name)
{ {
char user[15]; char user[15];
snprintf(user, 15, "/run/user/%d", getuid()); snprintf(user, 15, "/run/user/%d", getuid());
setenv("XDG_RUNTIME_DIR", user, 0); setenv("XDG_RUNTIME_DIR", user, 0);
setenv("XDG_SESSION_CLASS", "user", 0); setenv("XDG_SESSION_CLASS", "user", 0);
setenv("XDG_SESSION_ID", "1", 0); setenv("XDG_SESSION_ID", "1", 0);
setenv("XDG_SESSION_DESKTOP", desktop_name, 0);
setenv("XDG_SEAT", "seat0", 0); setenv("XDG_SEAT", "seat0", 0);
setenv("XDG_VTNR", tty_id, 0); setenv("XDG_VTNR", tty_id, 0);
} }
@@ -480,6 +481,13 @@ void auth(
{ {
int ok; int ok;
char tty_id [3];
snprintf(tty_id, 3, "%d", config.tty);
// Add XDG environment variables
env_xdg_session(desktop->display_server[desktop->cur]);
env_xdg(tty_id, desktop->list_simple[desktop->cur]);
// open pam session // open pam session
const char* creds[2] = {login->text, password->text}; const char* creds[2] = {login->text, password->text};
struct pam_conv conv = {login_conv, creds}; struct pam_conv conv = {login_conv, creds};
@@ -487,9 +495,6 @@ void auth(
ok = pam_start(config.service_name, NULL, &conv, &handle); ok = pam_start(config.service_name, NULL, &conv, &handle);
// Set XDG_SESSION_TYPE earlier to fix some bugs
env_xdg_session(desktop->display_server[desktop->cur]);
if (ok != PAM_SUCCESS) if (ok != PAM_SUCCESS)
{ {
pam_diagnose(ok, buf); pam_diagnose(ok, buf);
@@ -590,10 +595,7 @@ void auth(
} }
// get a display // get a display
char tty_id [3];
char vt[5]; char vt[5];
snprintf(tty_id, 3, "%d", config.tty);
snprintf(vt, 5, "vt%d", config.tty); snprintf(vt, 5, "vt%d", config.tty);
// set env // set env
@@ -612,9 +614,6 @@ void auth(
putenv(env[i]); putenv(env[i]);
} }
// add xdg variables
env_xdg(tty_id);
// execute // execute
int ok = chdir(pwd->pw_dir); int ok = chdir(pwd->pw_dir);