Difference between revisions of "PHP Extensions"
[unchecked revision] | [unchecked revision] |
(→LDAP Session Control) |
|||
Line 55: | Line 55: | ||
== LDAP Session Control == | == LDAP Session Control == | ||
− | [https://tools.ietf.org/html/ | + | [https://tools.ietf.org/html/draft-wahl-ldap-session-03 draft-wahl-ldap-session-03] |
The implementation of the control creation is complete, but controls can currently only be passed to the add/modify/replace/delete functions. | The implementation of the control creation is complete, but controls can currently only be passed to the add/modify/replace/delete functions. | ||
Line 74: | Line 74: | ||
); | ); | ||
− | $ | + | $sessionSourceIp = "192.168.1.10"; |
− | $ | + | $sessionSourceName = "api.stoney-cloud.org"; |
+ | $sessionTrackingIdentifier = "tmueller"; // username | ||
− | $control = ldap_control_session_tracking($link, | + | $control = ldap_control_session_tracking($link, $sessionSourceIp, $sessionSourceName, LDAP_CONTROL_X_SESSION_TRACKING_USERNAME, $sessionTrackingIdentifier); |
ldap_modify($link, "dc=my-domain,dc=com", $entry, $control) | ldap_modify($link, "dc=my-domain,dc=com", $entry, $control) | ||
Line 85: | Line 86: | ||
<pre> | <pre> | ||
− | Apr 25 14:59:32 testmachine slapd[4208]: conn=1014 op=5 [IP= | + | Apr 25 14:59:32 testmachine slapd[4208]: conn=1014 op=5 [IP=192.168.1.10 NAME=api.stoney-cloud.org USERNAME=tmueller] MOD dn="dc=my-domain,dc=com" |
− | Apr 25 14:59:32 testmachine slapd[4208]: conn=1014 op=5 [IP= | + | Apr 25 14:59:32 testmachine slapd[4208]: conn=1014 op=5 [IP=192.168.1.10 NAME=api.stoney-cloud.org USERNAME=tmueller] MOD attr=objectClass dc o description |
− | Apr 25 14:59:32 testmachine slapd[4208]: conn=1014 op=5 [IP= | + | Apr 25 14:59:32 testmachine slapd[4208]: conn=1014 op=5 [IP=192.168.1.10 NAME=api.stoney-cloud.org USERNAME=tmueller] RESULT tag=103 err=0 text= |
</pre> | </pre> | ||
+ | |||
[[Category:Documentation]] | [[Category:Documentation]] | ||
[[Category:PHP]] | [[Category:PHP]] | ||
[[Category:LDAP]] | [[Category:LDAP]] |
Revision as of 20:29, 27 April 2014
Several extensions to the existing PHP LDAP API have been developed to make it more suitable to our needs.
Currently, the add/modify/replace/delete functions have been patched to accept additional parameters for server and client controls.
General examples
Single control:
ldap_modify($link, $dn, $entry, $control);
Multiple controls:
ldap_modify($link, $dn, $entry, [$control1, $control2]);
LDAP Assertion Control
To be able to safely change values, the Assertion Control is needed which results in a Compare-and-Set functionality.
Example (taken from ext/ldap/tests/ldap_control_assertion_basic.phpt
):
$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); $entry = array( "objectClass" => array( "top", "dcObject", "organization"), "dc" => "stoney-cloud", "o" => "stoney-cloud", "description" => "stoney cloud root object", ); ldap_modify($link, "dc=stoney-cloud,dc=org", $entry); $assertion_string = "(description=stoney cloud root object)"; $control = ldap_control_assertion($link, $assertion_string); // the following fails if the description has been changed in the meantime ldap_modify($link, "dc=my-domain,dc=com", $entry, $control);
This can be used to safely increment variables, reserve IP addresses without race conditions.
Given a field in the LDAP which contains the the next free id or IP address:
- get the current value
- increment the value
- set the new value with the assert that the value must match the previously fetched one
- if it succeeds you can safely use the previously set value, if not: repeat the procedure
LDAP Session Control
The implementation of the control creation is complete, but controls can currently only be passed to the add/modify/replace/delete functions.
The idea of this control is the possibility of tracking the queries made in the LDAP for a given session in the application:
$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); $entry = array( "objectClass" => array( "top", "dcObject", "organization"), "dc" => "my-domain", "o" => "my-domain", "description" => "Domain description", ); $sessionSourceIp = "192.168.1.10"; $sessionSourceName = "api.stoney-cloud.org"; $sessionTrackingIdentifier = "tmueller"; // username $control = ldap_control_session_tracking($link, $sessionSourceIp, $sessionSourceName, LDAP_CONTROL_X_SESSION_TRACKING_USERNAME, $sessionTrackingIdentifier); ldap_modify($link, "dc=my-domain,dc=com", $entry, $control)
which results in the following log of the ldap (using loglevel stats
):
Apr 25 14:59:32 testmachine slapd[4208]: conn=1014 op=5 [IP=192.168.1.10 NAME=api.stoney-cloud.org USERNAME=tmueller] MOD dn="dc=my-domain,dc=com" Apr 25 14:59:32 testmachine slapd[4208]: conn=1014 op=5 [IP=192.168.1.10 NAME=api.stoney-cloud.org USERNAME=tmueller] MOD attr=objectClass dc o description Apr 25 14:59:32 testmachine slapd[4208]: conn=1014 op=5 [IP=192.168.1.10 NAME=api.stoney-cloud.org USERNAME=tmueller] RESULT tag=103 err=0 text=