Groups | Search | Server Info | Login | Register
| Newsgroups | perl.ldap |
|---|---|
| Subject | Re: (Net::LDAP) Automatically convert attributes into utf8 when writting |
| References | <3262561440500066@web15g.yandex.ru> |
| Message-ID | <55DC4BB5.6030501@keutel.de> (permalink) |
| Date | 2015-08-25 13:04 +0200 |
| From | mlists@keutel.de ("Keutel, Jochen (mlists)") |
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
Back to perl.ldap | Previous | Next — Previous in thread | Next in thread | Find similar
(Net::LDAP) Automatically convert attributes into utf8 when writting pe.rl@yandex.com (pe rl) - 2015-08-25 12:54 +0200
Re: (Net::LDAP) Automatically convert attributes into utf8 when writting mlists@keutel.de ("Keutel, Jochen (mlists)") - 2015-08-25 13:04 +0200
Re: (Net::LDAP) Automatically convert attributes into utf8 when writting pe.rl@yandex.com (pe rl) - 2015-08-25 13:37 +0200
Re: (Net::LDAP) Automatically convert attributes into utf8 when writting peter@adpm.de (Peter Marschall) - 2015-08-29 13:54 +0200
Re: (Net::LDAP) Automatically convert attributes into utf8 when writting pe.rl@yandex.com (pe rl) - 2015-08-31 09:42 +0200
csiph-web