@@ -291,6 +291,76 @@ PHP_MINIT_FUNCTION(ldap)
291
291
REGISTER_STRING_CONSTANT ("LDAP_EXOP_TURN" , LDAP_EXOP_TURN , CONST_PERSISTENT | CONST_CS );
292
292
#endif
293
293
294
+ /* LDAP Controls */
295
+ /* standard track controls */
296
+ #ifdef LDAP_CONTROL_MANAGEDSAIT
297
+ /* RFC 3296 */
298
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_MANAGEDSAIT" , LDAP_CONTROL_MANAGEDSAIT , CONST_PERSISTENT | CONST_CS );
299
+ #endif
300
+ #ifdef LDAP_CONTROL_PROXY_AUTHZ
301
+ /* RFC 4370 */
302
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_PROXY_AUTHZ" , LDAP_CONTROL_PROXY_AUTHZ , CONST_PERSISTENT | CONST_CS );
303
+ #endif
304
+ #ifdef LDAP_CONTROL_SUBENTRIES
305
+ /* RFC 3672 */
306
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_SUBENTRIES" , LDAP_CONTROL_SUBENTRIES , CONST_PERSISTENT | CONST_CS );
307
+ #endif
308
+ #ifdef LDAP_CONTROL_VALUESRETURNFILTER
309
+ /* RFC 3876 */
310
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_VALUESRETURNFILTER" , LDAP_CONTROL_VALUESRETURNFILTER , CONST_PERSISTENT | CONST_CS );
311
+ #endif
312
+ #ifdef LDAP_CONTROL_ASSERT
313
+ /* RFC 4528 */
314
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_ASSERT" , LDAP_CONTROL_ASSERT , CONST_PERSISTENT | CONST_CS );
315
+ /* RFC 4527 */
316
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_PRE_READ" , LDAP_CONTROL_PRE_READ , CONST_PERSISTENT | CONST_CS );
317
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_POST_READ" , LDAP_CONTROL_POST_READ , CONST_PERSISTENT | CONST_CS );
318
+ #endif
319
+ #ifdef LDAP_CONTROL_SORTREQUEST
320
+ /* RFC 2891 */
321
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_SORTREQUEST" , LDAP_CONTROL_SORTREQUEST , CONST_PERSISTENT | CONST_CS );
322
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_SORTRESPONSE" , LDAP_CONTROL_SORTRESPONSE , CONST_PERSISTENT | CONST_CS );
323
+ #endif
324
+ /* non-standard track controls */
325
+ #ifdef LDAP_CONTROL_PAGEDRESULTS
326
+ /* RFC 2696 */
327
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_PAGEDRESULTS" , LDAP_CONTROL_PAGEDRESULTS , CONST_PERSISTENT | CONST_CS );
328
+ #endif
329
+ #ifdef LDAP_CONTROL_AUTHZID_REQUEST
330
+ /* RFC 3829 */
331
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_AUTHZID_REQUEST" , LDAP_CONTROL_AUTHZID_REQUEST , CONST_PERSISTENT | CONST_CS );
332
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_AUTHZID_RESPONSE" , LDAP_CONTROL_AUTHZID_RESPONSE , CONST_PERSISTENT | CONST_CS );
333
+ #endif
334
+ #ifdef LDAP_CONTROL_SYNC
335
+ /* LDAP Content Synchronization Operation -- RFC 4533 */
336
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_SYNC" , LDAP_CONTROL_SYNC , CONST_PERSISTENT | CONST_CS );
337
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_SYNC_STATE" , LDAP_CONTROL_SYNC_STATE , CONST_PERSISTENT | CONST_CS );
338
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_SYNC_DONE" , LDAP_CONTROL_SYNC_DONE , CONST_PERSISTENT | CONST_CS );
339
+ #endif
340
+ #ifdef LDAP_CONTROL_DONTUSECOPY
341
+ /* LDAP Don't Use Copy Control (RFC 6171) */
342
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_DONTUSECOPY" , LDAP_CONTROL_DONTUSECOPY , CONST_PERSISTENT | CONST_CS );
343
+ #endif
344
+ #ifdef LDAP_CONTROL_PASSWORDPOLICYREQUEST
345
+ /* Password policy Controls */
346
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_PASSWORDPOLICYREQUEST" , LDAP_CONTROL_PASSWORDPOLICYREQUEST , CONST_PERSISTENT | CONST_CS );
347
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_PASSWORDPOLICYRESPONSE" , LDAP_CONTROL_PASSWORDPOLICYRESPONSE , CONST_PERSISTENT | CONST_CS );
348
+ #endif
349
+ #ifdef LDAP_CONTROL_X_INCREMENTAL_VALUES
350
+ /* MS Active Directory controls */
351
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_X_INCREMENTAL_VALUES" , LDAP_CONTROL_X_INCREMENTAL_VALUES , CONST_PERSISTENT | CONST_CS );
352
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_X_DOMAIN_SCOPE" , LDAP_CONTROL_X_DOMAIN_SCOPE , CONST_PERSISTENT | CONST_CS );
353
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_X_PERMISSIVE_MODIFY" , LDAP_CONTROL_X_PERMISSIVE_MODIFY , CONST_PERSISTENT | CONST_CS );
354
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_X_SEARCH_OPTIONS" , LDAP_CONTROL_X_SEARCH_OPTIONS , CONST_PERSISTENT | CONST_CS );
355
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_X_TREE_DELETE" , LDAP_CONTROL_X_TREE_DELETE , CONST_PERSISTENT | CONST_CS );
356
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_X_EXTENDED_DN" , LDAP_CONTROL_X_EXTENDED_DN , CONST_PERSISTENT | CONST_CS );
357
+ #endif
358
+ #ifdef LDAP_CONTROL_X_INCREMENTAL_VALUES
359
+ /* LDAP VLV */
360
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_VLVREQUEST" , LDAP_CONTROL_VLVREQUEST , CONST_PERSISTENT | CONST_CS );
361
+ REGISTER_STRING_CONSTANT ("LDAP_CONTROL_VLVRESPONSE" , LDAP_CONTROL_VLVRESPONSE , CONST_PERSISTENT | CONST_CS );
362
+ #endif
363
+
294
364
le_link = zend_register_list_destructors_ex (_close_ldap_link , NULL , "ldap link" , module_number );
295
365
le_result = zend_register_list_destructors_ex (_free_ldap_result , NULL , "ldap result" , module_number );
296
366
le_result_entry = zend_register_list_destructors_ex (_free_ldap_result_entry , NULL , "ldap result entry" , module_number );
@@ -2129,6 +2199,8 @@ PHP_FUNCTION(ldap_sort)
2129
2199
PHP_FUNCTION (ldap_get_option )
2130
2200
{
2131
2201
zval * link , * retval ;
2202
+ zval tmp1 ;
2203
+ int num_entries ;
2132
2204
ldap_linkdata * ld ;
2133
2205
zend_long option ;
2134
2206
@@ -2273,9 +2345,37 @@ PHP_FUNCTION(ldap_get_option)
2273
2345
ZVAL_STRING (retval , val );
2274
2346
ldap_memfree (val );
2275
2347
} break ;
2276
- /* options not implemented
2277
2348
case LDAP_OPT_SERVER_CONTROLS :
2278
2349
case LDAP_OPT_CLIENT_CONTROLS :
2350
+ {
2351
+ LDAPControl * * ctrls = NULL , * * ctrlp ;
2352
+
2353
+ if (ldap_get_option (ld -> link , option , & ctrls ) || ctrls == NULL ) {
2354
+ if (ctrls ) {
2355
+ ldap_memfree (ctrls );
2356
+ }
2357
+ RETURN_FALSE ;
2358
+ }
2359
+
2360
+ zval_ptr_dtor (retval );
2361
+ array_init (retval );
2362
+ num_entries = 0 ;
2363
+ ctrlp = ctrls ;
2364
+ while (* ctrlp != NULL )
2365
+ {
2366
+ array_init (& tmp1 );
2367
+ add_assoc_string (& tmp1 , "oid" , (* ctrlp )-> ldctl_oid );
2368
+ add_assoc_bool (& tmp1 , "iscritical" , ((* ctrlp )-> ldctl_iscritical != 0 ));
2369
+ if ((* ctrlp )-> ldctl_value .bv_len ) {
2370
+ add_assoc_stringl (& tmp1 , "value" , (* ctrlp )-> ldctl_value .bv_val , (* ctrlp )-> ldctl_value .bv_len );
2371
+ }
2372
+ zend_hash_index_update (Z_ARRVAL_P (retval ), num_entries , & tmp1 );
2373
+ num_entries ++ ;
2374
+ ctrlp ++ ;
2375
+ }
2376
+ ldap_controls_free (ctrls );
2377
+ } break ;
2378
+ /* options not implemented
2279
2379
case LDAP_OPT_API_INFO:
2280
2380
case LDAP_OPT_API_FEATURE_INFO:
2281
2381
*/
0 commit comments