logo

utils-std

Collection of commonly available Unix tools
commit: a391c455ff8b8eaa212c1a6258445a8625b7005c
parent a23c423257e11ce3a0ef0f14cf57bade1b20ad0b
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Sun, 31 Mar 2024 15:52:52 +0200

cmd/logname: switch from getlogin to $LOGNAME

POSIX mandates $LOGNAME anyway, matches musl's behavior.

Diffstat:

Mcmd/logname.c16++++++++--------
Mtest-cmd/logname14+++-----------
2 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/cmd/logname.c b/cmd/logname.c @@ -3,23 +3,23 @@ // SPDX-License-Identifier: MPL-2.0 #define _POSIX_C_SOURCE 200809L -#include <stdio.h> // puts, perror -#include <unistd.h> // getlogin +#include <stdio.h> // printf, perror +#include <stdlib.h> // getenv int main(void) { - /* flawfinder: ignore. POSIX requires getlogin(3), which ought to be correct */ - char *name = getlogin(); - if(name == NULL) + // Allows to avoid utmp (glibc…), $LOGNAME also being required to match user's login name + char *logname = getenv("LOGNAME"); + if(logname == NULL) { - perror("logname: getlogin"); + fprintf(stderr, "logname: Error $LOGNAME isn't set (didn't login?)\n"); return 1; } - if(puts(name) < 0) + if(printf("%s\n", logname) < 0) { - perror("puts"); + perror("logname: printf"); return 1; } diff --git a/test-cmd/logname b/test-cmd/logname @@ -2,16 +2,10 @@ # SPDX-FileCopyrightText: 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me> # SPDX-License-Identifier: MPL-2.0 -atf_test_case id -id_body() { - # glibc uses utmp, of all the things… - has_glibc && atf_skip - - atf_check -o "inline:$(id -un)\n" ../cmd/logname -} - atf_test_case environ environ_body() { + test -n "${LOGNAME}" || atf_skip "$LOGNAME not set (wtf)" + atf_check -o "inline:${LOGNAME}\n" ../cmd/logname } @@ -20,7 +14,5 @@ atf_init_test_cases() { . ../test_functions.sh - atf_add_test_case id - - test -n "${LOGNAME}" && atf_add_test_case environ + atf_add_test_case environ }