So I was actually looking at the passwd check rules because I wanted to add a
flag to disable the 3 bad passwords then ok whatever.

This adds passwd -w to allow user to skip the default 3 warnings and just do
what they want. If, by chance, you have configured warnings in login.conf then
they can't override that.


Index: passwd.1
===================================================================
RCS file: /cvs/src/usr.bin/passwd/passwd.1,v
retrieving revision 1.45
diff -u -p -r1.45 passwd.1
--- passwd.1    19 Aug 2016 10:57:24 -0000      1.45
+++ passwd.1    10 Dec 2018 19:09:55 -0000
@@ -62,6 +62,9 @@ checking program via the
 .Dq passwordcheck
 variable in
 .Xr login.conf 5 .
+The
+.Fl w
+option can be used to disable the default checks and permit weak passwords.
 .Pp
 The superuser is not required to provide a user's current password
 if only the local password is modified.
Index: passwd.c
===================================================================
RCS file: /cvs/src/usr.bin/passwd/passwd.c,v
retrieving revision 1.27
diff -u -p -r1.27 passwd.c
--- passwd.c    26 Nov 2015 19:01:47 -0000      1.27
+++ passwd.c    10 Dec 2018 19:08:41 -0000
@@ -38,6 +38,8 @@
 extern int local_passwd(char *, int);
 void usage(int retval);
 
+int allowweak;
+
 int
 main(int argc, char **argv)
 {
@@ -46,8 +48,11 @@ main(int argc, char **argv)
        int ch;
 
        /* Process args and options */
-       while ((ch = getopt(argc, argv, "")) != -1)
+       while ((ch = getopt(argc, argv, "w")) != -1)
                switch (ch) {
+               case 'w':
+                       allowweak = 1;
+                       break;
                default:
                        usage(1);
                }
@@ -77,6 +82,6 @@ main(int argc, char **argv)
 void
 usage(int retval)
 {
-       fprintf(stderr, "usage: passwd [user]\n");
+       fprintf(stderr, "usage: passwd [-w] [user]\n");
        exit(retval);
 }
Index: pwd_check.c
===================================================================
RCS file: /cvs/src/usr.bin/passwd/pwd_check.c,v
retrieving revision 1.16
diff -u -p -r1.16 pwd_check.c
--- pwd_check.c 21 Aug 2017 21:41:13 -0000      1.16
+++ pwd_check.c 10 Dec 2018 19:07:51 -0000
@@ -49,6 +49,8 @@
 int pwd_check(login_cap_t *, char *);
 int pwd_gettries(login_cap_t *);
 
+extern int allowweak;
+
 struct pattern {
        char *match;
        int flags;
@@ -218,5 +220,7 @@ pwd_gettries(login_cap_t *lc)
         * password checks, it will no longer be checked and they can set
         * it to whatever they like.  This is the historic BSD behavior.
         */
+       if (allowweak)
+               return (-1);
        return (3);
 }

Reply via email to