summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libc/gen/pw_scan.c15
-rw-r--r--usr.sbin/pwd_mkdb/pw_scan.c15
-rw-r--r--usr.sbin/pwd_mkdb/pwd_mkdb.88
3 files changed, 26 insertions, 12 deletions
diff --git a/lib/libc/gen/pw_scan.c b/lib/libc/gen/pw_scan.c
index 5190686..e03b49c 100644
--- a/lib/libc/gen/pw_scan.c
+++ b/lib/libc/gen/pw_scan.c
@@ -56,6 +56,9 @@ static const char rcsid[] =
#include "pw_scan.h"
+static int big_uids = 0; /* Used for legacy max uid_t warning */
+static int big_gids = 0; /* Used for legacy max gid_t warning */
+
int
pw_scan(bp, pw)
char *bp;
@@ -84,9 +87,9 @@ pw_scan(bp, pw)
warnx("root uid should be 0");
return (0);
}
- if (id > USHRT_MAX) {
- warnx("%s > max uid value (%d)", p, USHRT_MAX);
- /*return (0);*/ /* THIS SHOULD NOT BE FATAL! */
+ if (id > USHRT_MAX && !(big_uids++)) {
+ warnx("%s > legacy max uid value (%d): "
+ "no more such warnings", p, USHRT_MAX);
}
pw->pw_uid = id;
@@ -94,9 +97,9 @@ pw_scan(bp, pw)
goto fmt;
if(p[0]) pw->pw_fields |= _PWF_GID;
id = atol(p);
- if (id > USHRT_MAX) {
- warnx("%s > max gid value (%d)", p, USHRT_MAX);
- /* return (0); This should not be fatal! */
+ if (id > USHRT_MAX && !(big_gids++)) {
+ warnx("%s > max gid value (%d): "
+ "no more such warnings", p, USHRT_MAX);
}
pw->pw_gid = id;
diff --git a/usr.sbin/pwd_mkdb/pw_scan.c b/usr.sbin/pwd_mkdb/pw_scan.c
index 5190686..e03b49c 100644
--- a/usr.sbin/pwd_mkdb/pw_scan.c
+++ b/usr.sbin/pwd_mkdb/pw_scan.c
@@ -56,6 +56,9 @@ static const char rcsid[] =
#include "pw_scan.h"
+static int big_uids = 0; /* Used for legacy max uid_t warning */
+static int big_gids = 0; /* Used for legacy max gid_t warning */
+
int
pw_scan(bp, pw)
char *bp;
@@ -84,9 +87,9 @@ pw_scan(bp, pw)
warnx("root uid should be 0");
return (0);
}
- if (id > USHRT_MAX) {
- warnx("%s > max uid value (%d)", p, USHRT_MAX);
- /*return (0);*/ /* THIS SHOULD NOT BE FATAL! */
+ if (id > USHRT_MAX && !(big_uids++)) {
+ warnx("%s > legacy max uid value (%d): "
+ "no more such warnings", p, USHRT_MAX);
}
pw->pw_uid = id;
@@ -94,9 +97,9 @@ pw_scan(bp, pw)
goto fmt;
if(p[0]) pw->pw_fields |= _PWF_GID;
id = atol(p);
- if (id > USHRT_MAX) {
- warnx("%s > max gid value (%d)", p, USHRT_MAX);
- /* return (0); This should not be fatal! */
+ if (id > USHRT_MAX && !(big_gids++)) {
+ warnx("%s > max gid value (%d): "
+ "no more such warnings", p, USHRT_MAX);
}
pw->pw_gid = id;
diff --git a/usr.sbin/pwd_mkdb/pwd_mkdb.8 b/usr.sbin/pwd_mkdb/pwd_mkdb.8
index 3223353..c3b68a2 100644
--- a/usr.sbin/pwd_mkdb/pwd_mkdb.8
+++ b/usr.sbin/pwd_mkdb/pwd_mkdb.8
@@ -149,6 +149,14 @@ style databases for the password file but depended on the calling programs
to install them.
The program was renamed in order that previous users of the program
not be surprised by the changes in functionality.
+.Pp
+The
+.Nm
+program will produce warnings if it finds a UID or GID larger than the
+historical maximum (USHRT_MAX), as these may cause problems for software
+which assumes such a maximum.
+Only the first such UID and the first such GID will produce a
+warning.
.Sh SEE ALSO
.Xr chpass 1 ,
.Xr passwd 1 ,
OpenPOWER on IntegriCloud