Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ β ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ LDAP-Π·Π°ΠΏΡΠΎΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ LDAP-ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠΌΠ΅ΡΡΠ΅ Ρ ΠΎΡΠ²Π΅ΡΠΎΠΌ ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎΠ±Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΎΡΠ²Π΅Ρ Π½Π° ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ· Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
ΠΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ LDAP-ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. Π§ΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ΡΠ²Π΅Ρ, Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΊΠΎΡΠ½Π΅Π²ΡΡ Π·Π°ΠΏΠΈΡΡ DSE ΠΏΡΡΡΠΌ ΡΡΠ΅Π½ΠΈΡ ΠΏΡΡΡΠΎΠ³ΠΎ dn-ΠΈΠΌΠ΅Π½ΠΈ Ρ ΡΠΈΠ»ΡΡΡΠΎΠΌ (objectClass=*).
ΠΡΠΈΠΌΠ΅Ρ #1 Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
<?php
// $ds β Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ²
$result = ldap_read($ds, '', '(objectClass=*)', ['supportedControl']);
if (!in_array(LDAP_CONTROL_PAGEDRESULTS, ldap_get_entries($ds, $result)[0]['supportedcontrol'])) {
die("ΠΡΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ");
}
?>
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ PHP 7.3 ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π² Π·Π°ΠΏΡΠΎΡΠ΅
ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ controls ΡΡΠ½ΠΊΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡΠ°. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π±ΠΎΡΠ°ΡΡ
Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ext-Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ,
Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΡΠ²Π΅ΡΠ°
ΠΈ ΡΠ°Π·Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ldap_parse_result()
ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΡΠ²Π΅ΡΠ°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ controls Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΡΡΠΈΠ²
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½:
false.
ΠΠΎΜΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΎΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ BER. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ BER-ΠΊΠΎΠ΄ΠΈΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ, ΠΈ ΡΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π°ΠΊΠΎΠ΄ΠΈΡΡΠ΅Ρ PHP. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ:
LDAP_CONTROL_PAGEDRESULTS
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠ΅ ΠΊΠ»ΡΡΠΈ [size] ΠΈ [cookie]
LDAP_CONTROL_ASSERT
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΠΊΠ»ΡΡ β filter
LDAP_CONTROL_VALUESRETURNFILTER
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΠΊΠ»ΡΡ β filter
LDAP_CONTROL_PRE_READ
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΠΊΠ»ΡΡ β attrs
LDAP_CONTROL_POST_READ
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΠΊΠ»ΡΡ β attrs
LDAP_CONTROL_SORTREQUEST
ΠΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Ρ ΠΊΠ»ΡΡΠ°ΠΌΠΈ: attr, [oid], [reverse].
LDAP_CONTROL_VLVREQUEST
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠ΅ ΠΊΠ»ΡΡΠΈ: before, after, attrvalue|(offset, count), [context]
ΠΠ»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ Π½ΡΠΆΠ½Ρ:
ΠΠ±ΡΠ΅ΠΊΡ LDAP_CONTROL_PROXY_AUTHZ β ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ,
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ BER,
ΡΠ°ΠΊ ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΎΠ±ΡΠΊΠ½ΠΎΠ²Π΅Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ.
Π€ΡΠ½ΠΊΡΠΈΡ ldap_parse_result() ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ², Π΅ΡΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²:
LDAP_CONTROL_PASSWORDPOLICYRESPONSE
ΠΠ»ΡΡΠΈ: expire, grace, [error]
LDAP_CONTROL_PAGEDRESULTS
ΠΠ»ΡΡΠΈ: size, cookie
LDAP_CONTROL_PRE_READ
ΠΠ»ΡΡΠΈ: dn ΠΈ ΠΈΠΌΠ΅Π½Π° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² LDAP
LDAP_CONTROL_POST_READ
ΠΠ»ΡΡΠΈ: dn ΠΈ ΠΈΠΌΠ΅Π½Π° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² LDAP
LDAP_CONTROL_SORTRESPONSE
ΠΠ»ΡΡΠΈ: errcode, [attribute]
LDAP_CONTROL_VLVRESPONSE
ΠΠ»ΡΡΠΈ: target, count, errcode, context