summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSheldon Hearn <sheldonh@FreeBSD.org>1999-12-02 16:39:15 +0000
committerSheldon Hearn <sheldonh@FreeBSD.org>1999-12-02 16:39:15 +0000
commit67087398f465073f3513d34f0788d720a523fe46 (patch)
tree4a86e5149c74db8c596cdf7d249ba203b802b445
parentf739ced635a92eaeb4e29318fe2f30d3cf80dc0e (diff)
downloadpw-darwin-67087398f465073f3513d34f0788d720a523fe46.tar.gz
pw-darwin-67087398f465073f3513d34f0788d720a523fe46.tar.zst
pw-darwin-67087398f465073f3513d34f0788d720a523fe46.zip
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.
-rw-r--r--chpass/chpass.16
-rw-r--r--libc/gen/pw_scan.c9
2 files changed, 14 insertions, 1 deletions
diff --git a/chpass/chpass.1 b/chpass/chpass.1
index b36ddbb..41595e1 100644
--- a/chpass/chpass.1
+++ b/chpass/chpass.1
@@ -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
diff --git a/libc/gen/pw_scan.c b/libc/gen/pw_scan.c
index 09556a3..849effa 100644
--- a/libc/gen/pw_scan.c
+++ b/libc/gen/pw_scan.c
@@ -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;