Greetings,
Just came across a minor (but annoying) bug in the documentation.
The following extract :
"CONSTRUCTOR
encode => 'none' | 'canonical' | 'base64'
Some values in LDIF cannot be written verbatim and have to be
encoded in some way:
'none' The default.
'canonical' See "canonical_dn" in Net::LDAP::Util.
'base64' Use base64."
would lead you to believe that the 'encode' flag applies to all objects, when in fact it applies only to the DN.
from version 0.15
348 sub _write_attr { 349 my($attr,$val,$wrap,$lower) = @_; 350 my $v; 351 my $res = 1; # result value 352 foreach $v (@$val) { 353 my $ln = $lower ? lc $attr : $attr; 354 if ($v =~ /(^[ :]|[\x00-\x1f\x7f-\xff])/) { 355 require MIME::Base64; 356 $ln .= ":: " . MIME::Base64::encode($v,""); 357 } 358 else { 359 $ln .= ": " . $v; 360 } 361 $res &&= print _wrap($ln,$wrap),"\n"; 362 } 363 $res; 364 }
makes no reference to the encode flag, while :
385 sub _write_dn {
386 my($dn,$encode,$wrap) = @_;
387 if ($dn =~ /^[ :<]|[\x00-\x1f\x7f-\xff]/) {
388 if ($encode =~ /canonical/i) {
389 require Net::LDAP::Util;
390 $dn = Net::LDAP::Util::canonical_dn($dn);
391 # Canonicalizer won't fix leading spaces, colons or less-thans, which
392 # are special in LDIF, so we fix those up here.
393 $dn =~ s/^([ :<])/\\$1/;
394 } elsif ($encode =~ /base64/i) {
395 require MIME::Base64;
396 $dn = "dn:: " . MIME::Base64::encode($dn,"");
397 } else {
398 $dn = "dn: $dn";
is the only place I was able to find a reference to the use of the encode flag value.
I think that either the encode flag needs to be renamed encodedn (none|base64|canonical) and the encode flag redirected to apply to attribute values, but that would break a lot of existing code. Alternatively, checking the encode flag globally would put the code back in sync with the documentation.
Comments ?
Erik