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
This commit is contained in:
Sheldon Hearn 1999-11-15 16:45:37 +00:00
parent 7cbc47c7bc
commit 18138b08d8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=53183
6 changed files with 41 additions and 9 deletions

View File

@ -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;

View File

@ -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 *));

View File

@ -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;

View File

@ -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 *));

View File

@ -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 .

View File

@ -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;