Revert "Auth.pm conflicted merge resolution."

Bugs are being reported for this patch, notably that the userenv
isn't populated correctly. I'm reverting immediately.

This reverts commit e0ddd34a4c.
This commit is contained in:
Joshua Ferraro 2007-11-06 14:03:54 -06:00
parent e95b448cdb
commit ae9696bc67
2 changed files with 191 additions and 165 deletions

View File

@ -32,6 +32,8 @@ 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);
@ -50,13 +52,15 @@ 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',
@ -85,15 +89,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>
@ -128,27 +132,30 @@ sub get_template_and_user {
if ($user or $insecure) {
# load the template variables for stylesheets and JavaScript
foreach (qw(css_libs css_module css_page css_widgets
js_libs js_module js_page js_widgets))
{
$template->param($_ => $in->{$_});
}
$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'} );
# user info
$template->param( loggedinusername => $user );
$template->param( sessionID => $sessionID );
$borrowernumber = getborrowernumber($user);
my ($borr, $alternativeflags) = GetMemberDetails($borrowernumber);
my @bordat = ($borr);
my ( $borr, $alternativeflags ) =
GetMemberDetails( $borrowernumber );
my @bordat;
$bordat[0] = $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 );
@ -167,29 +174,88 @@ sub get_template_and_user {
$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 ( $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 ( $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"),
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"),
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,
CircAutocompl => C4::Context->preference("CircAutocompl"),
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"),
IntranetmainUserblock => C4::Context->preference("IntranetmainUserblock"),
IndependantBranches => C4::Context->preference("IndependantBranches"),
CircAutocompl => C4::Context->preference("CircAutocompl"),
);
}
else {
@ -197,19 +263,28 @@ sub get_template_and_user {
my $LibraryNameTitle = C4::Context->preference("LibraryName");
$LibraryNameTitle =~ s/<(?:\/?)(?:br|p)\s*(?:\/?)>/ /sgi;
$LibraryNameTitle =~ s/<(?:[^<>'"]|'(?:[^']*)'|"(?:[^"]*)")*>//sg;
$template->param(
$template->param(
KohaAdminEmailAddress => "" . C4::Context->preference("KohaAdminEmailAddress"),
suggestion => "" . C4::Context->preference("suggestion"),
virtualshelves => "" . C4::Context->preference("virtualshelves"),
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,
LoginBranchname => (C4::Context->userenv?C4::Context->userenv->{"branchname"}:""),
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",
OpacPasswordChange => C4::Context->preference("OpacPasswordChange"),
opacreadinghistory => C4::Context->preference("opacreadinghistory"),
opacuserjs => C4::Context->preference("opacuserjs"),
@ -219,24 +294,12 @@ sub get_template_and_user {
OpacBrowser => C4::Context->preference("OpacBrowser"),
RequestOnOpac => C4::Context->preference("RequestOnOpac"),
reviewson => C4::Context->preference("reviewson"),
mylibraryfirst => C4::Context->preference("SearchMyLibraryFirst"),
hide_marc => C4::Context->preference("hide_marc"),
patronimages => C4::Context->preference("patronimages"),
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 );
}
@ -383,7 +446,7 @@ sub checkauth {
$sessionID = undef;
$userid = undef;
open L, ">>/tmp/sessionlog";
my $time = localtime();
my $time = localtime( time() );
printf L "%20s from %16s logged out at %30s (manually).\n", $userid,
$ip, $time;
close L;
@ -433,10 +496,15 @@ sub checkauth {
}
unless ($userid) {
my $storage_method = C4::Context->preference('SessionStorage');
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 $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 $sessionID;
if ($session) {
$sessionID = $session->id;
@ -448,7 +516,7 @@ sub checkauth {
my ( $return, $cardnumber ) = checkpw( $dbh, $userid, $password );
if ($return) {
open L, ">>/tmp/sessionlog";
my $time = localtime();
my $time = localtime( time() );
printf L "%20s from %16s logged in at %30s.\n", $userid,
$ENV{'REMOTE_ADDR'}, $time;
close L;
@ -466,8 +534,9 @@ 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);
(
@ -480,8 +549,9 @@ 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);
(
@ -505,7 +575,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');
@ -540,27 +610,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 {
@ -577,9 +647,11 @@ sub checkauth {
{
# successful login
unless ($cookie) {
$cookie = $query->cookie( CGISESSID => '');
$cookie = $query->cookie( CGISESSID => ''
);
}
return ( $userid, $cookie, $sessionID, $flags );
}
#
@ -620,11 +692,17 @@ sub checkauth {
}
exit;
}
my $template_name = ($type eq 'opac') ? 'opac-auth.tmpl' : 'auth.tmpl';
my $template_name;
if ( $type eq 'opac' ) {
$template_name = "opac-auth.tmpl";
}
else {
$template_name = "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"),
@ -638,12 +716,14 @@ 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'};
@ -665,11 +745,13 @@ 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 ) {
@ -678,13 +760,14 @@ 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 ) {
@ -699,7 +782,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
@ -707,7 +790,7 @@ sub checkpw {
return 2;
}
if ( $userid && $userid eq 'demo'
&& $password eq 'demo'
&& "$password" eq 'demo'
&& C4::Context->config('demo') )
{
@ -780,6 +863,7 @@ sub getborrowernumber {
return 0;
}
END { } # module clean-up code here (global destructor)
1;
__END__

View File

@ -1,58 +0,0 @@
#!/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";