Support cracklib i18n kludge, and policy ordering during application.

This commit is contained in:
Chris 2013-02-17 13:41:30 +00:00
parent dce7cad6b6
commit 4434ba326a

View File

@ -62,6 +62,17 @@ sub new {
'policy_max_passwordage', 'policy_max_passwordage',
'policy_max_loginfail' ]; 'policy_max_loginfail' ];
# Map cracklib responses to localisable strings
$self -> {"cracklib_stirngs"} = { "it is WAY too short" => "LOGIN_CRACKLIB_WAYSHORT",
"it is too short" => "LOGIN_CRACKLIB_TOOSHORT",
"it does not contain enough DIFFERENT characters" => "LOGIN_CRACKLIB_MORECHARS",
"it is all whitespace" => "LOGIN_CRACKLIB_WHITESPACE",
"it is too simplistic/systematic" => "LOGIN_CRACKLIB_SIMPLISTIC",
"it looks like a National Insurance number" => "LOGIN_CRACKLIB_NINUMBER",
"it is based on a dictionary word" => "LOGIN_CRACKLIB_DICTWORD",
"it is based on a (reversed) dictionary word" => "LOGIN_CRACKLIB_DICTBACK",
};
return $self; return $self;
} }
@ -378,12 +389,24 @@ sub apply_policy {
} else { } else {
my $crackres = fascist_check($password); my $crackres = fascist_check($password);
$failures -> {"policy_use_cracklib"} = [1, $crackres] if(lc($crackres) ne "ok") {
if($crackres ne "ok"); # Cracklib is unlocalised and returns pretty lousy fedback strings, try to map them to something useful
my $mapres = $self -> {"cracklib_stirngs"} -> {$crackres} || $crackres;
# If mapres is the same as crackres (ie: mapping to a localisable string ID failed),
# try to at least make it more readable
$mapres =~ s/^it/The password/ if($mapres eq $crackres);
$failures -> {"policy_use_cracklib"} = [1, $mapres]
}
} }
} }
return scalar(keys(%$failures)) ? $failures : undef; if(scalar(%policy)) {
$policy{"policy_order"} = $self -> {"set_policy_order"};
return \%policy;
}
return undef;
} }