summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSheldon Hearn <sheldonh@FreeBSD.org>1999-11-15 16:45:37 +0000
committerSheldon Hearn <sheldonh@FreeBSD.org>1999-11-15 16:45:37 +0000
commit18138b08d80e286f69bf00b26bc4c8f9c77dd4c8 (patch)
tree3668680eeb15e1cb1e29b40b87155e3efebda0e7
parent7cbc47c7bcafdd3a6ae6db679ae40d7e1313b8eb (diff)
Notes
-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 0ce9b1d6b19a..a24380f60814 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 d1d4bc1ef631..2519bd45db01 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 0ce9b1d6b19a..a24380f60814 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 d1d4bc1ef631..2519bd45db01 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 32233538cef7..1e52b08fc349 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 5ee9699d57b1..ef57dc2ee051 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;