diff --git a/src/login.c b/src/login.c index 9e0cf3d..c814929 100644 --- a/src/login.c +++ b/src/login.c @@ -12,10 +12,12 @@ #include #include #include +#include #include #include #include #include +#include /* ncurses */ #include /* pam */ @@ -204,6 +206,27 @@ const char* de_command, enum deserv_t display_server) return 1; } + /* Initialise user groups */ + /* Get pwd structure for the user to get his group id */ + struct passwd* pw = getpwnam(username); + if (!pw) + { + error_print(strerror(errno)); + + pam_end(login_handle, pam_result); + return 1; + } + + int grp_result = initgroups(username, pw->pw_gid); + + if (grp_result == -1) + { + error_print(strerror(errno)); + + pam_end(login_handle, pam_result); + return 1; + } + /* pam_setcred and error handling */ pam_result = pam_setcred(login_handle, PAM_ESTABLISH_CRED);