php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #10143 need a tweak to ldap_add to set a binary flag
Submitted: 2001-04-03 13:30 UTC Modified: 2001-04-03 18:06 UTC
From: brianc at suk dot neceur dot com Assigned:
Status: Closed Package: Feature/Change Request
PHP Version: 4.0.5-dev OS: Solaris 8
Private report: No CVE-ID: None
 [2001-04-03 13:30 UTC] brianc at suk dot neceur dot com
[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 1\r\naddress line 2\r\n");

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

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-04-03 15:48 UTC] sniper@php.net
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

 [2001-04-03 18:06 UTC] sniper@php.net
User feedback:
--------------
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. ;-)

-----------

Closed.

--Jani

 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Mar 29 01:01:28 2024 UTC