commit: 09815c82a7b003c2e3bb3a58e0a5e5841ae16ad7
parent 30c49724fd5111e3c1e5497ecabfc919877d22d1
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Tue, 23 Sep 2025 11:11:38 +0200
login: separate getline buffer
Diffstat:
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/login.c b/login.c
@@ -92,21 +92,24 @@ main(int argc, char *argv[])
}
}
+ char *username_buf = NULL;
if(username == NULL)
{
size_t len = 0;
- printf("username: ");
- ssize_t got = getline(&username, &len, stdin);
+ fputs("username: ", stdout);
+ ssize_t got = getline(&username_buf, &len, stdin);
if(got < 0)
{
if(errno != 0) perror("login: error: getline");
- free(username);
+ free(username_buf);
return 1;
}
- username[got] = 0;
- username[got - 1] = 0;
+ username_buf[got] = 0;
+ username_buf[got - 1] = 0;
+
+ username = username_buf;
}
if(username == NULL) return 1;
@@ -150,7 +153,7 @@ main(int argc, char *argv[])
ssize_t got = skeud_getpass(&password);
if(got < 0)
{
- free(username);
+ free(username_buf);
free(password);
return 1;
}
@@ -163,7 +166,7 @@ main(int argc, char *argv[])
if(!valid_p)
{
- free(username);
+ free(username_buf);
sleep(2);
fprintf(stderr, "login: error: Invalid username or password\n");
return 1;
@@ -245,7 +248,7 @@ main(int argc, char *argv[])
setenv("SHELL", shell, 1);
setenv("IFS", " \t\n", 1);
- free(username);
+ free(username_buf);
errno = 0;
/* flawfinder: ignore CWE-78 */