Date: Wed, 10 Jun 2026 12:36:02 +0000 From: Warner Losh <imp@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: androvonx95 <androvonx95@tutamail.com> Subject: git: 925f53682469 - main - improve renice user error messages Message-ID: <6a295a32.3e002.31d3fa83@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=925f53682469ea12c017b48114b16e8f1627fb0b commit 925f53682469ea12c017b48114b16e8f1627fb0b Author: androvonx95 <androvonx95@tutamail.com> AuthorDate: 2025-07-15 18:01:28 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2026-06-10 12:35:02 +0000 improve renice user error messages Improve error handling for invalid user names and UIDs in renice: - Use warnx() and err() for consistent error reporting - Set errno = EINVAL for invalid input - Provide clearer error messages for invalid user names and UIDs - Add test cases for invalid user input Signed-off-by: androvonx95 <androvonx95@tutamail.com> Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/1768 --- usr.bin/renice/renice.c | 31 +++++++++++++++++--- usr.bin/renice/tests/renice_test.sh | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 4 deletions(-) diff --git a/usr.bin/renice/renice.c b/usr.bin/renice/renice.c index 4931a39c0f67..240ddf54134c 100644 --- a/usr.bin/renice/renice.c +++ b/usr.bin/renice/renice.c @@ -97,6 +97,7 @@ main(int argc, char *argv[]) if ((pwd = getpwnam(*argv)) != NULL) who = pwd->pw_uid; else if (getnum("uid", *argv, &who)) { + warnx("invalid uid: %s", *argv); errs++; continue; } else if (who < 0) { @@ -106,6 +107,7 @@ main(int argc, char *argv[]) } } else { if (getnum("pid", *argv, &who)) { + warnx("invalid pid: %s", *argv); errs++; continue; } @@ -126,11 +128,27 @@ static int donice(int which, int who, int prio, bool incr) { int oldprio; + const char *who_type; + + switch (which) { + case PRIO_PROCESS: + who_type = "process"; + break; + case PRIO_PGRP: + who_type = "process group"; + break; + case PRIO_USER: + who_type = "user"; + break; + default: + who_type = "unknown"; + break; + } errno = 0; oldprio = getpriority(which, who); if (oldprio == -1 && errno) { - warn("%d: getpriority", who); + warnx("%s %d: getpriority failed", who_type, who); return (1); } if (incr) @@ -140,11 +158,16 @@ donice(int which, int who, int prio, bool incr) if (prio < PRIO_MIN) prio = PRIO_MIN; if (setpriority(which, who, prio) < 0) { - warn("%d: setpriority", who); + if (errno == EPERM) { + warnx("Permission denied: cannot set priority for %s %d", + who_type, who); + return (1); + } + warnx("%s %d: setpriority failed", who_type, who); return (1); } - fprintf(stderr, "%d: old priority %d, new priority %d\n", who, - oldprio, prio); + fprintf(stderr, "%s %d: old priority %d, new priority %d\n", who_type, + who, oldprio, prio); return (0); } diff --git a/usr.bin/renice/tests/renice_test.sh b/usr.bin/renice/tests/renice_test.sh index 7983eb594716..116f1be60fe9 100755 --- a/usr.bin/renice/tests/renice_test.sh +++ b/usr.bin/renice/tests/renice_test.sh @@ -51,6 +51,50 @@ renice_rel_pid_body() { kill $pid } +atf_test_case renice_invalid_priority +renice_invalid_priority_head() { + atf_set "descr" "Verify handling of invalid priority values" +} +renice_invalid_priority_body() { + local pid + sleep 60 & + pid=$! + + # Test out of range priority + atf_check -s exit:1 -e match:"numeric value out of range" renice 100000 $pid + atf_check -s exit:1 -e match:"numeric value out of range" renice -100000 $pid + + # Test invalid priority format + atf_check -s exit:1 -e match:"invalid numeric value" renice "abc" $pid + atf_check -s exit:1 -e match:"invalid numeric value" renice "12.3" $pid + + kill $pid +} + +atf_test_case renice_permission_denied +renice_permission_denied_head() { + atf_set "descr" "Verify handling of permission denied cases" +} +renice_permission_denied_body() { + local pid + sleep 60 & + pid=$! + + # Test permission denied with non-root user + atf_check -s exit:1 -e match:"Permission denied: cannot set priority" renice -n 10 $pid + + kill $pid +} + +atf_test_case renice_nonexistent_process +renice_nonexistent_process_head() { + atf_set "descr" "Verify handling of non-existent process" +} +renice_nonexistent_process_body() { + # Test with a non-existent PID + atf_check -s exit:1 -e match:"process 999999 not found" renice 10 999999 +} + atf_test_case renice_abs_pgid renice_abs_pgid_head() { atf_set "descr" "Set a process group's nice number to an absolute value" @@ -115,6 +159,18 @@ renice_rel_user_body() { kill $pid } +atf_test_case renice_invalid_user +renice_invalid_user_head() { + atf_set "descr" "Verify handling of invalid user names" +} +renice_invalid_user_body() { + # Test with non-existent user name + atf_check -s exit:1 -e match:"Invalid user name or UID: nonexist" renice 10 -u nonexist + + # Test with invalid UID + atf_check -s exit:1 -e match:"Invalid UID: -1" renice 10 -u -1 +} + atf_test_case renice_delim renice_delim_head() { atf_set "descr" "Test various delimiter positions" @@ -169,6 +225,7 @@ atf_init_test_cases() { atf_add_test_case renice_rel_pgid atf_add_test_case renice_abs_user atf_add_test_case renice_rel_user + atf_add_test_case renice_invalid_user atf_add_test_case renice_delim atf_add_test_case renice_incr_noarg }home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a295a32.3e002.31d3fa83>
