"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Christian Weisgerber <naddy@mips.inka.de>
Subject:
stop using unportable and error-prone [UG]ID_MAX
To:
gameoftrees@openbsd.org
Date:
Fri, 25 Sep 2026 15:16:36 +0200

Download raw body.

Thread
UID_MAX and GID_MAX are not portable and their use is prone to errors.
It looks like they will be going away from the OpenBSD headers.

ok?

-----------------------------------------------
commit e73fbdb3419bfd66074325ca34db7d2f06bc53be (ugid_max)
from: Christian Weisgerber <naddy@mips.inka.de>
date: Fri Sep 25 13:03:50 2026 UTC
 
 stop using unportable and error-prone [UG]ID_MAX
 
 M  gotd/auth.c                                        |  2+  2-
 M  gotd/gotd.c                                        |  2+  2-
 M  gotd/parse.y                                       |  2+  2-
 M  gotsysd/auth.c                                     |  2+  2-
 M  gotsysd/gotsysd.c                                  |  2+  2-
 M  gotsysd/libexec/gotsys-groupadd/gotsys-groupadd.c  |  1+  1-
 M  gotsysd/libexec/gotsys-useradd/gotsys-useradd.c    |  2+  2-
 M  gotsysd/libexec/gotsys-userhome/gotsys-userhome.c  |  2+  2-
 M  gotsysd/parse.y                                    |  7+  7-
 M  gotwebd/auth.c                                     |  4+  4-

10 files changed, 26 insertions(+), 26 deletions(-)

diff 81c98775c04265beb18bc4203bca6a627ddfcfac e73fbdb3419bfd66074325ca34db7d2f06bc53be
commit - 81c98775c04265beb18bc4203bca6a627ddfcfac
commit + e73fbdb3419bfd66074325ca34db7d2f06bc53be
blob - 99752a0ec1d2b96960f266745aebfcc2bba9c4b2
blob + 0f3ea4056cbca19ea6d8fb13c3554007e71988ec
--- gotd/auth.c
+++ gotd/auth.c
@@ -95,11 +95,11 @@ parsegid(const char *s, gid_t *gid)
 
 	if ((gr = getgrnam(s)) != NULL) {
 		*gid = gr->gr_gid;
-		if (*gid == GID_MAX)
+		if (*gid == -1)
 			return -1;
 		return 0;
 	}
-	*gid = strtonum(s, 0, GID_MAX - 1, &errstr);
+	*gid = strtonum(s, 0, UINT_MAX - 1, &errstr);
 	if (errstr)
 		return -1;
 	return 0;
blob - b21b50e035dd880e6917228f8046f3b2a3e642ce
blob + 83907bca5a321b20da0b228f0bb2bde1323d7c01
--- gotd/gotd.c
+++ gotd/gotd.c
@@ -3539,7 +3539,7 @@ main(int argc, char **argv)
 
 		pw = getpwnam(gotd.user_name);
 		if (pw == NULL) {
-			uid = strtonum(gotd.user_name, 0, UID_MAX - 1, &errstr);
+			uid = strtonum(gotd.user_name, 0, UINT_MAX - 1, &errstr);
 			if (errstr == NULL)
 				pw = getpwuid(uid);
 		}
@@ -3690,7 +3690,7 @@ main(int argc, char **argv)
 
 		pw = getpwnam(gotd.user_name);
 		if (pw == NULL) {
-			uid = strtonum(gotd.user_name, 0, UID_MAX - 1, &errstr);
+			uid = strtonum(gotd.user_name, 0, UINT_MAX - 1, &errstr);
 			if (errstr == NULL)
 				pw = getpwuid(uid);
 		}
blob - f367e5a43d5c219b2524ae00cf0508b70c89693a
blob + 44d3566166c62cfe42884a1c13490e84ff78e37d
--- gotd/parse.y
+++ gotd/parse.y
@@ -1825,11 +1825,11 @@ gotd_parseuid(const char *s, uid_t *uid)
 
 	if ((pw = getpwnam(s)) != NULL) {
 		*uid = pw->pw_uid;
-		if (*uid == UID_MAX)
+		if (*uid == -1)
 			return -1;
 		return 0;
 	}
