From 61e6ba55368f552b0cdbdbdba46d5caffd0aa0e0 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Thu, 9 Jul 2026 12:19:52 +0200 Subject: [PATCH] fix(ldap): extract config set to standalone script - allow to set up ldap in both ways: - during bootstrap.sh - after instance setup, by calling enable-ldap.sh Assisted-by: ClaudeCode:claude-opus-4-8 Signed-off-by: Maksim Sukharev --- docker/Dockerfile.php.template | 2 +- docker/Dockerfile.php71 | 2 +- docker/Dockerfile.php72 | 2 +- docker/Dockerfile.php73 | 2 +- docker/Dockerfile.php74 | 2 +- docker/Dockerfile.php80 | 2 +- docker/Dockerfile.php81 | 2 +- docker/bin/bootstrap.sh | 29 +---------------------- docker/bin/configure-ldap.sh | 43 ++++++++++++++++++++++++++++++++++ docker/php82/Dockerfile | 2 +- docker/php83/Dockerfile | 2 +- docker/php84/Dockerfile | 2 +- docker/php85/Dockerfile | 2 +- scripts/enable-ldap.sh | 20 ++++++++++++++++ 14 files changed, 75 insertions(+), 39 deletions(-) create mode 100644 docker/bin/configure-ldap.sh create mode 100644 scripts/enable-ldap.sh diff --git a/docker/Dockerfile.php.template b/docker/Dockerfile.php.template index 3f1427d1..ebe22ccb 100644 --- a/docker/Dockerfile.php.template +++ b/docker/Dockerfile.php.template @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/docker/Dockerfile.php71 b/docker/Dockerfile.php71 index cc1bcbe8..c4f7f912 100644 --- a/docker/Dockerfile.php71 +++ b/docker/Dockerfile.php71 @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/docker/Dockerfile.php72 b/docker/Dockerfile.php72 index ab9093ea..a93a331d 100644 --- a/docker/Dockerfile.php72 +++ b/docker/Dockerfile.php72 @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/docker/Dockerfile.php73 b/docker/Dockerfile.php73 index e66de4ff..873530e1 100644 --- a/docker/Dockerfile.php73 +++ b/docker/Dockerfile.php73 @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/docker/Dockerfile.php74 b/docker/Dockerfile.php74 index fb84ad2e..dd88ddd8 100644 --- a/docker/Dockerfile.php74 +++ b/docker/Dockerfile.php74 @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/docker/Dockerfile.php80 b/docker/Dockerfile.php80 index 42778f20..d09b4bf9 100644 --- a/docker/Dockerfile.php80 +++ b/docker/Dockerfile.php80 @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/docker/Dockerfile.php81 b/docker/Dockerfile.php81 index 4e175c22..2e456acd 100644 --- a/docker/Dockerfile.php81 +++ b/docker/Dockerfile.php81 @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/docker/bin/bootstrap.sh b/docker/bin/bootstrap.sh index 58744b24..95be6b77 100755 --- a/docker/bin/bootstrap.sh +++ b/docker/bin/bootstrap.sh @@ -226,34 +226,7 @@ configure_ldap() { return 0 fi - timeout 5 bash -c 'until echo > /dev/tcp/ldap/389; do sleep 0.5; done' 2>/dev/null - if [ $? -eq 0 ]; then - output "LDAP server available" - export LDAP_USER_FILTER="(|(objectclass=inetOrgPerson))" - - OCC app:enable user_ldap - OCC ldap:create-empty-config - OCC ldap:set-config s01 ldapAgentName "cn=admin,dc=planetexpress,dc=com" - OCC ldap:set-config s01 ldapAgentPassword "admin" - OCC ldap:set-config s01 ldapAttributesForUserSearch "sn;givenname" - OCC ldap:set-config s01 ldapBase "dc=planetexpress,dc=com" - OCC ldap:set-config s01 ldapEmailAttribute "mail" - OCC ldap:set-config s01 ldapExpertUsernameAttr "uid" - OCC ldap:set-config s01 ldapGroupDisplayName "description" - OCC ldap:set-config s01 ldapGroupFilter '(|(objectclass=groupOfNames))' - OCC ldap:set-config s01 ldapGroupFilterObjectclass 'groupOfNames' - OCC ldap:set-config s01 ldapGroupMemberAssocAttr 'member' - OCC ldap:set-config s01 ldapHost 'ldap' - OCC ldap:set-config s01 ldapLoginFilter "(&$LDAP_USER_FILTER(uid=%uid))" - OCC ldap:set-config s01 ldapLoginFilterMode '1' - OCC ldap:set-config s01 ldapLoginFilterUsername '1' - OCC ldap:set-config s01 ldapPort '389' - OCC ldap:set-config s01 ldapTLS '0' - OCC ldap:set-config s01 ldapUserDisplayName 'cn' - OCC ldap:set-config s01 ldapUserFilter "$LDAP_USER_FILTER" - OCC ldap:set-config s01 ldapUserFilterMode "1" - OCC ldap:set-config s01 ldapConfigurationActive "1" - fi + configure-ldap.sh } configure_oidc() { diff --git a/docker/bin/configure-ldap.sh b/docker/bin/configure-ldap.sh new file mode 100644 index 00000000..02360df4 --- /dev/null +++ b/docker/bin/configure-ldap.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Configure the user_ldap app against the bundled `ldap` service. +# +# Reused in two places: +# - docker/bin/bootstrap.sh, during the install/bootstrap phase +# - on demand against a running container: +# docker compose exec configure-ldap.sh +# +# Relies on the in-container `occ` wrapper (/usr/local/bin/occ) and the +# WEBROOT env var, both provided by the image. + +# Wait for the ldap server to accept connections before configuring. +timeout 5 bash -c 'until echo > /dev/tcp/ldap/389; do sleep 0.5; done' 2>/dev/null +if [ $? -ne 0 ]; then + echo "LDAP server (ldap:389) not available; skipping LDAP configuration" + exit 0 +fi + +echo "LDAP server available" +LDAP_USER_FILTER="(|(objectclass=inetOrgPerson))" + +occ app:enable user_ldap +occ ldap:create-empty-config +occ ldap:set-config s01 ldapAgentName "cn=admin,dc=planetexpress,dc=com" +occ ldap:set-config s01 ldapAgentPassword "admin" +occ ldap:set-config s01 ldapAttributesForUserSearch "sn;givenname" +occ ldap:set-config s01 ldapBase "dc=planetexpress,dc=com" +occ ldap:set-config s01 ldapEmailAttribute "mail" +occ ldap:set-config s01 ldapExpertUsernameAttr "uid" +occ ldap:set-config s01 ldapGroupDisplayName "description" +occ ldap:set-config s01 ldapGroupFilter '(|(objectclass=groupOfNames))' +occ ldap:set-config s01 ldapGroupFilterObjectclass 'groupOfNames' +occ ldap:set-config s01 ldapGroupMemberAssocAttr 'member' +occ ldap:set-config s01 ldapHost 'ldap' +occ ldap:set-config s01 ldapLoginFilter "(&$LDAP_USER_FILTER(uid=%uid))" +occ ldap:set-config s01 ldapLoginFilterMode '1' +occ ldap:set-config s01 ldapLoginFilterUsername '1' +occ ldap:set-config s01 ldapPort '389' +occ ldap:set-config s01 ldapTLS '0' +occ ldap:set-config s01 ldapUserDisplayName 'cn' +occ ldap:set-config s01 ldapUserFilter "$LDAP_USER_FILTER" +occ ldap:set-config s01 ldapUserFilterMode "1" +occ ldap:set-config s01 ldapConfigurationActive "1" diff --git a/docker/php82/Dockerfile b/docker/php82/Dockerfile index 3f1427d1..ebe22ccb 100644 --- a/docker/php82/Dockerfile +++ b/docker/php82/Dockerfile @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/docker/php83/Dockerfile b/docker/php83/Dockerfile index 1392def5..d71a4231 100644 --- a/docker/php83/Dockerfile +++ b/docker/php83/Dockerfile @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/docker/php84/Dockerfile b/docker/php84/Dockerfile index eba99363..7303b937 100644 --- a/docker/php84/Dockerfile +++ b/docker/php84/Dockerfile @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/docker/php85/Dockerfile b/docker/php85/Dockerfile index 4c3c9f15..66aa6c67 100644 --- a/docker/php85/Dockerfile +++ b/docker/php85/Dockerfile @@ -105,4 +105,4 @@ CMD ["apache2-foreground"] ADD data/installing.html /root/installing.html ADD configs/autoconfig_mysql.php configs/autoconfig_pgsql.php configs/autoconfig_oci.php configs/default.config.php configs/redis.config.php configs/apcu.config.php /root/ -ADD bin/bootstrap.sh bin/occ /usr/local/bin/ +ADD bin/bootstrap.sh bin/occ bin/configure-ldap.sh /usr/local/bin/ diff --git a/scripts/enable-ldap.sh b/scripts/enable-ldap.sh new file mode 100644 index 00000000..8e7e397d --- /dev/null +++ b/scripts/enable-ldap.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +set -e +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd) +# shellcheck source=example.env +source "${SCRIPT_DIR}/../.env" +# shellcheck source=scripts/functions.sh +source "${SCRIPT_DIR}/functions.sh" + +if [ -z "$1" ] + then + echo "Usage $0 CONTAINER" + exit 1 +fi + +CONTAINER=$1 + +echo "Configuring LDAP on $CONTAINER" +docker_compose up -d ldap ldapadmin +docker_compose exec "$CONTAINER" configure-ldap.sh