mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Merge branch 'PHP-7.4'
* PHP-7.4: enable ext/ldap/tests on azure fix some ext/ldap/tests
This commit is contained in:
commit
bc68f10b76
7 changed files with 207 additions and 8 deletions
|
@ -7,6 +7,9 @@ steps:
|
||||||
sudo apt install bison \
|
sudo apt install bison \
|
||||||
re2c \
|
re2c \
|
||||||
locales \
|
locales \
|
||||||
|
ldap-utils \
|
||||||
|
openssl \
|
||||||
|
slapd \
|
||||||
language-pack-de \
|
language-pack-de \
|
||||||
re2c \
|
re2c \
|
||||||
libgmp-dev \
|
libgmp-dev \
|
||||||
|
@ -29,7 +32,6 @@ steps:
|
||||||
libpq-dev \
|
libpq-dev \
|
||||||
libreadline-dev \
|
libreadline-dev \
|
||||||
libldap2-dev \
|
libldap2-dev \
|
||||||
libsasl2-dev \
|
|
||||||
libsodium-dev \
|
libsodium-dev \
|
||||||
libargon2-0-dev \
|
libargon2-0-dev \
|
||||||
postgresql \
|
postgresql \
|
||||||
|
|
169
azure/setup-slapd.sh
Executable file
169
azure/setup-slapd.sh
Executable file
|
@ -0,0 +1,169 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -ev
|
||||||
|
|
||||||
|
# Create TLS certificate
|
||||||
|
sudo mkdir -p /etc/ldap/ssl
|
||||||
|
|
||||||
|
alt_names() {
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(hostname && hostname -a && hostname -A && hostname -f) |
|
||||||
|
xargs -n 1 |
|
||||||
|
sort -u |
|
||||||
|
sed -e 's/\(\S\+\)/DNS:\1/g'
|
||||||
|
) && (
|
||||||
|
(hostname -i && hostname -I && echo "127.0.0.1 ::1") |
|
||||||
|
xargs -n 1 |
|
||||||
|
sort -u |
|
||||||
|
sed -e 's/\(\S\+\)/IP:\1/g'
|
||||||
|
)
|
||||||
|
) | paste -d, -s
|
||||||
|
}
|
||||||
|
|
||||||
|
sudo openssl req -newkey rsa:4096 -x509 -nodes -days 3650 \
|
||||||
|
-out /etc/ldap/ssl/server.crt -keyout /etc/ldap/ssl/server.key \
|
||||||
|
-subj "/C=US/ST=Arizona/L=Localhost/O=localhost/CN=localhost" \
|
||||||
|
-addext "subjectAltName = `alt_names`"
|
||||||
|
|
||||||
|
sudo chown -R openldap:openldap /etc/ldap/ssl
|
||||||
|
|
||||||
|
# Display the TLS certificate (should be world readable)
|
||||||
|
openssl x509 -noout -text -in /etc/ldap/ssl/server.crt
|
||||||
|
|
||||||
|
# Point to the certificate generated
|
||||||
|
if ! grep -q 'TLS_CACERT \/etc\/ldap\/ssl\/server.crt' /etc/ldap/ldap.conf; then
|
||||||
|
sudo sed -e 's|^\s*TLS_CACERT|# TLS_CACERT|' -i /etc/ldap/ldap.conf
|
||||||
|
echo 'TLS_CACERT /etc/ldap/ssl/server.crt' | sudo tee -a /etc/ldap/ldap.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Configure LDAP protocols to serve.
|
||||||
|
sudo sed -e 's|^\s*SLAPD_SERVICES\s*=.*$|SLAPD_SERVICES="ldap:/// ldaps:/// ldapi:///"|' -i /etc/default/slapd
|
||||||
|
|
||||||
|
# Configure LDAP database.
|
||||||
|
DBDN=`sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(&(olcRootDN=*)(olcSuffix=*))' dn | grep -i '^dn:' | sed -e 's/^dn:\s*//'`;
|
||||||
|
|
||||||
|
sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/ppolicy.ldif
|
||||||
|
|
||||||
|
sudo service slapd restart
|
||||||
|
|
||||||
|
sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// << EOF
|
||||||
|
dn: $DBDN
|
||||||
|
changetype: modify
|
||||||
|
replace: olcSuffix
|
||||||
|
olcSuffix: dc=my-domain,dc=com
|
||||||
|
-
|
||||||
|
replace: olcRootDN
|
||||||
|
olcRootDN: cn=Manager,dc=my-domain,dc=com
|
||||||
|
-
|
||||||
|
replace: olcRootPW
|
||||||
|
olcRootPW: secret
|
||||||
|
|
||||||
|
dn: cn=config
|
||||||
|
changetype: modify
|
||||||
|
add: olcTLSCACertificateFile
|
||||||
|
olcTLSCACertificateFile: /etc/ldap/ssl/server.crt
|
||||||
|
-
|
||||||
|
add: olcTLSCertificateFile
|
||||||
|
olcTLSCertificateFile: /etc/ldap/ssl/server.crt
|
||||||
|
-
|
||||||
|
add: olcTLSCertificateKeyFile
|
||||||
|
olcTLSCertificateKeyFile: /etc/ldap/ssl/server.key
|
||||||
|
-
|
||||||
|
add: olcTLSVerifyClient
|
||||||
|
olcTLSVerifyClient: never
|
||||||
|
-
|
||||||
|
add: olcAuthzRegexp
|
||||||
|
olcAuthzRegexp: uid=usera,cn=digest-md5,cn=auth cn=usera,dc=my-domain,dc=com
|
||||||
|
-
|
||||||
|
replace: olcLogLevel
|
||||||
|
olcLogLevel: -1
|
||||||
|
|
||||||
|
dn: cn=module{0},cn=config
|
||||||
|
changetype: modify
|
||||||
|
add: olcModuleLoad
|
||||||
|
olcModuleLoad: sssvlv
|
||||||
|
-
|
||||||
|
add: olcModuleLoad
|
||||||
|
olcModuleLoad: ppolicy
|
||||||
|
-
|
||||||
|
add: olcModuleLoad
|
||||||
|
olcModuleLoad: dds
|
||||||
|
EOF
|
||||||
|
|
||||||
|
sudo service slapd restart
|
||||||
|
|
||||||
|
sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// << EOF
|
||||||
|
dn: olcOverlay=sssvlv,$DBDN
|
||||||
|
objectClass: olcOverlayConfig
|
||||||
|
objectClass: olcSssVlvConfig
|
||||||
|
olcOverlay: sssvlv
|
||||||
|
olcSssVlvMax: 10
|
||||||
|
olcSssVlvMaxKeys: 5
|
||||||
|
|
||||||
|
dn: olcOverlay=ppolicy,$DBDN
|
||||||
|
objectClass: olcOverlayConfig
|
||||||
|
objectClass: olcPPolicyConfig
|
||||||
|
olcOverlay: ppolicy
|
||||||
|
### This would clutter our DIT and make tests to fail, while ppolicy does not
|
||||||
|
### seem to work as we expect (it does not seem to provide expected controls)
|
||||||
|
## olcPPolicyDefault: cn=default,ou=pwpolicies,dc=my-domain,dc=com
|
||||||
|
## olcPPolicyHashCleartext: FALSE
|
||||||
|
## olcPPolicyUseLockout: TRUE
|
||||||
|
|
||||||
|
dn: olcOverlay=dds,$DBDN
|
||||||
|
objectClass: olcOverlayConfig
|
||||||
|
objectClass: olcDdsConfig
|
||||||
|
olcOverlay: dds
|
||||||
|
EOF
|
||||||
|
|
||||||
|
sudo service slapd restart
|
||||||
|
|
||||||
|
sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// << EOF
|
||||||
|
dn: $DBDN
|
||||||
|
changetype: modify
|
||||||
|
add: olcDbIndex
|
||||||
|
olcDbIndex: entryExpireTimestamp eq
|
||||||
|
EOF
|
||||||
|
|
||||||
|
sudo service slapd restart
|
||||||
|
|
||||||
|
ldapadd -H ldapi:/// -D cn=Manager,dc=my-domain,dc=com -w secret <<EOF
|
||||||
|
dn: dc=my-domain,dc=com
|
||||||
|
objectClass: top
|
||||||
|
objectClass: organization
|
||||||
|
objectClass: dcObject
|
||||||
|
dc: my-domain
|
||||||
|
o: php ldap tests
|
||||||
|
|
||||||
|
### This would clutter our DIT and make tests to fail, while ppolicy does not
|
||||||
|
### seem to work as we expect (it does not seem to provide expected controls)
|
||||||
|
## dn: ou=pwpolicies,dc=my-domain,dc=com
|
||||||
|
## objectClass: top
|
||||||
|
## objectClass: organizationalUnit
|
||||||
|
## ou: pwpolicies
|
||||||
|
##
|
||||||
|
## dn: cn=default,ou=pwpolicies,dc=my-domain,dc=com
|
||||||
|
## objectClass: top
|
||||||
|
## objectClass: person
|
||||||
|
## objectClass: pwdPolicy
|
||||||
|
## cn: default
|
||||||
|
## sn: default
|
||||||
|
## pwdAttribute: userPassword
|
||||||
|
## pwdMaxAge: 2592000
|
||||||
|
## pwdExpireWarning: 3600
|
||||||
|
## #pwdInHistory: 0
|
||||||
|
## pwdCheckQuality: 0
|
||||||
|
## pwdMaxFailure: 5
|
||||||
|
## pwdLockout: TRUE
|
||||||
|
## #pwdLockoutDuration: 0
|
||||||
|
## #pwdGraceAuthNLimit: 0
|
||||||
|
## #pwdFailureCountInterval: 0
|
||||||
|
## pwdMustChange: FALSE
|
||||||
|
## pwdMinLength: 3
|
||||||
|
## pwdAllowUserChange: TRUE
|
||||||
|
## pwdSafeModify: FALSE
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Verify TLS connection
|
||||||
|
|
||||||
|
ldapsearch -d 255 -H ldaps://localhost -D cn=Manager,dc=my-domain,dc=com -w secret -s base -b dc=my-domain,dc=com 'objectclass=*'
|
|
@ -3,7 +3,11 @@ steps:
|
||||||
set -e
|
set -e
|
||||||
sudo service mysql start
|
sudo service mysql start
|
||||||
sudo service postgresql start
|
sudo service postgresql start
|
||||||
|
sudo service slapd start
|
||||||
mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS test"
|
mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS test"
|
||||||
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
|
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
|
||||||
sudo -u postgres psql -c "CREATE DATABASE test;"
|
sudo -u postgres psql -c "CREATE DATABASE test;"
|
||||||
displayName: 'Setup'
|
displayName: 'Setup'
|
||||||
|
- script: ./azure/setup-slapd.sh
|
||||||
|
displayName: 'Configure slapd'
|
||||||
|
|
||||||
|
|
1
ext/ldap/tests/CONFLICTS
Normal file
1
ext/ldap/tests/CONFLICTS
Normal file
|
@ -0,0 +1 @@
|
||||||
|
ldap
|
|
@ -9,8 +9,9 @@ $host = getenv("LDAP_TEST_HOST") ?: "localhost";
|
||||||
$port = getenv("LDAP_TEST_PORT") ?: 389;
|
$port = getenv("LDAP_TEST_PORT") ?: 389;
|
||||||
$base = getenv("LDAP_TEST_BASE") ?: "dc=my-domain,dc=com";
|
$base = getenv("LDAP_TEST_BASE") ?: "dc=my-domain,dc=com";
|
||||||
$user = getenv("LDAP_TEST_USER") ?: "cn=Manager,$base";
|
$user = getenv("LDAP_TEST_USER") ?: "cn=Manager,$base";
|
||||||
$sasl_user = getenv("LDAP_TEST_SASL_USER") ?: "Manager";
|
|
||||||
$passwd = getenv("LDAP_TEST_PASSWD") ?: "secret";
|
$passwd = getenv("LDAP_TEST_PASSWD") ?: "secret";
|
||||||
|
$sasl_user = getenv("LDAP_TEST_SASL_USER") ?: "userA";
|
||||||
|
$sasl_passwd = getenv("LDAP_TEST_SASL_PASSWD") ?: "oops";
|
||||||
$protocol_version = getenv("LDAP_TEST_OPT_PROTOCOL_VERSION") ?: 3;
|
$protocol_version = getenv("LDAP_TEST_OPT_PROTOCOL_VERSION") ?: 3;
|
||||||
$skip_on_bind_failure = getenv("LDAP_TEST_SKIP_BIND_FAILURE") ?: true;
|
$skip_on_bind_failure = getenv("LDAP_TEST_SKIP_BIND_FAILURE") ?: true;
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,20 @@ Patrick Allaert <patrickallaert@php.net>
|
||||||
<?php
|
<?php
|
||||||
require "connect.inc";
|
require "connect.inc";
|
||||||
|
|
||||||
|
$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
|
||||||
|
insert_dummy_data($link, $base);
|
||||||
|
ldap_unbind($link);
|
||||||
|
|
||||||
$link = ldap_connect($host, $port);
|
$link = ldap_connect($host, $port);
|
||||||
ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, $protocol_version);
|
ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, $protocol_version);
|
||||||
var_dump(ldap_sasl_bind($link, null, $passwd, 'DIGEST-MD5', 'realm', $sasl_user));
|
var_dump(ldap_sasl_bind($link, null, $sasl_passwd, 'DIGEST-MD5', 'realm', $sasl_user));
|
||||||
|
?>
|
||||||
|
--CLEAN--
|
||||||
|
<?php
|
||||||
|
include "connect.inc";
|
||||||
|
|
||||||
|
$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
|
||||||
|
remove_dummy_data($link, $base);
|
||||||
?>
|
?>
|
||||||
--EXPECT--
|
--EXPECT--
|
||||||
bool(true)
|
bool(true)
|
||||||
|
|
|
@ -11,22 +11,33 @@ Patrick Allaert <patrickallaert@php.net>
|
||||||
<?php
|
<?php
|
||||||
require "connect.inc";
|
require "connect.inc";
|
||||||
|
|
||||||
|
$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
|
||||||
|
insert_dummy_data($link, $base);
|
||||||
|
ldap_unbind($link);
|
||||||
|
|
||||||
$link = ldap_connect($host, $port);
|
$link = ldap_connect($host, $port);
|
||||||
ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, $protocol_version);
|
ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, $protocol_version);
|
||||||
|
|
||||||
// Invalid DN
|
// Invalid DN
|
||||||
var_dump(ldap_sasl_bind($link, "Invalid DN", $passwd, 'DIGEST-MD5', 'realm', $sasl_user));
|
var_dump(ldap_sasl_bind($link, "Invalid DN", $sasl_passwd, 'DIGEST-MD5', 'realm', $sasl_user));
|
||||||
|
|
||||||
// Invalid user
|
// Invalid user
|
||||||
var_dump(ldap_sasl_bind($link, null, "ThisIsNotCorrect$passwd", 'DIGEST-MD5', "realm", "invalid$sasl_user"));
|
var_dump(ldap_sasl_bind($link, null, "ThisIsNotCorrect$sasl_passwd", 'DIGEST-MD5', "realm", "invalid$sasl_user"));
|
||||||
|
|
||||||
// Invalid password
|
// Invalid password
|
||||||
var_dump(ldap_sasl_bind($link, null, "ThisIsNotCorrect$passwd", 'DIGEST-MD5', "realm", $sasl_user));
|
var_dump(ldap_sasl_bind($link, null, "ThisIsNotCorrect$sasl_passwd", 'DIGEST-MD5', "realm", $sasl_user));
|
||||||
|
|
||||||
var_dump(ldap_sasl_bind($link, null, $passwd, 'DIGEST-MD5', "realm", "Manager", "test"));
|
var_dump(ldap_sasl_bind($link, null, $sasl_passwd, 'DIGEST-MD5', "realm", "Manager", "test"));
|
||||||
|
|
||||||
// Invalid DN syntax
|
// Invalid DN syntax
|
||||||
var_dump(ldap_sasl_bind($link, "unexistingProperty=weirdValue,$user", $passwd));
|
var_dump(ldap_sasl_bind($link, "unexistingProperty=weirdValue,$user", $sasl_passwd));
|
||||||
|
?>
|
||||||
|
--CLEAN--
|
||||||
|
<?php
|
||||||
|
include "connect.inc";
|
||||||
|
|
||||||
|
$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
|
||||||
|
remove_dummy_data($link, $base);
|
||||||
?>
|
?>
|
||||||
--EXPECTF--
|
--EXPECTF--
|
||||||
Warning: ldap_sasl_bind(): Unable to bind to server: Invalid DN syntax in %s on line %d
|
Warning: ldap_sasl_bind(): Unable to bind to server: Invalid DN syntax in %s on line %d
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue