From 3298b0318c7e65abd3a45a6bdbcd0f266d4767d3 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Wed, 5 Aug 2020 20:26:32 +0200 Subject: [PATCH] Userland: Use Core::ArgsParser for 'su' --- Userland/su.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Userland/su.cpp b/Userland/su.cpp index 99aaadc331..5d1fd6b3c5 100644 --- a/Userland/su.cpp +++ b/Userland/su.cpp @@ -25,6 +25,7 @@ */ #include +#include #include #include #include @@ -37,17 +38,22 @@ extern "C" int main(int, char**); int main(int argc, char** argv) { - if (geteuid() != 0) { + const char* user = nullptr; + + Core::ArgsParser args_parser; + args_parser.add_positional_argument(user, "User to switch to (defaults to user with UID 0)", "user", Core::ArgsParser::Required::No); + args_parser.parse(argc, argv); + + if (geteuid() != 0) fprintf(stderr, "Not running as root :(\n"); - } uid_t uid = 0; gid_t gid = 0; struct passwd* pwd = nullptr; - if (argc > 1) { - pwd = getpwnam(argv[1]); + if (user) { + pwd = getpwnam(user); if (!pwd) { - fprintf(stderr, "No such user: %s\n", argv[1]); + fprintf(stderr, "No such user: %s\n", user); return 1; } uid = pwd->pw_uid;