diff --git a/Userland/chown.cpp b/Userland/chown.cpp index c925cd46cb4..d2e2411a428 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; + } } }