From 954daaa916bc165efa24b37cd0d233e13f6f5ddb Mon Sep 17 00:00:00 2001 From: 0xtechnobabble <0xtechnobabble@protonmail.com> Date: Sun, 12 Jan 2020 12:13:54 +0200 Subject: [PATCH] Userland: Add named gid/uid args parsing This patch makes it so that if a user provides a groupname/username instead of an id, chown will automatically convert it to a gid/uid using getgrnam() or getpwnam() respectively. --- Userland/chown.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Userland/chown.cpp b/Userland/chown.cpp index c925cd46cb..d2e2411a42 100644 --- a/Userland/chown.cpp +++ b/Userland/chown.cpp @@ -1,4 +1,6 @@ #include +#include +#include #include #include #include @@ -19,17 +21,27 @@ int main(int argc, char** argv) fprintf(stderr, "Empty uid/gid spec\n"); return 1; } + bool ok; new_uid = parts[0].to_uint(ok); if (!ok) { - fprintf(stderr, "Invalid uid: '%s'\n", parts[0].characters()); - return 1; + new_uid = getpwnam(parts[0].characters())->pw_uid; + + if (!new_uid) { + fprintf(stderr, "Invalid uid: '%s'\n", parts[0].characters()); + return 1; + } } + if (parts.size() == 2) { new_gid = parts[1].to_uint(ok); if (!ok) { - fprintf(stderr, "Invalid gid: '%s'\n", parts[1].characters()); - return 1; + new_gid = getgrnam(parts[1].characters())->gr_gid; + + if(!new_gid) { + fprintf(stderr, "Invalid gid: '%s'\n", parts[1].characters()); + return 1; + } } }