summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsheldonh <sheldonh@FreeBSD.org>1999-11-15 16:45:37 +0000
committersheldonh <sheldonh@FreeBSD.org>1999-11-15 16:45:37 +0000
commitc973e062a1f6aeb029f3a0f13c59e48f0984c8f9 (patch)
tree3668680eeb15e1cb1e29b40b87155e3efebda0e7
parentf2208af484555e6923ed0044b8df4ed291c49bc7 (diff)
downloadFreeBSD-src-c973e062a1f6aeb029f3a0f13c59e48f0984c8f9.zip
FreeBSD-src-c973e062a1f6aeb029f3a0f13c59e48f0984c8f9.tar.gz
Add to pwd_mkdb a -q option to silence warnings about large IDs. Add a
suitably ominous warning in the manual page. The diff applied is not the one provided in the attributed PR. PR: 13344 Reviewed by: bde
-rw-r--r--lib/libc/gen/pw_scan.c15
-rw-r--r--lib/libc/gen/pw_scan.h4
-rw-r--r--usr.sbin/pwd_mkdb/pw_scan.c15
-rw-r--r--usr.sbin/pwd_mkdb/pw_scan.h4
-rw-r--r--usr.sbin/pwd_mkdb/pwd_mkdb.87
-rw-r--r--usr.sbin/pwd_mkdb/pwd_mkdb.c5
6 files changed, 41 insertions, 9 deletions
diff --git a/lib/libc/gen/pw_scan.c b/lib/libc/gen/pw_scan.c
index 0ce9b1d..a24380f 100644
--- a/lib/libc/gen/pw_scan.c
+++ b/lib/libc/gen/pw_scan.c
@@ -56,6 +56,13 @@ static const char rcsid[] =
#include "pw_scan.h"
+/*
+ * Some software assumes that IDs are short. We should emit warnings
+ * for id's which can not be stored in a short, but we are more liberal
+ * by default, warning for IDs greater than USHRT_MAX.
+ */
+int pw_big_ids_warning = 1;
+
int
pw_scan(bp, pw)
char *bp;
@@ -89,8 +96,8 @@ 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);
+ if (pw_big_ids_warning && id > USHRT_MAX) {
+ warnx("%s > max uid value (%u)", p, USHRT_MAX);
/*return (0);*/ /* THIS SHOULD NOT BE FATAL! */
}
pw->pw_uid = id;
@@ -99,8 +106,8 @@ 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);
+ if (pw_big_ids_warning && id > USHRT_MAX) {
+ warnx("%s > max gid value (%u)", p, USHRT_MAX);
/* return (0); This should not be fatal! */
}
pw->pw_gid = id;
diff --git a/lib/libc/gen/pw_scan.h b/lib/libc/gen/pw_scan.h
index d1d4bc1..2519bd4 100644
--- a/lib/libc/gen/pw_scan.h
+++ b/lib/libc/gen/pw_scan.h
@@ -31,6 +31,10 @@
* SUCH DAMAGE.
*
* @(#)pw_scan.h 8.1 (Berkeley) 4/1/94
+ *
+ * $FreeBSD$
*/
+extern int pw_big_ids_warning;
+
extern int pw_scan __P((char *, struct passwd *));
diff --git a/usr.sbin/pwd_mkdb/pw_scan.c b/usr.sbin/pwd_mkdb/pw_scan.c
index 0ce9b1d..a24380f 100644
--- a/usr.sbin/pwd_mkdb/pw_scan.c
+++ b/usr.sbin/pwd_mkdb/pw_scan.c
@@ -56,6 +56,13 @@ static const char rcsid[] =
#include "pw_scan.h"
+/*
+ * Some software assumes that IDs are short. We should emit warnings
+ * for id's which can not be stored in a short, but we are more liberal
+ * by default, warning for IDs greater than USHRT_MAX.
+ */
+int pw_big_ids_warning = 1;
+
int
pw_scan(bp, pw)
char *bp;
@@ -89,8 +96,8 @@ 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);
+ if (pw_big_ids_warning && id > USHRT_MAX) {
+ warnx("%s > max uid value (%u)", p, USHRT_MAX);
/*return (0);*/ /* THIS SHOULD NOT BE FATAL! */
}
pw->pw_uid = id;
@@ -99,8 +106,8 @@ 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);
+ if (pw_big_ids_warning && id > USHRT_MAX) {
+ warnx("%s > max gid value (%u)", p, USHRT_MAX);
/* return (0); This should not be fatal! */
}
pw->pw_gid = id;
diff --git a/usr.sbin/pwd_mkdb/pw_scan.h b/usr.sbin/pwd_mkdb/pw_scan.h
index d1d4bc1..2519bd4 100644
--- a/usr.sbin/pwd_mkdb/pw_scan.h
+++ b/usr.sbin/pwd_mkdb/pw_scan.h
@@ -31,6 +31,10 @@
* SUCH DAMAGE.
*
* @(#)pw_scan.h 8.1 (Berkeley) 4/1/94
+ *
+ * $FreeBSD$
*/
+extern int pw_big_ids_warning;
+
extern int pw_scan __P((char *, struct passwd *));
diff --git a/usr.sbin/pwd_mkdb/pwd_mkdb.8 b/usr.sbin/pwd_mkdb/pwd_mkdb.8
index 3223353..1e52b08 100644
--- a/usr.sbin/pwd_mkdb/pwd_mkdb.8
+++ b/usr.sbin/pwd_mkdb/pwd_mkdb.8
@@ -43,6 +43,7 @@
.Op Fl C
.Op Fl N
.Op Fl p
+.Op Fl q
.Op Fl d Ar directory
.Op Fl s Ar cachesize
.Op Fl u Ar username
@@ -78,6 +79,12 @@ the rebuilding of the database.
.It Fl p
Create a Version 7 style password file and install it into
.Pa /etc/passwd .
+.It Fl q
+Suppress the warnings that
+.Nm
+normally generates for large user and group IDs.
+Such IDs can cause serious problems with software
+that makes assumptions about the values of IDs.
.It Fl d Ar directory
Store databases into specified destination directory instead of
.Pa /etc .
diff --git a/usr.sbin/pwd_mkdb/pwd_mkdb.c b/usr.sbin/pwd_mkdb/pwd_mkdb.c
index 5ee9699..ef57dc2 100644
--- a/usr.sbin/pwd_mkdb/pwd_mkdb.c
+++ b/usr.sbin/pwd_mkdb/pwd_mkdb.c
@@ -115,7 +115,7 @@ main(argc, argv)
strcpy(prefix, _PATH_PWD);
makeold = 0;
username = NULL;
- while ((ch = getopt(argc, argv, "Cd:ps:u:vN")) != -1)
+ while ((ch = getopt(argc, argv, "Cd:pqs:u:vN")) != -1)
switch(ch) {
case 'C': /* verify only */
Cflag = 1;
@@ -126,6 +126,9 @@ main(argc, argv)
case 'p': /* create V7 "file.orig" */
makeold = 1;
break;
+ case 'q':
+ pw_big_ids_warning = 0;
+ break;
case 's': /* change default cachesize */
openinfo.cachesize = atoi(optarg) * 1024 * 1024;
break;
OpenPOWER on IntegriCloud