switch to a hard list of allowed password characters, #40792
authorMark Wells <mark@freeside.biz>
Wed, 23 Mar 2016 20:35:54 +0000 (13:35 -0700)
committerMark Wells <mark@freeside.biz>
Wed, 23 Mar 2016 20:35:54 +0000 (13:35 -0700)
FS/FS/Conf.pm
FS/FS/Password_Mixin.pm
FS/FS/Upgrade.pm

index a8ececd..e88ee68 100644 (file)
@@ -4052,14 +4052,16 @@ and customer address. Include units.',
     'select_enum' => [ '1 hour', '2 hours', '4 hours', '8 hours', '1 day', '1 week', ],
   },
 
-  {
-    'key'         => 'password-generated-characters',
-    'section'     => 'password',
-    'description' => 'Set of characters to use when generating random passwords. This must contain at least one lowercase letter, uppercase letter, digit, and punctuation mark.',
-    'type'        => 'textarea',
-  },
+  # 3.x-only options for a more tolerant password policy
 
 #  {
+#    'key'         => 'password-generated-characters',
+#    'section'     => 'password',
+#    'description' => 'Set of characters to use when generating random passwords. This must contain at least one lowercase letter, uppercase letter, digit, and punctuation mark.',
+#    'type'        => 'textarea',
+#  },
+#
+#  {
 #    'key'         => 'password-no_reuse',
 #    'section'     => 'password',
 #    'description' => 'Minimum number of password changes before a password can be reused. By default, passwords can be reused without restriction.',
index da80cd2..27da57f 100644 (file)
@@ -14,8 +14,6 @@ FS::UID->install_callback( sub {
   $conf = FS::Conf->new;
 });
 
-our @pw_set;
-
 our $me = '[' . __PACKAGE__ . ']';
 
 our $BLOWFISH_COST = 10;
@@ -262,27 +260,19 @@ sub _blowfishcrypt {
 
 =item pw_set
 
-Returns the list of characters allowed in random passwords (from the
-C<password-generated-characters> config).
+Returns the list of characters allowed in random passwords. This is now
+hardcoded.
 
 =cut
 
 sub pw_set {
-  my $class = shift;
-  if (!@pw_set) {
-    my $pw_set = $conf->config('password-generated-characters');
-    $pw_set =~ s/\s//g; # don't ever allow whitespace
-    if ( $pw_set =~ /[[:lower:]]/
-      && $pw_set =~ /[[:upper:]]/
-      && $pw_set =~ /[[:digit:]]/
-      && $pw_set =~ /[[:punct:]]/ ) {
-      @pw_set = split('', $pw_set);
-    } else {
-      warn "password-generated-characters set is insufficient; using default.";
-      @pw_set = split('', 'abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ23456789()#.,');
-    }
-  }
-  return @pw_set;
+
+  # ASCII alphabet, minus easily confused stuff (l, o, O, 0, 1)
+  # and plus some "safe" punctuation
+  split('',
+    'abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ23456789()#.,[]-_=+'
+  );
+
 }
 
 =back
index bfb218f..2a480f8 100644 (file)
@@ -165,12 +165,6 @@ If you need to continue using the old Form 477 report, turn on the
     $conf->delete('voip-cust_email_csv_cdr') ;
   }
 
-  if ( !$conf->config('password-generated-characters') ) {
-    my $pw_set = 
-      'abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ23456789()#.,' ;
-    $conf->set('password-generated-characters', $pw_set);
-  }
-
   if ($conf->exists('unsuspendauto') && !$conf->config('unsuspend_balance')) {
     $conf->set('unsuspend_balance','Zero');
     $conf->delete('unsuspendauto');