diff options
author | Mark Wells <mark@freeside.biz> | 2016-03-08 13:23:35 -0800 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2016-03-08 13:24:07 -0800 |
commit | 128a2b47ce0fb1c37013cb3b56213e2b64b25644 (patch) | |
tree | 54700e34f9ecb9305c256b6654472512f7c2fd83 /FS/FS/Password_Mixin.pm | |
parent | a46fd8d22c2af263e8ab10c496f5bfa8cb0c5c88 (diff) |
option to limit the set of characters in random passwords, #40792
Diffstat (limited to 'FS/FS/Password_Mixin.pm')
-rw-r--r-- | FS/FS/Password_Mixin.pm | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/FS/FS/Password_Mixin.pm b/FS/FS/Password_Mixin.pm index ac7ba50..633265b 100644 --- a/FS/FS/Password_Mixin.pm +++ b/FS/FS/Password_Mixin.pm @@ -14,6 +14,8 @@ FS::UID->install_callback( sub { $conf = FS::Conf->new; }); +our @pw_set; + our $me = '[' . __PACKAGE__ . ']'; our $BLOWFISH_COST = 10; @@ -254,6 +256,36 @@ sub _blowfishcrypt { =back +=head1 CLASS METHODS + +=over 4 + +=item pw_set + +Returns the list of characters allowed in random passwords (from the +C<password-generated-characters> config). + +=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); + } + warn "password-generated-characters set is insufficient; using default."; + @pw_set = split('', 'abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ23456789()#.,'); + } + return @pw_set; +} + +=back + =head1 SEE ALSO L<FS::password_history> |