entrypoint.sh 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/bin/bash
  2. # When not limiting the open file descritors limit, the memory consumption of
  3. # slapd is absurdly high. See https://github.com/docker/docker/issues/8231
  4. ulimit -n 8192
  5. set -e
  6. chown -R openldap:openldap /var/lib/ldap/
  7. if [[ ! -d /etc/ldap/slapd.d ]]; then
  8. if [[ -z "$SLAPD_PASSWORD" ]]; then
  9. echo -n >&2 "Error: Container not configured and SLAPD_PASSWORD not set. "
  10. echo >&2 "Did you forget to add -e SLAPD_PASSWORD=... ?"
  11. exit 1
  12. fi
  13. if [[ -z "$SLAPD_DOMAIN" ]]; then
  14. echo -n >&2 "Error: Container not configured and SLAPD_DOMAIN not set. "
  15. echo >&2 "Did you forget to add -e SLAPD_DOMAIN=... ?"
  16. exit 1
  17. fi
  18. SLAPD_ORGANIZATION="${SLAPD_ORGANIZATION:-${SLAPD_DOMAIN}}"
  19. cp -a /etc/ldap.dist/* /etc/ldap
  20. cat <<-EOF | debconf-set-selections
  21. slapd slapd/no_configuration boolean false
  22. slapd slapd/password1 password $SLAPD_PASSWORD
  23. slapd slapd/password2 password $SLAPD_PASSWORD
  24. slapd shared/organization string $SLAPD_ORGANIZATION
  25. slapd slapd/domain string $SLAPD_DOMAIN
  26. slapd slapd/backend select HDB
  27. slapd slapd/allow_ldap_v2 boolean false
  28. slapd slapd/purge_database boolean false
  29. slapd slapd/move_old_database boolean true
  30. EOF
  31. dpkg-reconfigure -f noninteractive slapd >/dev/null 2>&1
  32. dc_string=""
  33. IFS="."; declare -a dc_parts=($SLAPD_DOMAIN)
  34. for dc_part in "${dc_parts[@]}"; do
  35. dc_string="$dc_string,dc=$dc_part"
  36. done
  37. if [[ -n "$SLAPD_CONFIG_PASSWORD" ]]; then
  38. password_hash=`slappasswd -s "${SLAPD_CONFIG_PASSWORD}"`
  39. sed_safe_password_hash=${password_hash//\//\\\/}
  40. slapcat -n0 -F /etc/ldap/slapd.d -l /tmp/config.ldif
  41. sed -i "s/\(olcRootDN: cn=admin,cn=config\)/\1\nolcRootPW: ${sed_safe_password_hash}/g" /tmp/config.ldif
  42. rm -rf /etc/ldap/slapd.d/*
  43. slapadd -n0 -F /etc/ldap/slapd.d -l /tmp/config.ldif >/dev/null 2>&1
  44. fi
  45. if [[ -n "$SLAPD_ADDITIONAL_SCHEMAS" ]]; then
  46. IFS=","; declare -a schemas=($SLAPD_ADDITIONAL_SCHEMAS); unset IFS
  47. for schema in "${schemas[@]}"; do
  48. slapadd -n0 -F /etc/ldap/slapd.d -l "/etc/ldap/schema/${schema}.ldif" >/dev/null 2>&1
  49. done
  50. fi
  51. if [[ -n "$SLAPD_ADDITIONAL_MODULES" ]]; then
  52. IFS=","; declare -a modules=($SLAPD_ADDITIONAL_MODULES); unset IFS
  53. for module in "${modules[@]}"; do
  54. echo "Adding module ${module}"
  55. slapadd -n0 -F /etc/ldap/slapd.d -l "/etc/ldap/modules/${module}.ldif" >/dev/null 2>&1
  56. done
  57. fi
  58. # This needs to run in background
  59. # Will prepopulate entries after ldap daemon has started
  60. ./prepopulate.sh &
  61. chown -R openldap:openldap /etc/ldap/slapd.d/ /var/lib/ldap/ /var/run/slapd/
  62. else
  63. slapd_configs_in_env=`env | grep 'SLAPD_'`
  64. if [ -n "${slapd_configs_in_env:+x}" ]; then
  65. echo "Info: Container already configured, therefore ignoring SLAPD_xxx environment variables"
  66. fi
  67. fi
  68. exec "$@"