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


Reply via email to