git: 925f53682469 - main - improve renice user error messages
Date: Wed, 10 Jun 2026 12:36:02 UTC
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
}