Subject: | Fix SASL/GSSAPI behaviour when talking to round-robin server |
This is repeated from
http://marc.info/?l=perl-ldap-dev&m=120853646505515
(the mailing list is listed as the place to send bug reports, etc, but
there are other issues already in RT)
The attached patch against 0.35 fixes an obscure problem with Net::LDAP
when talking to a round-robin LDAP server(s) using SASL/GSSAPI
authentication.
Without it, the SASL layer is passed the round-robin name, but if, when
the SASL/GSSAPI layer attempts to canonicalise the address, it resolves
to a different host to the one IO::Socket used for its connection, a
service ticket for a conflicting server will be requested, and
authentication will fail.
The patched version has been tested with SASL GSSAPI binds to
round-robin and non round-robin addresses.
Please consider this for inclusion in the next Net::LDAP release.
Thanks,
Dominic
Subject: | sasl-round-robin.patch |
diff -urN perl-ldap-0.35/lib/Net/LDAP.pm perl-ldap-0.35.mine/lib/Net/LDAP.pm
--- perl-ldap-0.35/lib/Net/LDAP.pm 2008-03-30 19:50:13.000000000 +0100
+++ perl-ldap-0.35.mine/lib/Net/LDAP.pm 2008-04-18 17:15:54.000000000 +0100
@@ -377,9 +377,16 @@
if $ldap->{net_ldap_version} < 3;
my $sasl = $passwd;
+
+ # If we're talking to a round-robin, the canonical name of
+ # the host we are talking to might not match the name we
+ # requested
+ my $connected_name = $ldap->{net_ldap_socket}->peerhost;
+ $connected_name ||= $ldap->{net_ldap_host};
+
my $sasl_conn = eval {
local($SIG{__DIE__});
- $sasl->client_new("ldap",$ldap->{net_ldap_host});
+ $sasl->client_new("ldap",$connected_name);
};
return _error($ldap, $mesg, LDAP_LOCAL_ERROR, "$@")