Hi,

Uhm, how about the example I gave? ;-)  (note: the bug screen must have stripped off 
my backslashes from the example).

Example:-

   $info["postalAddress"] = base64_encode("address line\r\naddress line 2\r\n");
   ldap_add($ds,"cn=something", $info);

Aha!  I understand things.  The light dawns (slap on forehead).  I simply don't base64 
encode it.  My problem was that I was assuming the attribute value worked the same as 
in an ldif file; "ldapadd" command line utility which imports ldif files doesn't 
permit/recognise a
carriage return or linefeed as part of the data element because they are record 
[attribute] terminators.  So the string had to be base64 encoded and then you had to 
tell ldap that it is a binary field so it could decode it before it stored it.

Because php4 bypasses the ldif parser, of course it knows how to store the data as-is.

Silly me!  I never thought to try it without encoding it first.

Working example:

   $info["postalAddress"] = "address line\r\naddress line 2\r\n";
   ldap_add($ds,"cn=something", $info);

Thanks and sorry for being so stupid.  Time for a coffee or ten. ;-)

Best Regards,

Brian


Bug Database wrote:

> ID: 10143
> Updated by: sniper
> Reported By: [EMAIL PROTECTED]
> Old-Status: Open
> Status: Feedback
> Bug Type: Feature/Change Request
> Assigned To:
> Comments:
>
> I can add binary data with PHP4.0.5-dev and ldap_add(). e.g. Photos, certificates 
>and sounds. Do you have any example code (short!) which would clarify what you mean?
>
> --Jani
>
> Previous Comments:
> ---------------------------------------------------------------------------
>
> [2001-04-03 13:30:33] [EMAIL PROTECTED]
> [actually the version is 4.0.5-dev but that isn't listed]
>
> Adding binary data to an ldap entry isn't possible at present because there is no 
>capability in the [php] ldap code to do it.
>
> It would be very nice if some clever person could allow the following syntax to be 
>used  attributename;binary .
>
> A simple example to encode cr+lf into a string so that clients display the entry 
>over two lines:-
>
> $info["postalAddress;binary"] = base64_encode("address line 1rnaddress line 2rn");
>
> The extra ;binary would then signify (as in an ldif file) that the data is to be 
>treated as binary.  This syntax seems to be standard.  I've also seen postaladdress:: 
>in an ldif file (the double colon signifying binary) but use of that would be less 
>clear/obvious imho.
>
> Then a change would be needed to ext/ldap/ldap.c to do the following when the 
>;binary appears in an attribute name
>
> (from the openldap man page on ldap_modify)
>
> OpenLDAP 2.0.7-Rel   Last change: 22 September 1998
> If you need to specify a non-string value (e.g., to add a
> photo or audio attribute value), you should set mod_op to the logical OR of the 
>operation as above (e.g.,
> LDAP_MOD_REPLACE) and the constant LDAP_MOD_BVALUES. In this case, mod_bvalues 
>should be used instead of mod_values, and  it should point to a null-terminated array 
>of struct bervals, as defined in <lber.h>.
>
> I'm no great c programmer and would get stuck at the first hurdle, but this would be 
>a great addition for ldap and in the hands of an expert doesn't look like it would 
>take too long to implement.
>
> Many thanks once again for... well, everything!
>
> Best Regards,
>
> Brian
>
> ---------------------------------------------------------------------------
>
> ATTENTION! Do NOT reply to this email!
> To reply, use the web interface found at http://bugs.php.net/?id=10143&edit=2
----------------------------------------- (on suk.neceur.com)

Any opinions expressed in this email are not necessarily those of the company.



---------------------------------------------------------

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to