-	*uid = strtonum(s, 0, UID_MAX - 1, &errstr);
+	*uid = strtonum(s, 0, UINT_MAX - 1, &errstr);
 	if (errstr)
 		return -1;
 	return 0;
blob - 18680c12bbd96af1da39d565a8a690cef9135260
blob + 6936977f0885dc76b89342659cbbb7951949e217
--- gotsysd/auth.c
+++ gotsysd/auth.c
@@ -95,11 +95,11 @@ parsegid(const char *s, gid_t *gid)
 
 	if ((gr = getgrnam(s)) != NULL) {
 		*gid = gr->gr_gid;
-		if (*gid == GID_MAX)
+		if (*gid == -1)
 			return -1;
 		return 0;
 	}
-	*gid = strtonum(s, 0, GID_MAX - 1, &errstr);
+	*gid = strtonum(s, 0, UINT_MAX - 1, &errstr);
 	if (errstr)
 		return -1;
 	return 0;
blob - 9214b41729917bc9ae595e6506c321bfc3515a3c
blob + 1016d32948f10a59b4cd7759b88afc32f0f6a03a
--- gotsysd/gotsysd.c
+++ gotsysd/gotsysd.c
@@ -1778,7 +1778,7 @@ main(int argc, char **argv)
 
 	pw = getpwnam(gotsysd.gotd_username);
 	if (pw == NULL) {
-		uid = strtonum(gotsysd.gotd_username, 0, UID_MAX - 1, &errstr);
+		uid = strtonum(gotsysd.gotd_username, 0, UINT_MAX - 1, &errstr);
 		if (errstr == NULL) {
 			pw = getpwuid(uid);
 			if (pw && strlcpy(gotsysd.gotd_username, pw->pw_name,
@@ -1797,7 +1797,7 @@ main(int argc, char **argv)
 
 	pw = getpwnam(gotsysd.user_name);
 	if (pw == NULL) {
-		uid = strtonum(gotsysd.user_name, 0, UID_MAX - 1, &errstr);
+		uid = strtonum(gotsysd.user_name, 0, UINT_MAX - 1, &errstr);
 		if (errstr == NULL) {
 			pw = getpwuid(uid);
 			if (pw && strlcpy(gotsysd.user_name, pw->pw_name,
blob - f6608f3c02ba8f78199a40ce2e14da751e58118b
blob + 65b89a08547ee07c86987cff1b994b3e7e0ea1d5
--- gotsysd/libexec/gotsys-groupadd/gotsys-groupadd.c
+++ gotsysd/libexec/gotsys-groupadd/gotsys-groupadd.c
@@ -126,7 +126,7 @@ assign_gid(gid_t *gid, struct gotsys_uidset *gids)
 
 	/* sanity checks -- should not happen */
 	if (groupadd_gid_start == 0 || groupadd_gid_start >= groupadd_gid_end ||
-	    g < GOTSYSD_UID_MIN || g < groupadd_gid_start || g == GID_MAX)
+	    g < GOTSYSD_UID_MIN || g < groupadd_gid_start || g == -1)
 		abort();
 
 	if (g > groupadd_gid_end) {
blob - 4e7d81474b0a1a4feffdb9cbe0c8f8ee26e840e6
blob + b057df8abd2756d0e491d4a746945a917b55ce82
--- gotsysd/libexec/gotsys-useradd/gotsys-useradd.c
+++ gotsysd/libexec/gotsys-useradd/gotsys-useradd.c
@@ -149,7 +149,7 @@ assign_uid(uid_t *uid, struct gotsys_uidset *uids)
 
 	/* sanity checks -- should not happen */
 	if (useradd_uid_start == 0 || useradd_uid_start >= useradd_uid_end ||
-	    u < GOTSYSD_UID_MIN || u < useradd_uid_start || u == UID_MAX) {
+	    u < GOTSYSD_UID_MIN || u < useradd_uid_start || u == -1) {
 		pw_abort();
 		abort();
 	}
@@ -181,7 +181,7 @@ write_user_entry(struct gotsys_user *user, uid_t uid)
 	ssize_t w;
 
 	/* sanity */
-	if (uid == 0 || uid == UID_MAX) {
+	if (uid == 0 || uid == -1) {
 		pw_abort();
 		abort();
 	}
blob - 59b82d58a47c23b5a8cd1dc78923f2631faf617e
blob + a9101d9667b437bb38876e51a1d2527010e7bb12
--- gotsysd/libexec/gotsys-userhome/gotsys-userhome.c
+++ gotsysd/libexec/gotsys-userhome/gotsys-userhome.c
@@ -141,8 +141,8 @@ create_homedirs(void)
 #if GOTSYSD_UID_MIN == 0
 #error "UID 0 must not be used as GOTSYSD_UID_MIN"
 #endif
-#if GOTSYSD_UID_MIN == UID_MAX
-#error "UID UID_MAX must not be used as GOTSYSD_UID_MIN"
+#if GOTSYSD_UID_MIN == UINT_MAX
+#error "UID UINT_MAX must not be used as GOTSYSD_UID_MIN"
 #endif
 	if (userhome_uid_start == 0 || userhome_uid_start >= userhome_uid_end)
 		abort();
blob - 6af13da98b7fd6f22af8d422cdd31059cd2a6956
blob + 7b32606e939f3b783aa31c929c68ff3cfc2e0bef
--- gotsysd/parse.y
+++ gotsysd/parse.y
@@ -255,8 +255,8 @@ main		: LISTEN ON STRING {
 #if GOTSYSD_UID_MIN == 0
 #error "UID 0 must not be used as GOTSYSD_UID_MIN"
 #endif
-#if GOTSYSD_UID_MIN == UID_MAX
-#error "UID UID_MAX must not be used as GOTSYSD_UID_MIN"
+#if GOTSYSD_UID_MIN == UINT_MAX
+#error "UID UINT_MAX must not be used as GOTSYSD_UID_MIN"
 #endif
 			if (gotsysd->uid_start < GOTSYSD_UID_MIN ||
 			    gotsysd->uid_end < GOTSYSD_UID_MIN) {
@@ -266,10 +266,10 @@ main		: LISTEN ON STRING {
 				YYERROR;
 			}
 
-			if (gotsysd->uid_start == UID_MAX ||
-			    gotsysd->uid_end == UID_MAX) {
+			if (gotsysd->uid_start == UINT_MAX ||
+			    gotsysd->uid_end == UINT_MAX) {
 				yyerror("%s: UID %u is not allowed in "
-				    "uid range", __func__, UID_MAX);
+				    "uid range", __func__, UINT_MAX);
 				YYERROR;
 			}
 
@@ -1269,11 +1269,11 @@ gotsysd_parseuid(const char *s, uid_t *uid)
 
 	if ((pw = getpwnam(s)) != NULL) {
 		*uid = pw->pw_uid;
-		if (*uid == UID_MAX)
+		if (*uid == -1)
 			return -1;
 		return 0;
 	}
-	*uid = strtonum(s, 0, UID_MAX - 1, &errstr);
+	*uid = strtonum(s, 0, UINT_MAX - 1, &errstr);
 	if (errstr)
 		return -1;
 	return 0;
blob - 3e946d41674c1d5ec5eaeb036f67ee73db96a809
blob + f5f2ce6914bf1f0dca27d9a952dc351e3eaf68f2
--- gotwebd/auth.c
+++ gotwebd/auth.c
@@ -120,11 +120,11 @@ parseuid(const char *s, uid_t *uid)
 
 	if ((pw = getpwnam(s)) != NULL) {
 		*uid = pw->pw_uid;
-		if (*uid == UID_MAX)
+		if (*uid == -1)
 			return -1;
 		return 0;
 	}
-	*uid = strtonum(s, 0, UID_MAX - 1, &errstr);
+	*uid = strtonum(s, 0, UINT_MAX - 1, &errstr);
 	if (errstr)
 		return -1;
 	return 0;
@@ -150,11 +150,11 @@ parsegid(const char *s, gid_t *gid)
 
 	if ((gr = getgrnam(s)) != NULL) {
 		*gid = gr->gr_gid;
-		if (*gid == GID_MAX)
+		if (*gid == -1)
 			return -1;
 		return 0;
 	}
-	*gid = strtonum(s, 0, GID_MAX - 1, &errstr);
+	*gid = strtonum(s, 0, UINT_MAX - 1, &errstr);
 	if (errstr)
 		return -1;
 	return 0;

-- 
Christian "naddy" Weisgerber                          naddy@mips.inka.de