Replace the -q option to pwd_mkdb with a test for PW_SCAN_BIG_IDS in

the environment.  This allows big ID warnings to be suppressed for
vipw and chpass as well.

Since the environment variable test is only performed for callers
of pw_scan() that do not set pw_big_ids_warning, the test can still
be overriden.  Currently, chpass and pwd_mkdb are the only users
of pw_scan() and neither of them overrides the environment variable
test.
This commit is contained in:
Sheldon Hearn 1999-12-02 16:39:15 +00:00
parent fa930a7361
commit 9a602acc36
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=54034
6 changed files with 36 additions and 14 deletions

View File

@ -60,8 +60,12 @@ static const char rcsid[] =
* 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.
*
* If pw_big_ids_warning is anything other than -1 on entry to pw_scan()
* it will be set based on the existance of PW_SCAN_BIG_IDS in the
* environment.
*/
int pw_big_ids_warning = 1;
int pw_big_ids_warning = -1;
int
pw_scan(bp, pw)
@ -72,6 +76,9 @@ pw_scan(bp, pw)
int root;
char *p, *sh;
if (pw_big_ids_warning == -1)
pw_big_ids_warning = getenv("PW_SCAN_BIG_IDS") == NULL ? 1 : 0;
pw->pw_fields = 0;
if (!(pw->pw_name = strsep(&bp, ":"))) /* login */
goto fmt;

View File

@ -230,6 +230,12 @@ When the editor terminates, the information is re-read and used to
update the user database itself.
Only the user, or the super-user, may edit the information associated
with the user.
.Pp
See
.Xr pwd_mkdb 8
for an explanation of the impact of setting the
.Ev PW_SCAN_BIG_IDS
environment variable.
.Sh NIS INTERACTION
.Nm Chpass
can also be used in conjunction with NIS, however some restrictions

View File

@ -60,8 +60,12 @@ static const char rcsid[] =
* 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.
*
* If pw_big_ids_warning is anything other than -1 on entry to pw_scan()
* it will be set based on the existance of PW_SCAN_BIG_IDS in the
* environment.
*/
int pw_big_ids_warning = 1;
int pw_big_ids_warning = -1;
int
pw_scan(bp, pw)
@ -72,6 +76,9 @@ pw_scan(bp, pw)
int root;
char *p, *sh;
if (pw_big_ids_warning == -1)
pw_big_ids_warning = getenv("PW_SCAN_BIG_IDS") == NULL ? 1 : 0;
pw->pw_fields = 0;
if (!(pw->pw_name = strsep(&bp, ":"))) /* login */
goto fmt;

View File

@ -43,7 +43,6 @@
.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
@ -79,12 +78,6 @@ 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 .
@ -110,6 +103,15 @@ The databases are used by the C library password routines (see
.Pp
.Nm Pwd_mkdb
exits zero on success, non-zero on failure.
.Sh ENVIRONMENT
If the
.Ev PW_SCAN_BIG_IDS
environment variable is set,
.Nm
will suppress the warning messages that are
normally generated for large user and group IDs.
Such IDs can cause serious problems with software
that makes assumptions about the values of IDs.
.Sh FILES
.Bl -tag -width Pa -compact
.It Pa /etc/pwd.db

View File

@ -115,7 +115,7 @@ main(argc, argv)
strcpy(prefix, _PATH_PWD);
makeold = 0;
username = NULL;
while ((ch = getopt(argc, argv, "Cd:pqs:u:vN")) != -1)
while ((ch = getopt(argc, argv, "Cd:ps:u:vN")) != -1)
switch(ch) {
case 'C': /* verify only */
Cflag = 1;
@ -126,9 +126,6 @@ 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;

View File

@ -85,12 +85,15 @@ and the new information is not available to programs.
.Sh ENVIRONMENT
If the following environment variable exists it will be utilized by
.Nm Ns :
.Bl -tag -width EDITOR
.Bl -tag -width PW_SCAN_BIG_IDS
.It Ev EDITOR
The editor specified by the string
.Ev EDITOR
will be invoked instead of the default editor
.Xr vi 1 .
.It Ev PW_SCAN_BIG_IDS
See
.Xr pwd_mkdb 8 .
.El
.Sh SEE ALSO
.Xr chpass 1 ,