logo

skeud

Simple and portable utilities to deal with user accounts (su, login)
commit: 4a9ca2b7d367cd1ef59d8c76bafee650f4da2030
parent 87a83ec16d0f2fe7eae80143c107ca9dd5042435
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Thu,  3 Nov 2022 02:31:05 +0100

login: fchmod + initgroups

Diffstat:

Mlogin.c30++++++++++++++++++++----------
1 file changed, 20 insertions(+), 10 deletions(-)

diff --git a/login.c b/login.c @@ -2,7 +2,7 @@ // SPDX-License-Identifier: AGPL-3.0-only #define _POSIX_C_SOURCE 200809L -// for explicit_bzero +// for explicit_bzero, initgroups #define _DEFAULT_SOURCE #ifdef __linux__ @@ -12,17 +12,19 @@ #include "common.h" // skeud_getpass, skeud_crypt_check -#include <assert.h> // assert -#include <errno.h> // errno -#include <grp.h> // getgrnam -#include <pwd.h> // getpwnam -#include <stdbool.h> // bool -#include <stdio.h> // fprintf, perror -#include <stdlib.h> // abort, setenv -#include <string.h> // strcmp, explicit_bzero -#include <unistd.h> // getuid, getopt, opt*, chdir, setuid, setgid, fchown +#include <assert.h> // assert +#include <errno.h> // errno +#include <grp.h> // getgrnam, initgroups +#include <pwd.h> // getpwnam +#include <stdbool.h> // bool +#include <stdio.h> // fprintf, perror +#include <stdlib.h> // abort, setenv +#include <string.h> // strcmp, explicit_bzero +#include <sys/stat.h> // fchmod +#include <unistd.h> // getuid, getopt, opt*, chdir, setuid, setgid, fchown #define TTY_GROUP "tty" +#define TTY_PERMS 0600 extern char **environ; char *envclear[] = {NULL}; @@ -190,10 +192,18 @@ main(int argc, char *argv[]) { perror("login: fchown"); } + if(fchmod(STDIN_FILENO, TTY_PERMS)) + { + perror("login: fchmod"); + } if(setgid(pwent->pw_gid) < 0) { perror("login: setgid"); } + if(initgroups(pwent->pw_name, pwent->pw_gid) < 0) + { + perror("login: initgroups"); + } if(setuid(pwent->pw_uid) < 0) { perror("login: setuid");