Re: ppolicy control and change password exop (again)

Graham Barr <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.ldap
Message-ID <[email protected]>
On May 27, 2009, at 2:58 AM, Guillaume Rousse wrote:

> Chris Ridd a écrit :
>> which is "passwordTooShort". So... the server seems OK and it must  
>> be the perl code that's going wrong somewhere. If you single-step  
>> into result->control does it look like it is finding and returning  
>> the right thing?
> Actually, it returns a list of controls, and the code enforce a  
> scalar context...
>
> Changing the code to
> my ($response) = $result->control(LDAP_CONTROL_PASSWORDPOLICY);
> is enough to fix the issue. And the documentation is correct, I just  
> misread it :(
>
> Having the method named controlS would have been less error-prone  
> but I guess it's a bit late to change it.

Actually I htink there is a bug. As you only have one control in your  
response, if you did

   my $response = $result->control;

you would have got the control.

That is because when there are arguments to ->control, the code is  
returning an array, not a list, which in a scalar context returns its  
length.

Also, the current code only supports passing one OID, although the  
docs suggest otherwise

Try this patch

diff --git a/lib/Net/LDAP/Message.pm b/lib/Net/LDAP/Message.pm
index 8e8436f..7df478d 100644
--- a/lib/Net/LDAP/Message.pm
+++ b/lib/Net/LDAP/Message.pm
@@ -210,12 +210,15 @@ sub control {
      }
    }

-  return unless $self->{ctrl_hash};
+  my $ctrl_hash = $self->{ctrl_hash}
+    or return;
+
+  my @oid = @_ ? @_ : keys %$ctrl_hash;
+  my @control = map {@$_} grep $_, @{$ctrl_hash}{@oid}
+    or return;

-  @_ ?  exists $self->{ctrl_hash}{$_[0]}
-         ? @{$self->{ctrl_hash}{$_[0]}}
-         : ()
-     : map { @$_ } values %{$self->{ctrl_hash}};
+  # return a list, so in a scalar context we do not just get array  
length
+  return @control[0 .. $#control];
  }

  sub pdu      {  shift->{pdu}      }

Graham.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.