diff --git a/lib/WebGUI/Authentication.pm b/lib/WebGUI/Authentication.pm index f2a06d6fc..8a8a94750 100644 --- a/lib/WebGUI/Authentication.pm +++ b/lib/WebGUI/Authentication.pm @@ -147,9 +147,7 @@ sub deleteParams { =item authMethod - Optionally specify the authentication method. Defaults - to the user's current authentication method. If the user does not have - an authentication method, then it defaults to the system-wide + Optionally specify the authentication method. Defaults to the system-wide authentication method. =cut @@ -157,12 +155,6 @@ sub deleteParams { sub getParams { my $uid = shift; my $authMethod = shift; - if ($uid != $session{user}{userId} && $authMethod eq "") { - my $u = WebGUI::User->new($uid); - $authMethod = $u->authMethod; - } else { - $authMethod = $session{user}{authMethod}; - } $authMethod = $session{setting}{authMethod} if ($authMethod eq ""); return WebGUI::SQL->buildHashRef("select fieldName, fieldData from authentication where userId=$uid and authMethod='$authMethod'"); diff --git a/lib/WebGUI/Authentication/LDAP.pm b/lib/WebGUI/Authentication/LDAP.pm index 50115088b..f286cadc1 100644 --- a/lib/WebGUI/Authentication/LDAP.pm +++ b/lib/WebGUI/Authentication/LDAP.pm @@ -36,21 +36,15 @@ my %ldapStatusCode = ( 0=>'success (0)', 1=>'Operations Error (1)', 2=>'Protocol #------------------------------------------------------------------- sub authenticate { - my ($userId, $password, $userData, $uri, $port, %args, $ldap, $auth, $result); + my ($userId, $password, $userData, $uri, $ldap, $auth, $result); $userId = $_[0]->[0]; my $identifier = $_[0]->[1]; $userData = WebGUI::Authentication::getParams($userId, 'LDAP'); - $uri = URI->new($userData->{ldapURL}); - if ($uri->port < 1) { - $port = 389; - } else { - $port = $uri->port; - } - %args = (port => $port); - $ldap = Net::LDAP->new($uri->host, %args) or $result = WebGUI::International::get(2,'Auth/LDAP'); - return $result if $result; - $auth = $ldap->bind(dn=>$$userData{connectDN}, password=>$identifier); - if ($auth->code == 48 || $auth->code == 49) { + if ($uri = URI->new($userData->{ldapUrl})) { + $ldap = Net::LDAP->new($uri->host, (port=>$uri->port)) or $result = WebGUI::International::get(2,'Auth/LDAP'); + return $result if $result; + $auth = $ldap->bind(dn=>$$userData{connectDN}, password=>$identifier); + if ($auth->code == 48 || $auth->code == 49) { $result = WebGUI::International::get(68); } elsif ($auth->code > 0) { $result .= 'LDAP error "'.$ldapStatusCode{$auth->code}.'" occured.'; @@ -59,19 +53,23 @@ sub authenticate { } else { $result = 1; } - $ldap->unbind; + $ldap->unbind; + } else { + $result = "Invalid LDAP connection URL. Contact your administrator."; + WebGUI::ErrorHandler::warn("Could not process this LDAP URL: ".$userData->{ldapUrl}); + } return $result; } #------------------------------------------------------------------- sub adminForm { my $userData = WebGUI::Authentication::getParams($_[0],'LDAP'); - my $ldapURL = $session{form}{'authLDAP.ldapURL'} || $userData->{ldapURL} || $session{setting}{ldapURL}; + my $ldapUrl = $session{form}{'authLDAP.ldapUrl'} || $userData->{ldapUrl} || $session{setting}{ldapUrl}; my $connectDN = $session{form}{'authLDAP.connectDN'} || $userData->{connectDN}; my $f; $f = WebGUI::HTMLForm->new; $f->readOnly(''.optionsLabel().''); - $f->url("authLDAP.ldapURL",WebGUI::International::get(3,'Auth/LDAP'),$ldapURL); + $f->url("authLDAP.ldapUrl",WebGUI::International::get(3,'Auth/LDAP'),$ldapUrl); $f->text("authLDAP.connectDN",WebGUI::International::get(4,'Auth/LDAP'),$connectDN); return $f->printRowsOnly; } @@ -81,7 +79,7 @@ sub adminFormSave { WebGUI::Authentication::saveParams($_[0],'LDAP', { connectDN => $session{form}{'authLDAP.connectDN'}, - ldapURL => $session{form}{'authLDAP.ldapURL'} + ldapUrl => $session{form}{'authLDAP.ldapUrl'} }); } @@ -108,7 +106,7 @@ sub registrationForm { sub registrationFormSave { my($uri, $port, %args, $ldap, $auth, $search, $connectDN, $uid); my $uid = shift; - $uri = URI->new($session{setting}{ldapURL}); + $uri = URI->new($session{setting}{ldapUrl}); if ($uri->port < 1) { $port = 389; } else { @@ -125,7 +123,7 @@ sub registrationFormSave { WebGUI::Authentication::saveParams($uid,'LDAP', { connectDN => $connectDN, - ldapURL => $session{setting}{ldapURL} + ldapUrl => $session{setting}{ldapUrl} }); return $session{form}{'authLDAP.ldapId'}; } @@ -133,7 +131,7 @@ sub registrationFormSave { #------------------------------------------------------------------- sub registrationFormValidate { my ($uri, $error, $ldap, $port, $search, $auth, $connectDN); - $uri = URI->new($session{setting}{ldapURL}); + $uri = URI->new($session{setting}{ldapUrl}); if ($uri->port < 1) { $port = 389; } else { @@ -174,7 +172,7 @@ sub settingsForm { my $f; $f = WebGUI::HTMLForm->new; $f->readOnly(''.optionsLabel().''); - $f->url("authLDAP.ldapURL",WebGUI::International::get(5,'Auth/LDAP'),$session{setting}{ldapURL}); + $f->url("authLDAP.ldapUrl",WebGUI::International::get(5,'Auth/LDAP'),$session{setting}{ldapUrl}); $f->text("authLDAP.ldapId",WebGUI::International::get(6,'Auth/LDAP'),$session{setting}{ldapId}); $f->text("authLDAP.ldapIdName",WebGUI::International::get(7,'Auth/LDAP'),$session{setting}{ldapIdName}); $f->text("authLDAP.ldapPasswordName",WebGUI::International::get(8,'Auth/LDAP'),$session{setting}{ldapPasswordName});