diff options
author | root <root@ldap1.nordu.net> | 2011-01-27 00:07:35 +0100 |
---|---|---|
committer | root <root@ldap1.nordu.net> | 2011-01-27 00:07:35 +0100 |
commit | a80dd13869daab97532621718d3f4f6f5f65a14e (patch) | |
tree | de6bb832e10e5f9492970e51b39528b8f3f72a58 | |
parent | 4ebff28374ed6f799b053bc1332aaacc32e71d17 (diff) |
-rwxr-xr-x | LDAPShell.pm | 26 | ||||
-rw-r--r-- | README.Debian | 3 |
2 files changed, 24 insertions, 5 deletions
diff --git a/LDAPShell.pm b/LDAPShell.pm index 87e087f..8857c12 100755 --- a/LDAPShell.pm +++ b/LDAPShell.pm @@ -195,7 +195,7 @@ sub reconnect } else { - $self->{_ldap} = Net::LDAP->new($self->{_server},version=>3,port=>$self->{_port}||389); + $self->{_ldap} = $self->{_uri} ? Net::LDAP->new($self->{_uri}) : Net::LDAP->new($self->{_server},version=>3,port=>$self->{_port}||389); my $starttls = $self->getenv('STARTTLS'); if ($starttls) { @@ -305,11 +305,19 @@ sub authenticate } elsif ($self->getenv('AUTH') =~ /sasl/is) { - use Authen::SASL; - my $sasl = Authen::SASL->new(mechanism=>$self->getenv('SASL_MECH') || 'GSSAPI'); + my $mech = $self->getenv('SASL_MECH') || 'GSSAPI'; + my $sasl; + if ($mech eq 'EXTERNAL') { + use Authen::SASL qw(Perl); + $sasl = Authen::SASL->new(mechanism => 'EXTERNAL')->client_new('ldap','localhost'); + $dn = undef; + } else { + use Authen::SASL; + $sasl = Authen::SASL->new(mechanism => $mech); + } my $res = $self->{_ldap}->bind($dn,sasl=>$sasl,version=>3); $res->code && die $res->error; - $self->{_authenticated} = $dn; + $self->{_authenticated} = $dn ? $dn : 'EXTERNAL'; } else { @@ -343,6 +351,15 @@ sub getDN } push(@paths,$path); } + elsif ($ustr =~ /^ldapi:/) + { + $self->{_uri} = $ustr; + my $uri = URI->new($ustr); + $path = $uri->path; + $path =~ s/^\///o; + push(@paths,$path); + $self->reconnect(); + } elsif ($ustr =~ /^~(.+)/) { my $e = $self->getUser($1); @@ -426,6 +443,7 @@ sub url { my $self = shift; + return sprintf "%s%s",$self->{_uri},$self->{_base} if $self->{_uri}; return "not connected" unless $self->{_server}; if (!$self->{_port} || $self->{_port} == 389) diff --git a/README.Debian b/README.Debian index d2e239b..a0def9e 100644 --- a/README.Debian +++ b/README.Debian @@ -1 +1,2 @@ -apt-get ^Cstall libnet-ldap-server-perl libunicode-string-perl libtext-formattable-perl libterm-readline-gnu-perl +apt-get install libnet-ldap-server-perl libunicode-string-perl libtext-formattable-perl libterm-readline-gnu-perl libxml-sax-perl libauthen-sasl-cyrus-perl +cpan < install ResourcePool::Factory::Net::LDAP |