rfc:ldap_exop

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
rfc:ldap_exop [2017/06/26 14:53]
mcmic Added functions definitions
rfc:ldap_exop [2017/07/13 08:43]
mcmic
Line 3: Line 3:
   * Date: 2017-06-26   * Date: 2017-06-26
   * Author: Côme Chilliet, mcmic@php.net   * Author: Côme Chilliet, mcmic@php.net
-  * Status: ​Draft+  * Status: ​Merged
   * First Published at: http://​wiki.php.net/​rfc/​ldap_exop   * First Published at: http://​wiki.php.net/​rfc/​ldap_exop
  
Line 17: Line 17:
  
 ===== New functions ===== ===== New functions =====
 +In all these functions $link should be a valid LDAP connection object with a user bound to it already.
 <code php> <code php>
-mixed ldap_exop(resource $link, string $reqoid [, string $reqdata [, string &$retoid ​[, string &$retdata]]])+mixed ldap_exop(resource $link, string $reqoid [, string $reqdata [, string &$retdata ​[, string &$retoid]]])
 </​code>​ </​code>​
-Returns FALSE upon failure, TRUE upon success if $retoid ​is provided, and a result object otherwise (success with 3 params or less).+Returns FALSE upon failure, TRUE upon success if $retdata ​is provided, and a result object otherwise (success with 3 params or less). Either fills $retoid and $retdata or returns a result object.
 <code php> <code php>
-bool ldap_parse_exop(resource $link, resource $result [, string &$retoid ​[, string &$retdata]])+bool ldap_parse_exop(resource $link, resource $result [, string &$retdata ​[, string &$retoid]])
 </​code>​ </​code>​
 Returns TRUE upon success and FALSE upon failure. Fills $retoid and $retdata with the data from $result object. Returns TRUE upon success and FALSE upon failure. Fills $retoid and $retdata with the data from $result object.
 +
 +Note that $retoid is useless in most cases, EXOPs usually leave it empty or fill it with $reqoid. This is why it’s in last position.
 +
 +This RFC also wish to introduce helper functions for common EXOP usage:
 +<code php>
 +bool|string ldap_exop_whoami(resource $link)
 +bool|string ldap_exop_passwd(resource $link, [string $user, [string $oldpw, [string $newpw]]])
 +</​code>​
 +The first one would call whoami EXOP and returns the result. Returns FALSE upon failure.
 +The second one would call passwd EXOP and return TRUE or FALSE upon failure. If $newpw is empty, returns the generated password for the user. If $user is empty, it affects the bound user.
 +
 +The author of the original patch stated that technically ldap_start_tls is an exop helper and therefore could be renamed ldap_exop_start_tls. We feel this would be a useless BC.
 +
 +The original patch (and current code) provided a possibility to get a result object from helpers as well, and provided ldap_parse_exop_* helpers to parse the result objects from these operations. We feel this is too complex and does not add anything to the RFC so we intend to leave them out.
 +
 +For consistency with existing ldap functions, theses function may produce E_WARNING in case of error or failure.
 +The safe way to use them is to use @ when calling them. ldap_error() can be used to get the last LDAP error in cases where it makes sense.
 +
 +===== Examples =====
 +<code php>
 +// Call EXOP whoami and store the result in $identity
 +if (ldap_exop($link,​ LDAP_EXOP_WHO_AM_I,​ NULL, $identity)) {
 +  echo "​Connected as $identity\n";​
 +} else {
 +  echo "​Operation failed\n";​
 +}
 +// Same thing using a result object
 +$r = ldap_exop($link,​ LDAP_EXOP_WHO_AM_I);​
 +if (($r !== FALSE) && ldap_parse_exop($link,​ $r, $retdata)) {
 +  echo "​Connected as $retdata\n";​
 +} else {
 +  echo "​Operation failed\n";​
 +}
 +// Same thing with the helper
 +if (ldap_exop_whoami($link,​ $identity)) {
 +  echo "​Connected as $identity\n";​
 +} else {
 +  echo "​Operation failed\n";​
 +}
 +// Changing password with the helper
 +if (ldap_exop_passwd($link,​ '​uid=johndoe,​dc=example,​dc=com',​ '',​ '​newpassword'​)) {
 +  echo "​Password changed\n";​
 +} else {
 +  echo "​Operation failed\n";​
 +}
 +</​code>​
  
 ===== Backward Incompatible Changes ===== ===== Backward Incompatible Changes =====
Line 30: Line 77:
  
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
-7.2 if possible, 7.3/8 otherwise+Next PHP 7.x release
  
 ===== RFC Impact ===== ===== RFC Impact =====
Line 48: Line 95:
  
 ===== Open Issues ===== ===== Open Issues =====
-  ​- Should the function names contain the word "​exop"​ or is it a technical detail which should be hidden from the developer?​ +  - Should we include a constant for LDAP_EXOP_CANCEL, for the sake of completeness,​ even if this EXOP won’t be used by PHP code as all PHP LDAP operations are synchrone (in the current code state).
-  ​- Should we include a constant for LDAP_EXOP_REFRESH, for the sake of completeness,​ even if this EXOP won’t be used by PHP code as all PHP LDAP operations are synchrone (in the current code state).+
  
 ===== Unaffected PHP Functionality ===== ===== Unaffected PHP Functionality =====
Line 67: Line 113:
  
 ===== Implementation ===== ===== Implementation =====
-After the project is implemented,​ this section should contain ​ +  - Merged in PHP 7.3 
-  - the version(s) it was merged to +  - https://​github.com/​php/​php-src/​pull/​2608
-  ​a link to the git commit(s)+
   - a link to the PHP manual entry for the feature   - a link to the PHP manual entry for the feature
-  - a link to the language specification section (if any) 
  
 ===== References ===== ===== References =====
rfc/ldap_exop.txt · Last modified: 2017/09/22 13:28 (external edit)