From: Jonathan Prykop Date: Wed, 2 Dec 2015 02:51:33 +0000 (-0600) Subject: RT#29354: Password Security in Email [password_svc_check and aspell requirement] X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=ec4b7d78854b287347eb08a8f99d18c5d41065f5 RT#29354: Password Security in Email [password_svc_check and aspell requirement] --- diff --git a/FS/FS/Password_Mixin.pm b/FS/FS/Password_Mixin.pm index bcad54637..3129366c7 100644 --- a/FS/FS/Password_Mixin.pm +++ b/FS/FS/Password_Mixin.pm @@ -61,14 +61,9 @@ sub is_password_allowed { $error = 'Invalid password - ' . $error if $error; return $error if $error; - #check against known usernames - my @disallowed_names = $self->password_disallowed_names; - foreach my $noname (@disallowed_names) { - if ($password =~ /$noname/i) { - #keeping message ambiguous to avoid leaking personal info - return 'Password contains a disallowed word'; - } - } + #check against service fields + $error = $self->password_svc_check($password); + return $error if $error; return '' unless $self->get($self->primary_key); # for validating new passwords pre-insert @@ -107,15 +102,15 @@ sub is_password_allowed { ''; } -=item password_disallowed_names +=item password_svc_check -Override to return a list additional words (eg usernames) not -to be used by passwords on this service. +Override to run additional service-specific password checks. =cut -sub password_disallowed_names { - return (); +sub password_svc_check { + my ($self, $password) = @_; + return ''; } =item password_history_key diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm index e7ec4a231..38cebc1de 100644 --- a/FS/FS/svc_acct.pm +++ b/FS/FS/svc_acct.pm @@ -2676,29 +2676,22 @@ sub virtual_maildir { $self->domain. '/maildirs/'. $self->username. '/'; } -=item password_disallowed_names +=item password_svc_check Override, for L. Not really intended for other use. =cut -sub password_disallowed_names { - my $self = shift; - my $dbh = dbh; - my $results = {}; - foreach my $field ( qw( username finger ) ) { - my $sql = 'SELECT DISTINCT '.$field.' FROM svc_acct'; - my $sth = $dbh->prepare($sql) - or die "Error preparing $sql: ". $dbh->errstr; - $sth->execute() - or die "Error executing $sql: ". $sth->errstr; - foreach my $row (@{$sth->fetchall_arrayref}, $self->get($field)) { - foreach my $word (split(/\s+/,$$row[0])) { - $results->{lc($word)} = 1; +sub password_svc_check { + my ($self, $password) = @_; + foreach my $field ( qw(username finger) ) { + foreach my $word (split(/\W+/,$self->get($field))) { + if ($password =~ /$word/i) { + return qq(Password contains account information '$word'); } } } - return keys %$results; + return ''; } =back diff --git a/debian/control b/debian/control index cc908d887..2ac603cfa 100644 --- a/debian/control +++ b/debian/control @@ -22,7 +22,7 @@ Description: Billing and trouble ticketing for service providers Package: freeside-lib Architecture: all -Depends: gnupg,ghostscript,gsfonts,gzip,latex-xcolor, +Depends: aspell-en,gnupg,ghostscript,gsfonts,gzip,latex-xcolor, libbusiness-creditcard-perl,libcache-cache-perl, libcache-simple-timedexpiry-perl,libchart-perl,libclass-container-perl, libclass-data-inheritable-perl,libclass-returnvalue-perl,libcolor-scheme-perl,