Auth.pm conflicted merge resolution.
authorJoe Atzberger <joe.atzberger@liblime.com>
Mon, 5 Nov 2007 23:27:13 +0000 (17:27 -0600)
committerJoshua Ferraro <jmf@liblime.com>
Tue, 6 Nov 2007 12:33:27 +0000 (06:33 -0600)
Signed-off-by: Chris Cormack <crc@liblime.com>
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
C4/Auth.pm
C4/Auth/Auth_with_ldap.pl [new file with mode: 0755]

index 0060853..7af2784 100755 (executable)
@@ -32,8 +32,6 @@ use C4::Koha;
 use C4::Branch; # GetBranches
 
 # use utf8;
-# use Net::LDAP;
-# use Net::LDAP qw(:all);
 
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
@@ -52,15 +50,13 @@ C4::Auth - Authenticates Koha users
   my $query = new CGI;
 
   my ($template, $borrowernumber, $cookie) 
-    = get_template_and_user(
-        {
+    = get_template_and_user({
             template_name   => "opac-main.tmpl",
             query           => $query,
-      type            => "opac",
-      authnotrequired => 1,
-      flagsrequired   => {borrow => 1},
-  }
-    );
+            type            => "opac",
+            authnotrequired => 1,
+            flagsrequired   => {borrow => 1},
+    });
 
   print $query->header(
     -type => 'utf-8',
@@ -89,15 +85,15 @@ C4::Auth - Authenticates Koha users
 
 =item get_template_and_user
 
-  my ($template, $borrowernumber, $cookie)
-    = get_template_and_user(
+       my ($template, $borrowernumber, $cookie)
+       = get_template_and_user(
         {
            template_name   => "opac-main.tmpl",
            query           => $query,
-     type            => "opac",
-     authnotrequired => 1,
-     flagsrequired   => {borrow => 1},
-  }
+           type            => "opac",
+           authnotrequired => 1,
+           flagsrequired   => {borrow => 1},
+        }
     );
 
     This call passes the C<query>, C<flagsrequired> and C<authnotrequired>
@@ -132,30 +128,27 @@ sub get_template_and_user {
     if ($user or $insecure) {
 
                # load the template variables for stylesheets and JavaScript
-               $template->param( css_libs => $in->{'css_libs'} );
-               $template->param( css_module => $in->{'css_module'} );
-               $template->param( css_page => $in->{'css_page'} );
-               $template->param( css_widgets => $in->{'css_widgets'} );
-
-        $template->param( js_libs => $in->{'js_libs'} );
-        $template->param( js_module => $in->{'js_module'} );
-        $template->param( js_page => $in->{'js_page'} );
-        $template->param( js_widgets => $in->{'js_widgets'} );
+               foreach (qw(css_libs css_module css_page css_widgets
+                                        js_libs  js_module  js_page  js_widgets))
+               {
+                       $template->param($_ => $in->{$_});      
+               }
 
                # user info
         $template->param( loggedinusername => $user );
         $template->param( sessionID        => $sessionID );
 
         $borrowernumber = getborrowernumber($user);
-        my ( $borr, $alternativeflags ) =
-          GetMemberDetails( $borrowernumber );
-        my @bordat;
-        $bordat[0] = $borr;
+        my ($borr, $alternativeflags) = GetMemberDetails($borrowernumber);
+        my @bordat = ($borr);
         $template->param( "USER_INFO" => \@bordat );
 
         # We are going to use the $flags returned by checkauth
         # to create the template's parameters that will indicate
         # which menus the user can access.
+               my @params = (qw(circulate catalogue parameters borrowers permissions reserveforothers borrow 
+                                               editcatalogue updatecharges acquisition tools editauthorities serials reports));
+                                               # Not incl. management
         if (( $flags && $flags->{superlibrarian}==1) or $insecure==1) {
             $template->param( CAN_user_circulate        => 1 );
             $template->param( CAN_user_catalogue        => 1 );
@@ -174,88 +167,29 @@ sub get_template_and_user {
             $template->param( CAN_user_reports          => 1 );
         }
 
-        if ( $flags && $flags->{circulate} == 1 ) {
-            $template->param( CAN_user_circulate => 1 );
-        }
-
-        if ( $flags && $flags->{catalogue} == 1 ) {
-            $template->param( CAN_user_catalogue => 1 );
-        }
-
-        if ( $flags && $flags->{parameters} == 1 ) {
-            $template->param( CAN_user_parameters => 1 );
-            $template->param( CAN_user_management => 1 );
-        }
-
-        if ( $flags && $flags->{borrowers} == 1 ) {
-            $template->param( CAN_user_borrowers => 1 );
-        }
-
-        if ( $flags && $flags->{permissions} == 1 ) {
-            $template->param( CAN_user_permission => 1 );
-        }
-
-        if ( $flags && $flags->{reserveforothers} == 1 ) {
-            $template->param( CAN_user_reserveforothers => 1 );
-        }
-
-        if ( $flags && $flags->{borrow} == 1 ) {
-            $template->param( CAN_user_borrow => 1 );
-        }
-
-        if ( $flags && $flags->{editcatalogue} == 1 ) {
-            $template->param( CAN_user_editcatalogue => 1 );
-        }
-
-        if ( $flags && $flags->{updatecharges} == 1 ) {
-            $template->param( CAN_user_updatecharge => 1 );
-        }
-
-        if ( $flags && $flags->{acquisition} == 1 ) {
-            $template->param( CAN_user_acquisition => 1 );
-        }
-
-        if ( $flags && $flags->{tools} == 1 ) {
-            $template->param( CAN_user_tools => 1 );
-        }
-  
-        if ( $flags && $flags->{editauthorities} == 1 ) {
-            $template->param( CAN_user_editauthorities => 1 );
-        }
-    
-        if ( $flags && $flags->{serials} == 1 ) {
-            $template->param( CAN_user_serials => 1 );
-        }
-
-        if ( $flags && $flags->{reports} == 1 ) {
-            $template->param( CAN_user_reports => 1 );
-        }
+        if ($flags) {
+                       ($flags->{parameters} == 1) and $template->param(CAN_user_management => 1);
+                       foreach (@params) {
+                               ($flags->{$_} == 1) and $template->param('CAN_user_' . $_ => 1);
+                       }
+                       # terrible non-conformant param names ("s" gets dropped from the end!?)
+                       ($flags->{permissions}   == 1) and $template->param(CAN_user_permission   => 1);
+                       ($flags->{updatechanges} == 1) and $template->param(CAN_user_updatechange => 1);
+               }
     }
     if ( $in->{'type'} eq "intranet" ) {
         $template->param(
             intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
-            intranetstylesheet => C4::Context->preference("intranetstylesheet"),
-            IntranetNav        => C4::Context->preference("IntranetNav"),
-            intranetuserjs     => C4::Context->preference("intranetuserjs"),
-            TemplateEncoding   => C4::Context->preference("TemplateEncoding"),
-            AmazonContent      => C4::Context->preference("AmazonContent"),
-            LibraryName        => C4::Context->preference("LibraryName"),
-            LoginBranchcode    => (C4::Context->userenv?C4::Context->userenv->{"branch"}:"insecure"),
-            LoginBranchname    => (C4::Context->userenv?C4::Context->userenv->{"branchname"}:"insecure"),
-            LoginFirstname     => (C4::Context->userenv?C4::Context->userenv->{"firstname"}:"Bel"),
-            LoginSurname       => C4::Context->userenv?C4::Context->userenv->{"surname"}:"Inconnu", 
-            AutoLocation       => C4::Context->preference("AutoLocation"),
-            hide_marc          => C4::Context->preference("hide_marc"),
-            patronimages       => C4::Context->preference("patronimages"),
-            "BiblioDefaultView".C4::Context->preference("IntranetBiblioDefaultView") => 1,
-            advancedMARCEditor      => C4::Context->preference("advancedMARCEditor"),
-            suggestion              => C4::Context->preference("suggestion"),
-            virtualshelves          => C4::Context->preference("virtualshelves"),
-            LibraryName             => C4::Context->preference("LibraryName"),
-            KohaAdminEmailAddress   => "" . C4::Context->preference("KohaAdminEmailAddress"),
+            intranetstylesheet         => C4::Context->preference("intranetstylesheet"),
+            IntranetNav                        => C4::Context->preference("IntranetNav"),
+            intranetuserjs          => C4::Context->preference("intranetuserjs"),
+            LoginBranchnamei           => (C4::Context->userenv?C4::Context->userenv->{"branchname"}:"insecure"),
+            AutoLocation                       => C4::Context->preference("AutoLocation"),
+            advancedMARCEditor                 => C4::Context->preference("advancedMARCEditor"),
             IntranetmainUserblock      => C4::Context->preference("IntranetmainUserblock"),
-            IndependantBranches     => C4::Context->preference("IndependantBranches"),
-                       CircAutocompl => C4::Context->preference("CircAutocompl"),
+            IndependantBranches        => C4::Context->preference("IndependantBranches"),
+            "BiblioDefaultView".C4::Context->preference("IntranetBiblioDefaultView") => 1,
+                       CircAutocompl                   => C4::Context->preference("CircAutocompl"),
         );
     }
     else {
@@ -263,28 +197,19 @@ sub get_template_and_user {
         my $LibraryNameTitle = C4::Context->preference("LibraryName");
         $LibraryNameTitle =~ s/<(?:\/?)(?:br|p)\s*(?:\/?)>/ /sgi;
         $LibraryNameTitle =~ s/<(?:[^<>'"]|'(?:[^']*)'|"(?:[^"]*)")*>//sg;
-  $template->param(
-            KohaAdminEmailAddress  => "" . C4::Context->preference("KohaAdminEmailAddress"),
-            suggestion             => "" . C4::Context->preference("suggestion"),
-            virtualshelves         => "" . C4::Context->preference("virtualshelves"),
+               $template->param(
             OpacNav                => "" . C4::Context->preference("OpacNav"),
             opacheader             => "" . C4::Context->preference("opacheader"),
             opaccredits            => "" . C4::Context->preference("opaccredits"),
             opacsmallimage         => "" . C4::Context->preference("opacsmallimage"),
             opaclargeimage         => "" . C4::Context->preference("opaclargeimage"),
-            opaclayoutstylesheet   => "". C4::Context->preference("opaclayoutstylesheet"),
-            opaccolorstylesheet    => "". C4::Context->preference("opaccolorstylesheet"),
-            opaclanguagesdisplay   => "". C4::Context->preference("opaclanguagesdisplay"),
+            opaclayoutstylesheet   => "" . C4::Context->preference("opaclayoutstylesheet"),
+            opaccolorstylesheet    => "" . C4::Context->preference("opaccolorstylesheet"),
+            opaclanguagesdisplay   => "" . C4::Context->preference("opaclanguagesdisplay"),
             opacuserlogin          => "" . C4::Context->preference("opacuserlogin"),
             opacbookbag            => "" . C4::Context->preference("opacbookbag"),
-            TemplateEncoding       => "". C4::Context->preference("TemplateEncoding"),
-            AmazonContent          => "" . C4::Context->preference("AmazonContent"),
-            LibraryName            => "" . C4::Context->preference("LibraryName"),
             LibraryNameTitle       => "" . $LibraryNameTitle,
-            LoginBranchcode        => (C4::Context->userenv?C4::Context->userenv->{"branch"}:"insecure"),
-            LoginBranchname        => C4::Context->userenv?C4::Context->userenv->{"branchname"}:"", 
-            LoginFirstname        => (C4::Context->userenv?C4::Context->userenv->{"firstname"}:"Bel"),
-            LoginSurname        => C4::Context->userenv?C4::Context->userenv->{"surname"}:"Inconnu", 
+            LoginBranchname        => (C4::Context->userenv?C4::Context->userenv->{"branchname"}:""), 
             OpacPasswordChange     => C4::Context->preference("OpacPasswordChange"),
             opacreadinghistory     => C4::Context->preference("opacreadinghistory"),
             opacuserjs             => C4::Context->preference("opacuserjs"),
@@ -294,12 +219,24 @@ sub get_template_and_user {
             OpacBrowser            => C4::Context->preference("OpacBrowser"),
             RequestOnOpac          => C4::Context->preference("RequestOnOpac"),
             reviewson              => C4::Context->preference("reviewson"),
-            hide_marc              => C4::Context->preference("hide_marc"),
-            patronimages           => C4::Context->preference("patronimages"),
-            mylibraryfirst   => C4::Context->preference("SearchMyLibraryFirst"),
+            mylibraryfirst        => C4::Context->preference("SearchMyLibraryFirst"),
             "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1,
         );
     }
+       # These are universal: used by both OPAC and INTRANET.
+       $template->param(
+            TemplateEncoding      => "" . C4::Context->preference("TemplateEncoding"),
+            suggestion            => "" . C4::Context->preference("suggestion"),
+            virtualshelves        => "" . C4::Context->preference("virtualshelves"),
+            KohaAdminEmailAddress => "" . C4::Context->preference("KohaAdminEmailAddress"),
+            hide_marc          => C4::Context->preference("hide_marc"),
+            patronimages       => C4::Context->preference("patronimages"),
+            AmazonContent      => C4::Context->preference("AmazonContent"),
+            LibraryName        => C4::Context->preference("LibraryName"),
+            LoginBranchcode    => (C4::Context->userenv?C4::Context->userenv->{ "branch"  }:"insecure"),
+            LoginFirstname     => (C4::Context->userenv?C4::Context->userenv->{"firstname"}:  "Bel"   ),
+            LoginSurname       => (C4::Context->userenv?C4::Context->userenv->{ "surname" }:"Inconnu" ), 
+       );
     return ( $template, $borrowernumber, $cookie );
 }
 
@@ -446,7 +383,7 @@ sub checkauth {
             $sessionID = undef;
             $userid    = undef;
             open L, ">>/tmp/sessionlog";
-            my $time = localtime( time() );
+            my $time = localtime();
             printf L "%20s from %16s logged out at %30s (manually).\n", $userid,
               $ip, $time;
             close L;
@@ -496,15 +433,10 @@ sub checkauth {
     }
     unless ($userid) {
                my $storage_method = C4::Context->preference('SessionStorage');
-               my $session;
-               if ($storage_method eq 'mysql'){
-                   $session = new CGI::Session("driver:MySQL", $sessionID, {Handle=>$dbh});
-               }
-               else {
-                       # catch all defaults to tmp should work on all systems
-                       $session = new CGI::Session("driver:File", $sessionID, {Directory=>'/tmp'});                    
-               }
-
+               my $session = ($storage_method eq 'mysql') ? 
+                   CGI::Session->new("driver:MySQL", $sessionID, {Handle=>$dbh}     ) :
+                       CGI::Session->new("driver:File" , $sessionID, {Directory=>'/tmp'}) ;                    
+               # catch all defaults to tmp should work on all systems
         my $sessionID;
                if ($session) {
                        $sessionID = $session->id;
@@ -516,7 +448,7 @@ sub checkauth {
         my ( $return, $cardnumber ) = checkpw( $dbh, $userid, $password );
         if ($return) {
             open L, ">>/tmp/sessionlog";
-            my $time = localtime( time() );
+            my $time = localtime();
             printf L "%20s from %16s logged in  at %30s.\n", $userid,
               $ENV{'REMOTE_ADDR'}, $time;
             close L;
@@ -534,9 +466,8 @@ sub checkauth {
                     $userflags,      $branchcode, $branchname,
                     $branchprinter,  $emailaddress
                 );
-                my $sth =
-                  $dbh->prepare(
-"select borrowernumber, firstname, surname, flags, borrowers.branchcode, branches.branchname as branchname,branches.branchprinter as branchprinter, email from borrowers left join branches on borrowers.branchcode=branches.branchcode where userid=?"
+                my $sth = $dbh->prepare(
+"SELECT borrowernumber, firstname, surname, flags, borrowers.branchcode, branches.branchname as branchname,branches.branchprinter as branchprinter, email from borrowers left join branches on borrowers.branchcode=branches.branchcode where userid=?"
                   );
                 $sth->execute($userid);
                 (
@@ -549,9 +480,8 @@ sub checkauth {
 
 #         warn "$cardnumber,$borrowernumber,$userid,$firstname,$surname,$userflags,$branchcode,$emailaddress";
                 unless ( $sth->rows ) {
-                    my $sth =
-                      $dbh->prepare(
-"select borrowernumber, firstname, surname, flags, borrowers.branchcode, branches.branchname as branchname, branches.branchprinter as branchprinter, email from borrowers left join branches on borrowers.branchcode=branches.branchcode where cardnumber=?"
+                    my $sth = $dbh->prepare(
+"SELECT borrowernumber, firstname, surname, flags, borrowers.branchcode, branches.branchname as branchname, branches.branchprinter as branchprinter, email from borrowers left join branches on borrowers.branchcode=branches.branchcode where cardnumber=?"
                       );
                     $sth->execute($cardnumber);
                     (
@@ -575,7 +505,7 @@ sub checkauth {
                 }
 
 # launch a sequence to check if we have a ip for the branch, if we have one we replace the branchcode of the userenv by the branch bound in the ip.
-                my $ip       = $ENV{'REMOTE_ADDR'};
+                my $ip = $ENV{'REMOTE_ADDR'};
                 # if they specify at login, use that
                 if ($query->param('branch')) {
                     $branchcode  = $query->param('branch');
@@ -610,27 +540,27 @@ sub checkauth {
             }
             elsif ( $return == 2 ) {
                 #We suppose the user is the superlibrarian
-                        $session->param('number',0);
-                        $session->param('id',C4::Context->config('user'));
-                        $session->param('cardnumber',C4::Context->config('user'));
-                        $session->param('firstname',C4::Context->config('user'));
-                        $session->param('surname',C4::Context->config('user'));
-                        $session->param('branch','NO_LIBRARY_SET');
-                        $session->param('branchname','NO_LIBRARY_SET');
-                        $session->param('flags',1);
-                        $session->param('emailaddress', C4::Context->preference('KohaAdminEmailAddress'));
-                        $session->param('ip',$session->remote_addr());
-                        $session->param('lasttime',time());
-                }
-                if ($session){
-                    C4::Context::set_userenv(
-                        $session->param('number'),       $session->param('id'),
-                        $session->param('cardnumber'),   $session->param('firstname'),
-                        $session->param('surname'),      $session->param('branch'),
-                        $session->param('branchname'),   $session->param('flags'),
-                        $session->param('emailaddress'), $session->param('branchprinter')
-                    );
-                }
+                               $session->param('number',0);
+                               $session->param('id',C4::Context->config('user'));
+                               $session->param('cardnumber',C4::Context->config('user'));
+                               $session->param('firstname',C4::Context->config('user'));
+                               $session->param('surname',C4::Context->config('user'));
+                               $session->param('branch','NO_LIBRARY_SET');
+                               $session->param('branchname','NO_LIBRARY_SET');
+                               $session->param('flags',1);
+                               $session->param('emailaddress', C4::Context->preference('KohaAdminEmailAddress'));
+                               $session->param('ip',$session->remote_addr());
+                               $session->param('lasttime',time());
+                       }
+            if ($session){
+                C4::Context::set_userenv(
+                     $session->param('number'),       $session->param('id'),
+                     $session->param('cardnumber'),   $session->param('firstname'),
+                     $session->param('surname'),      $session->param('branch'),
+                     $session->param('branchname'),   $session->param('flags'),
+                     $session->param('emailaddress'), $session->param('branchprinter')
+                               );
+                       }
         }
 
         else {
@@ -647,11 +577,9 @@ sub checkauth {
     {
         # successful login
         unless ($cookie) {
-            $cookie = $query->cookie( CGISESSID => ''
-            );
+            $cookie = $query->cookie( CGISESSID => '');
         }
     return ( $userid, $cookie, $sessionID, $flags );
-
     }
 
 #
@@ -692,17 +620,11 @@ sub checkauth {
       }       
       exit;
     }
-    my $template_name;
-    if ( $type eq 'opac' ) {
-        $template_name = "opac-auth.tmpl";
-    }
-    else {
-        $template_name = "auth.tmpl";
-    }
+    my $template_name = ($type eq 'opac') ? 'opac-auth.tmpl' : 'auth.tmpl';
     my $template = gettemplate( $template_name, $type, $query );
     $template->param(branchloop => \@branch_loop,);
     $template->param(
-    login        => 1,
+       login        => 1,
         INPUTS               => \@inputs,
         suggestion           => C4::Context->preference("suggestion"),
         virtualshelves       => C4::Context->preference("virtualshelves"),
@@ -716,14 +638,12 @@ sub checkauth {
         opaccolorstylesheet  => C4::Context->preference("opaccolorstylesheet"),
         opaclanguagesdisplay => C4::Context->preference("opaclanguagesdisplay"),
         opacuserjs           => C4::Context->preference("opacuserjs"),
-
-        intranetcolorstylesheet =>
-          C4::Context->preference("intranetcolorstylesheet"),
-        intranetstylesheet => C4::Context->preference("intranetstylesheet"),
-        IntranetNav        => C4::Context->preference("IntranetNav"),
-        intranetuserjs     => C4::Context->preference("intranetuserjs"),
-        TemplateEncoding   => C4::Context->preference("TemplateEncoding"),
-        IndependantBranches     => C4::Context->preference("IndependantBranches"),
+        intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
+        intranetstylesheet   => C4::Context->preference("intranetstylesheet"),
+        IntranetNav          => C4::Context->preference("IntranetNav"),
+        intranetuserjs       => C4::Context->preference("intranetuserjs"),
+        TemplateEncoding     => C4::Context->preference("TemplateEncoding"),
+        IndependantBranches  => C4::Context->preference("IndependantBranches"),
     );
     $template->param( loginprompt => 1 ) unless $info{'nopermission'};
 
@@ -745,13 +665,11 @@ sub checkauth {
 }
 
 sub checkpw {
-
     my ( $dbh, $userid, $password ) = @_;
 
     # INTERNAL AUTH
-    my $sth =
-      $dbh->prepare(
-"select password,cardnumber,borrowernumber,userid,firstname,surname,branchcode,flags from borrowers where userid=?"
+    my $sth = $dbh->prepare(
+"SELECT password,cardnumber,borrowernumber,userid,firstname,surname,branchcode,flags from borrowers where userid=?"
       );
     $sth->execute($userid);
     if ( $sth->rows ) {
@@ -760,14 +678,13 @@ sub checkpw {
           = $sth->fetchrow;
         if ( md5_base64($password) eq $md5password ) {
 
-            C4::Context->set_userenv( "$borrowernumber", $userid, $cardnumber,
+            C4::Context->set_userenv($borrowernumber, $userid, $cardnumber,
                 $firstname, $surname, $branchcode, $flags );
             return 1, $cardnumber;
         }
     }
-    $sth =
-      $dbh->prepare(
-"select password,cardnumber,borrowernumber,userid, firstname,surname,branchcode,flags from borrowers where cardnumber=?"
+    $sth = $dbh->prepare(
+"SELECT password,cardnumber,borrowernumber,userid, firstname,surname,branchcode,flags from borrowers where cardnumber=?"
       );
     $sth->execute($userid);
     if ( $sth->rows ) {
@@ -782,7 +699,7 @@ sub checkpw {
         }
     }
     if (   $userid && $userid eq C4::Context->config('user')
-        && "$password" eq C4::Context->config('pass') )
+        && $password eq C4::Context->config('pass') )
     {
 
 # Koha superuser account
@@ -790,7 +707,7 @@ sub checkpw {
         return 2;
     }
     if (   $userid && $userid eq 'demo'
-        && "$password" eq 'demo'
+        && $password eq 'demo'
         && C4::Context->config('demo') )
     {
 
@@ -863,7 +780,6 @@ sub getborrowernumber {
     return 0;
 }
 
-END { }    # module clean-up code here (global destructor)
 1;
 __END__
 
diff --git a/C4/Auth/Auth_with_ldap.pl b/C4/Auth/Auth_with_ldap.pl
new file mode 100755 (executable)
index 0000000..f5023c0
--- /dev/null
@@ -0,0 +1,58 @@
+#!/usr/bin/perl
+#
+
+use strict;
+use warnings;
+use Test::More;
+use vars qw(%cases);
+
+BEGIN {
+       # Build a hash for our test cases.  
+       # Map: uid => userPassword
+       %cases = (
+               testuser1 => 'password1',
+               Manager   => 'secret',
+               rch       => 'password2',
+               jmf       => 'password3',
+       );
+       plan tests => 9 + keys %cases;  # this is why we define %cases in BEGIN
+       use_ok('C4::Context');                  # this is why we plan tests in BEGIN
+       use_ok('C4::Auth_with_ldap', qw/checkauth/);
+}
+
+our $width = 18;
+our $format = '(%' .$width. 's) returns (%s, %s)';
+diag("format: $format\n");
+# returns pretty test case description 
+sub description ($$$) {
+       my $argstring = shift;
+       my $dif = $width - length ($argstring);
+       ($dif > 1) and $argstring .= ' ' x ($dif/2);
+       my $ret1 = (defined $_[0] and length $_[0]) ? shift : '';
+       my $ret2 = (defined $_[0] and length $_[0]) ? shift : '';
+       return sprintf $format, $argstring,$ret1,$ret2;
+}
+
+my ($ret1,$ret2,$dbh);
+ok($dbh = C4::Context->dbh,    "Getting dbh from C4::Context");
+
+diag("\nThe basis for authentication is that we do NOT just auth everybody.
+       So first we'll make sure we reject on bad calls to checkauth.\n");
+diag("\nAll further tests will be of the form:\n\t \&checkauth(\$dbh, USER, PASS)\n" .
+       "The (USER, PASS) arguments will be displayed with the value(s) returned.");
+print "\n";
+
+ok(($ret1,$ret2) = &checkauth($dbh),   description('[ no   args]',$ret1,$ret2));
+ok($ret1 == 0, "Valid Rejection");
+ok(($ret1,$ret2) = &checkauth($dbh,,), description('[empty args]',$ret1,$ret2));
+ok($ret1 == 0, "Valid Rejection");
+ok(($ret1,$ret2) = &checkauth($dbh,'',''),     description("'',''",$ret1,$ret2));
+ok($ret1 == 0, "Valid Rejection");
+
+print "\n\n";
+diag("Those \nNow let's process " . scalar(keys %cases) . " test cases.\n");
+print "\n";
+foreach (sort keys %cases) {
+       ok(($ret1,$ret2) = &checkauth($dbh,$_,$cases{$_}), description("$_\, $cases{$_}",$ret1,$ret2));
+}
+print "More tests are needed.\n";