From: <de...@de...> - 2007-06-04 10:09:10
|
Author: MichaelDaum Date: 2007-06-04 05:09:09 -0500 (Mon, 04 Jun 2007) New Revision: 14026 Modified: twiki/branches/MAIN/twikiplugins/LdapContrib/data/TWiki/LdapContrib.txt twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Contrib/LdapContrib.pm twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Users/LdapUser.pm twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Users/LdapUserMapping.pm Log: Item4205:Item4206: * don't be case-sensitive for login names * return an empty list instead of undef if the core asks for members of a non-existing group * encode/decode from/to utf8 when exchaning strings btw LDAP and TWiki Modified: twiki/branches/MAIN/twikiplugins/LdapContrib/data/TWiki/LdapContrib.txt =================================================================== --- twiki/branches/MAIN/twikiplugins/LdapContrib/data/TWiki/LdapContrib.txt 2007-06-04 05:56:04 UTC (rev 14025) +++ twiki/branches/MAIN/twikiplugins/LdapContrib/data/TWiki/LdapContrib.txt 2007-06-04 10:09:09 UTC (rev 14026) @@ -242,8 +242,11 @@ This work was partly funded by [[http://www.spanlink.com][Spanlink Communications]] and \ [[http://www.trivadis.com][Trivadis]] | | License: | GPL ([[http://www.gnu.org/copyleft/gpl.html][GNU General Public License]]) | -| Version: | v1.01 | +| Version: | v1.02 | | Change History: | | +| 04 June 2007: | don't be casesensitive for login names; \ + fixed several utf8 issues; \ + fixed crash when no groups where found | | 30 Apr 2007: | fixed return value on illegal lookup calls | | 24 Apr 2007: | be robust against the lookup-API being called with the wrong parameters; \ added =Debug= flag; \ @@ -279,4 +282,4 @@ | Appraisal: | TWiki:Plugins/%TOPIC%Appraisal | --- TWiki:Main/MichaelDaum - 30 April 2007 +-- TWiki:Main/MichaelDaum - 04 June 2007 Modified: twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Contrib/LdapContrib.pm =================================================================== --- twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Contrib/LdapContrib.pm 2007-06-04 05:56:04 UTC (rev 14025) +++ twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Contrib/LdapContrib.pm 2007-06-04 10:09:09 UTC (rev 14026) @@ -22,11 +22,12 @@ use Net::LDAP::Control::Paged; use Net::LDAP::Constant qw(LDAP_SUCCESS LDAP_SIZELIMIT_EXCEEDED LDAP_CONTROL_PAGED); use Digest::MD5 qw( md5_hex ); +use Unicode::MapUTF8 qw(from_utf8 to_utf8); use vars qw($VERSION $RELEASE $sharedLdapContrib); $VERSION = '$Rev$'; -$RELEASE = 'v1.01'; +$RELEASE = 'v1.02'; =begin text @@ -212,14 +213,18 @@ die "illegal call to connect()" unless defined($passwd); my $msg = $this->{ldap}->bind($dn, password=>$passwd); $this->writeDebug("bind for $dn"); - return ($this->checkError($msg) == LDAP_SUCCESS)?1:0; + my $isOk = ($this->checkError($msg) == LDAP_SUCCESS)?1:0; + $this->writeDebug("failed to bind") unless $isOk; + return $isOk; } # proxy user if ($this->{bindDN} && $this->{bindPassword}) { my $msg = $this->{ldap}->bind($this->{bindDN},password=>$this->{bindPassword}); $this->writeDebug("proxy bind"); - return ($this->checkError($msg) == LDAP_SUCCESS)?1:0; + my $isOk = ($this->checkError($msg) == LDAP_SUCCESS)?1:0; + $this->writeDebug("failed to bind") unless $isOk; + return $isOk; } # anonymous bind @@ -301,6 +306,7 @@ sub getAccount { my ($this, $login) = @_; + $login = lc($login); $this->writeDebug("called getAccount($login)"); return undef if $this->{excludeMap}{$login}; @@ -421,6 +427,8 @@ while (my $entry = $msg->pop_entry()) { my $groupName = $entry->get_value($groupAttribute); + $groupName = from_utf8(-string=>$groupName, -charset=>$TWiki::cfg{Site}{CharSet}) + unless $TWiki::cfg{Site}{CharSet} =~ /^utf-?8$/i; $this->{groupNames}{$groupName} = 1; } @@ -477,6 +485,9 @@ $args{limit} = 0 unless $args{limit}; $args{attrs} = ['*'] unless $args{attrs}; + $args{filter} = to_utf8(-string=> $args{filter}, -charset=>$TWiki::cfg{Site}{CharSet}) + if $args{filter} && $TWiki::cfg{Site}{CharSet} !~ /^utf-?8$/i; + if ($this->{debug}) { my $attrString = join(',', @{$args{attrs}}); $this->writeDebug("called search(filter=$args{filter}, base=$args{base}, scope=$args{scope}, limit=$args{limit}, attrs=$attrString)"); @@ -496,8 +507,12 @@ $this->writeDebug("error in search: ".$this->getError()); return undef; } - $this->writeDebug("done search"); + if ($this->{debug}) { + $this->writeDebug("found ".$msg->count." entries"); + $this->writeDebug("done search"); + } + return $msg; } Modified: twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Users/LdapUser.pm =================================================================== --- twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Users/LdapUser.pm 2007-06-04 05:56:04 UTC (rev 14025) +++ twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Users/LdapUser.pm 2007-06-04 10:09:09 UTC (rev 14026) @@ -154,6 +154,7 @@ sub getEmails { my ($this, $login) = @_; + $login = lc($login); $this->{ldap}->writeDebug("getEmails($login)"); # guest has no email addrs Modified: twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Users/LdapUserMapping.pm =================================================================== --- twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Users/LdapUserMapping.pm 2007-06-04 05:56:04 UTC (rev 14025) +++ twiki/branches/MAIN/twikiplugins/LdapContrib/lib/TWiki/Users/LdapUserMapping.pm 2007-06-04 10:09:09 UTC (rev 14026) @@ -143,9 +143,13 @@ push @{$memberUser->{groups}}, $group; # backlink the user to the group } } else { - # fallback to twiki groups - if ($this->{ldap}{twikiGroupsBackoff}) { + # fallback to twiki groups, + # try also to find the SuperAdminGroup + if ($this->{ldap}{twikiGroupsBackoff} + || $group->wikiName eq $TWiki::cfg{SuperAdminGroup}) { return $this->SUPER::groupMembers($group) || []; + } else { + $group->{members} = []; } } } @@ -179,6 +183,9 @@ sub lookupLoginName { my ($this, $name) = @_; + # make all login names same case for LDAP + $name = lc($name); + $this->{ldap}->writeDebug("called lookupLoginName($name)"); unless ($this->{ldap}{excludeMap}{$name}) { @@ -231,6 +238,7 @@ # removing leading web $name =~ s/^.*\.(.*?)$/$1/o; + $name =~ lc($name); $this->{ldap}->writeDebug("called lookupWikiName($name)"); @@ -336,15 +344,19 @@ # insert results into the mapping while (my $entry = $mesg->pop_entry()) { my $loginName = $entry->get_value($this->{ldap}{loginAttribute}); - $loginName = from_utf8(-string=>$loginName, -charset=>$TWiki::cfg{Site}{CharSet}); my $dn = $entry->dn(); + $loginName = from_utf8(-string=>$loginName, -charset=>$TWiki::cfg{Site}{CharSet}) + unless $TWiki::cfg{Site}{CharSet} =~ /^utf-?8$/i; + $loginName = lc($loginName); # construct the wikiName my $wikiName; foreach my $attr (@{$this->{ldap}{wikiNameAttributes}}) { my $value = $entry->get_value($attr); next unless $value; - $value = from_utf8(-string=>$value, -charset=>$TWiki::cfg{Site}{CharSet}); + $value = from_utf8(-string=>$value, -charset=>$TWiki::cfg{Site}{CharSet}) + unless $TWiki::cfg{Site}{CharSet} =~ /^utf-?8$/i; + unless ($this->{ldap}{normalizeWikiName}) { $wikiName .= $value; next; @@ -555,7 +567,8 @@ # fetch all members my @members = (); foreach my $member ($groupEntry->get_value($this->{ldap}{memberAttribute})) { - $member = from_utf8(-string=>$member, -charset=>$TWiki::cfg{Site}{CharSet}); + $member = from_utf8(-string=>$member, -charset=>$TWiki::cfg{Site}{CharSet}) + unless $TWiki::cfg{Site}{CharSet} =~ /^utf-?8$/i; $this->{ldap}->writeDebug("found member=$member"); |