chiark / gitweb /
sort out debugging, fix a todo
[cgi-auth-flexible.git] / cgi-auth-flexible.pm
index 61955c90fe26ec497af1bedf19fdb91b2dcaa5ee..49b3303464278cb56b45f30f947adfcccc16030f 100644 (file)
@@ -93,8 +93,8 @@ sub login_ok_password ($$) {
     my $username_params = $r->{S}{username_param_names};
     my $username = $r->_ch('get_param',$username_params->[0]);
     my $password = $r->_rp('password_param_name');
-    return undef unless $r->_ch('username_password_ok', $username, $password);
-    return $username;
+    my $error = $r->_ch('username_password_error', $username, $password);
+    return defined($error) ? (undef,$error) : ($username,undef);
 }
 
 sub do_redirect_cgi ($$$$) {
@@ -209,7 +209,7 @@ sub new_verifier {
            get_url => sub { $_[0]->url(); },
             is_login => sub { defined $_[1]->_rp('password_param_name') },
             login_ok => \&login_ok_password,
-            username_password_ok => sub { die },
+            username_password_error => sub { die },
            is_logout => sub { $_[1]->has_a_param('logout_param_names') },
            is_loggedout => sub { $_[1]->has_a_param('loggedout_param_names') },
            is_page => sub { return 1 },
@@ -540,10 +540,12 @@ sub _check_divert_core ($) {
                       Params => { } })
         }
        die unless $parmt eq 't' || $parmt eq 'y';
-       my $username = $r->_ch('login_ok');
+       my ($username, $login_errormessage) = $r->_ch('login_ok');
         unless (defined $username && length $username) {
+            $login_errormessage = $r->_gt("Incorrect username/password.")
+                if !$login_errormessage;
             return ({ Kind => 'LOGIN-BAD',
-                      Message => $r->_gt("Incorrect username/password."),
+                      Message => $login_errormessage,
                       CookieSecret => $cooks,
                       Params => $r->chain_params() })
         }