[turba] Turba, LDAP, "$", and mapquest

Andrew Morgan morgan at orst.edu
Sun Mar 2 11:38:58 PST 2003



On Sun, 2 Mar 2003, Adam Tauno Williams wrote:

> >It is LDAP standard to use a "$" to represent newlines in multilined values,
> >as
> >RFC2252 says:
> >
> >6.27. Postal Address
> >   ( 1.3.6.1.4.1.1466.115.121.1.41 DESC 'Postal Address' )
> >   Values in this syntax are encoded according to the following BNF:
> >      postal-address = dstring *( "$" dstring )
> >   In the above, each dstring component of a postal address value is
> >   encoded as a value of type Directory String syntax.  Backslashes and
> >   dollar characters, if they occur in the component, are quoted as
> >   described in section 4.3.   Many servers limit the postal address to
> >   six lines of up to thirty characters.
> >   Example:
> >      1234 Main St.$Anytown, CA 12345$USA
> >      241,000,000 Sweepstakes$PO Box 1000000$Anytown, CA 12345$USA
> >
> >Is it possible to enable "$" -> "\n" translation in the Turba LDAP driver?
> >I've
> >noticed this for along time, but never cared.  Now it pretty much breaks
> >mapquest support as this appears to confuse the address parser.
>
> A brutal way to fix this is to modify function getResults($fields, $res) in
> lib/Drivers/ldap.php to look like -
>
>                    $result[$field] = '';
>                     if (!empty($entry[$field])) {
>                         for ($j = 0; $j < $entry[$field]['count']; $j++) {
>                             if (!empty($result[$field])) {
>                                 $result[$field] .= $this->separator;
>                             }
>                             if ($this->encoding == 'utf8') {
>                                 //$result[$field] .=
> utf8_decode($entry[$field][$j]);
>                                 $result[$field] .= str_replace("$", "\n",
> utf8_decode($entry[$field][$j]));
>                             } else {
>                                 //$result[$field] .= $entry[$field][$j];
>
>                                 $result[$field] .= str_replace("$", "\n",
> $entry[$field][$j]);
>                             }
>                         }
>                     }
>
> But I imagine this would break reading on non-text entries like PGP keys, JPEG
> photos, etc... if someone uses those types of attributes with Turba.
>
> Is there a way to check a fields type (if "multiline") from this point in the
> code so I can only do the "$" magic in that case?  And what is the easiest way
> in PHP to expand the dollar sign only if it is not escaped ("\$") as in that
> case we would want to leave it alone.

It is important to note (as you basically say above) that the $ == newline
rule only applies to attributes with the syntax OID of
1.3.6.1.4.1.1466.115.121.1.41 (postalAddress, see rfc 2252 page 8).  Any $
<=> newline conversion should only be done on attributes with this syntax.
This probably requires some kind of attribute identifier in the Turba
config so that you can specify which attributes should get the conversion.

	Andy



More information about the turba mailing list