Hello,
  instead of patching Net::LDAP you should use utf8::encode() and
utf8::decode() in your perl code.

See http://perldoc.perl.org/5.10.1/utf8.html .

Regards,  Jochen.

Am 25.08.2015 um 12:54 schrieb pe rl:
> Hi, we are using an old version of Net::LDAP (0.39) in an old perl
> installation (5.10.1). Recently we have changed the ldap server, and now it 
> uses utf8 in the entry attributes, so we are getting problems with reading 
> and 
> writting attributes with Net::LDAP.
>
> To solve it, I have read the documentation of Net::LDAP 0.39 ( at
> https://metacpan.org/pod/release/GBARR/perl-ldap-0.39/lib/Net/LDAP.pod ), and
> I see there is an option ("raw") in the constructor to indicate attributes
> that should be treated as utf8. I have tested it, and it works por reading
> from the ldap server (attribute strings are marked as utf8, so they a treated
> correctly by our programs), but it doesn't work for writting (our latin1 
> strings are not being converted automatically into utf8 before being sent). 
>
> So it looks like the "raw" option works for reading but not for writting. Is
> there any quick way to use the "raw" regex also for writting? The alternative
> would be to review all of our code and manually encode all the values to utf8
> before passing them to Net::LDAP, but it would mean a lot of work. It would be
> better if we could change the Net::LDAP library itself to convert
> automatically attributes into utf8, same as for reading. For example, a new 
> option "raw_for_writing" could be added to the constructor:
>
>       $ldap = Net::LDAP->new(
>                                 $server, 
>                                 port => $port,
>                                 raw => qr/(?i:^jpegPhoto|;binary)/,
>                                 raw_for_writing => 1,
>                             )
>
> I see that the automatic conversion for reading is done at the "decode"
> function of "Entry.pm":
>
>     sub decode {
>
>       ...
>
>       if (CHECK_UTF8 && $arg{raw}) {
>         $result->{objectName} = Encode::decode_utf8($result->{objectName})
>           if ('dn' !~ /$arg{raw}/);
>
>       ...
>
>         foreach my $elem (@{$self->{asn}{attributes}}) {
>           map { $_ = Encode::decode_utf8($_) } @{$elem->{vals}}
>             if ($elem->{type} !~ /$arg{raw}/);
>         }
>       }
>
> And I see that there is an "encode" function in "Entry.pm", that doesn't do
> the magic:
>
>     sub encode {
>       $LDAPEntry->encode( shift->{asn} );
>     }
>
> Would it be sufficient to add some similar code to the "Entry::encode" 
> function in order to automatically encode attributes to utf8 before being 
> sent?
>
> Any suggestion to reduce the amount of code to be changed in our programs?
>
> Thank you

Reply via email to