Hi Graham
On Wednesday 06 April 2005 02:55, Graham Barr wrote:
> On Apr 5, 2005, at 11:18 AM, Peter Marschall wrote:
> > Just for reference: it's in SVN since August 2004 ;-)
> >
> > Since there were some posts about documentation on the ML recently
> > maybe Graham should cut a new release of
> > * perl-ldap
> > * Authen-SASL
> >
> > Although the changes since the previous releases are not very lanrge
> > they might fix a few border cases and improve documentation.
>
> Sure, no problem. I am slowly getting back into things after my move.
>
> There was some discussion recently about one of the controls, I forget
> which,
> which made to be made more intelligent. If we can get a patch for that
> and
> any doc updates then I will do a release.
O.K, you want me to work on that, so be it ;-)
Here's a first patch to the OID problem in Net::LDAP::Control::ProxyAuth.
I haven't committed it yet, it's only in my working copy of SVN, since I
haven't done many checks on it yet.
Would you give it a brief check, so see if it matches the ideas you had ?
David, would you be so kind to also give it a try ?
With positive feedback I'll commit the changes so that we do not have
anything blocking 0.33 ;-))
CU
Peter
--
Peter Marschall
eMail: [EMAIL PROTECTED]
Index: lib/Net/LDAP/Control/ProxyAuth.pm
===================================================================
--- lib/Net/LDAP/Control/ProxyAuth.pm (revision 451)
+++ lib/Net/LDAP/Control/ProxyAuth.pm (working copy)
@@ -8,37 +8,70 @@
use Net::LDAP::Control;
@ISA = qw(Net::LDAP::Control);
-$VERSION = "1.04";
+$VERSION = "1.04_01";
+use Net::LDAP::Constant qw(LDAP_CONTROL_PROXYAUTHENTICATION);
use Net::LDAP::ASN qw(proxyAuthValue);
use strict;
+sub LDAP_CONTROL_PROXYAUTHENTICATION_OLD { "2.16.840.1.113730.3.4.12"; }
+
sub init {
my($self) = @_;
delete $self->{asn};
+ $self->{type} = LDAP_CONTROL_PROXYAUTHENTICATION_OLD
+ if (defined($self->{proxyDN}));
+
unless (exists $self->{value}) {
$self->{asn} = {
- proxyDN => $self->{proxyDN} || '',
- };
+ authzID => (defined($self->{proxyDN})
+ ? ($self->{proxyDN} || '')
+ : ($self->{authzID} || ''))
+ };
}
- $self->{critical}=1;
+ # criticality must be set !
+ $self->{critical} = 1;
$self;
}
sub proxyDN {
my $self = shift;
+
$self->{asn} ||= $proxyAuthValue->decode($self->{value});
if (@_) {
delete $self->{value};
- return $self->{asn}{proxyDN} = shift || 0;
+ $self->{type} = LDAP_CONTROL_PROXYAUTHENTICATION_OLD;
+ return $self->{asn}{authzID} = shift || '';
}
- $self->{asn}{proxyDN};
+ elsif ($self->{type} eq LDAP_CONTROL_PROXYAUTHENTICATION) {
+ $self->{error} = 'Illegal query method: use authzID()';
+ return undef;
+ }
+
+ $self->{asn}{authzID};
}
+sub authzID {
+ my $self = shift;
+
+ $self->{asn} ||= $proxyAuthValue->decode($self->{value});
+ if (@_) {
+ delete $self->{value};
+ $self->{type} = LDAP_CONTROL_PROXYAUTHENTICATION;
+ return $self->{asn}{authzID} = shift || '';
+ }
+ elsif ($self->{type} eq LDAP_CONTROL_PROXYAUTHENTICATION_OLD) {
+ $self->{error} = 'Illegal query method: use proxyDN()';
+ return undef;
+ }
+
+ $self->{asn}{authzID};
+}
+
sub value {
my $self = shift;
@@ -62,7 +95,7 @@
$ldap = Net::LDAP->new( "ldap.mydomain.eg" );
- $auth = Net::LDAP::Control::ProxyAuth->new( proxyDN => 'cn=me,ou=people,o=myorg.com' );
+ $auth = Net::LDAP::Control::ProxyAuth->new( authzID => 'dn:cn=me,ou=people,o=myorg.com' );
@args = ( base => "cn=subnets,cn=sites,cn=configuration,$BASE_DN",
scope => "subtree",
@@ -84,7 +117,7 @@
=head1 DESCRIPTION
C<Net::LDAP::Control::ProxyAuth> provides an interface for the creation and manipulation
-of objects that represent the C<proxyauthorisationControl> as described by draft-weltman-ldapv3-proxy-05.txt.
+of objects that represent the C<proxyauthorisationControl> as described by draft-weltman-ldapv3-proxy-XX.txt.
=head1 CONSTRUCTOR ARGUMENTS
@@ -93,12 +126,27 @@
=over 4
+=item authzID
+
+The authzID that is required. This is the identity we are requesting operations to use
+
=item proxyDN
-The proxyDN that is required. This is the identity we are requesting operations to use
+In older versions of draft-weltman-ldapv3-proxy-XX.txt the value in the control and thus the
+constructor argument was a DN and was called C<proxyDN>. It served the same purpose as C<authzID>
+in recent versions of C<proxyauthorisationControl>.
=back
+B<Please note:>
+Unfortunately the OID for the C<proxyauthorisationControl> changed in recent versions
+of draft-weltman-ldapv3-proxy-XX.txt.
+Net::LDAP::Control::ProxyAuth tries to cope with that situation and changes the OID
+used depending on the constructor argument. With C<proxyDN> as constructor argument
+the old OID is used, while with C<authzID> as constructor argument the new OID
+is used.
+Using this logic servers supporting either OID can be handled correctly.
+
=head1 METHODS
As with L<Net::LDAP::Control> each constructor argument
@@ -114,7 +162,9 @@
=head1 AUTHOR
Olivier Dubois, Swift sa/nv based on Net::LDAP::Control::Page from
-Graham Barr E<lt>[EMAIL PROTECTED]<gt>
+Graham Barr E<lt>[EMAIL PROTECTED]<gt>.
+Peter Marschall E<lt>[EMAIL PROTECTED]<gt> added authzID extensions
+based on ideas from Graham Barr E<lt>[EMAIL PROTECTED]<gt>.
Please report any bugs, or post any suggestions, to the perl-ldap
mailing list E<lt>[EMAIL PROTECTED]<gt>
Index: lib/Net/LDAP/ASN.pm
===================================================================
--- lib/Net/LDAP/ASN.pm (revision 451)
+++ lib/Net/LDAP/ASN.pm (working copy)
@@ -1,7 +1,7 @@
package Net::LDAP::ASN;
-$VERSION = "0.03";
+$VERSION = "0.03_01";
use Convert::ASN1;
@@ -359,7 +359,7 @@
cookie OCTET STRING }
proxyAuthValue ::= SEQUENCE {
- proxyDN LDAPDN
+ authzID LDAPString
}
ManageDsaIT ::= SEQUENCE {
Index: lib/Net/LDAP/Constant.pm
===================================================================
--- lib/Net/LDAP/Constant.pm (revision 451)
+++ lib/Net/LDAP/Constant.pm (working copy)
@@ -4,7 +4,7 @@
package Net::LDAP::Constant;
-$VERSION = "0.03";
+$VERSION = "0.03_01";
use Carp;
@@ -449,7 +449,7 @@
=item LDAP_CONTROL_VLVRESPONSE (2.16.840.1.113730.3.4.10)
-=item LDAP_CONTROL_PROXYAUTHENTICATION (2.16.840.1.113730.3.4.12)
+=item LDAP_CONTROL_PROXYAUTHENTICATION (2.16.840.1.113730.3.4.18)
=item LDAP_CONTROL_PAGED (1.2.840.113556.1.4.319)