From 0306c4319b7e383be719bc59b5d08ee86479979a Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 30 Sep 2024 16:11:43 +0300 Subject: [PATCH] fixed --- scripts/build-box.sh | 25 +++++++++++++++++-------- scripts/musuid.c | 15 +++++++++++---- src/su.c | 7 ++++--- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/scripts/build-box.sh b/scripts/build-box.sh index d1f0cdf..ba64c92 100755 --- a/scripts/build-box.sh +++ b/scripts/build-box.sh @@ -2,6 +2,7 @@ cat > mutils.c << EOF #include #include +#include $(for i in $(ls src); do f=$(basename $i .c) @@ -24,20 +25,28 @@ struct cmd { }; int main(int argc, char **argv) { - if (argc > 1) { - argc--; - argv++; + char *prog = basename(argv[0]); + if (argc == 1 && !strcmp(prog, "mutils")) { for (size_t i = 0; i < sizeof(cmds) / sizeof(struct cmd); i++) - if (!strcmp(argv[0], cmds[i].str)) - return cmds[i].func(argc, argv); + printf("%s ", cmds[i].str); + + putchar('\n'); + return 0; + } + + else if (!strcmp(prog, "mutils")) { + argv++; + argc--; + + prog = argv[0]; } for (size_t i = 0; i < sizeof(cmds) / sizeof(struct cmd); i++) - printf("%s ", cmds[i].str); + if (!strcmp(prog, cmds[i].str)) + return cmds[i].func(argc, argv); - putchar('\n'); - return 0; + fprintf(stderr, "mutils: unknown applet %s\n", prog); } EOF diff --git a/scripts/musuid.c b/scripts/musuid.c index fca2b3d..a1c1bbc 100644 --- a/scripts/musuid.c +++ b/scripts/musuid.c @@ -3,23 +3,30 @@ #include #include #include +#include #define _MUSUID_C #include "config.h" const char *progs[] = {"su", "ping"}; int main(int argc, char **argv) { - if (argc == 1) { + char *prog = basename(argv[0]); + + if (argc == 1 && !strcmp(prog, "musuid")) { fputs("musuid: missing operand\n", stderr); return 1; } - argc--; - argv++; + else if (!strcmp(prog, "musuid")) { + argv++; + argc--; + + prog = argv[0]; + } /* RUN */ for (size_t i = 0; i < sizeof(progs) / sizeof(char *); i++) - if (!strcmp(argv[0], progs[i])) + if (!strcmp(prog, progs[i])) execv(MUTILS_PATH, argv); fprintf(stderr, "musuid: unknown command: %s\n", argv[0]); diff --git a/src/su.c b/src/su.c index 6a1a048..05e1652 100644 --- a/src/su.c +++ b/src/su.c @@ -60,23 +60,24 @@ static int password(const struct passwd *pw) { fflush(stdout); if (hide_input(STDIN_FILENO, 1)) { - fprintf(stderr, "su: %s\n", strerror(errno)); + fprintf(stderr, "\nsu: %s\n", strerror(errno)); return 1; } off_t ret = 0; if ((ret = read(STDIN_FILENO, psswd, sizeof(psswd))) <= 0) { - fprintf(stderr, "su: %s\n", strerror(errno)); + fprintf(stderr, "\nsu: %s\n", strerror(errno)); return 1; } + putchar('\n'); + psswd[ret - 1] = '\0'; if (pw_check("su", pw, psswd)) { memset(psswd, '\0', sizeof(psswd)); return 1; } - printf("\n"); memset(psswd, '\0', sizeof(psswd)); return 0; }