On 5/4/05 11:01 am, Erik Ableson <[EMAIL PROTECTED]> wrote: > 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.
The text "canonical_dn" is a bit of a clue that this only applies to DNs, but I agree it isn't as helpful as it might be. > 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 ? What about leaving the code alone, and changing the docs to say "Some DNs" instead of "Some values"? (Or maybe "Some entry DNs" to make it clear that it doesn't affect DN-valued attributes.) Cheers, Chris