entrypoint.sh 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. base_string="BASE ${dc_string:1}"
  38. sed -i "s/^#BASE.*/${base_string}/g" /etc/ldap/ldap.conf
  39. if [[ -n "$SLAPD_CONFIG_PASSWORD" ]]; then
  40. password_hash=`slappasswd -s "${SLAPD_CONFIG_PASSWORD}"`
  41. sed_safe_password_hash=${password_hash//\//\\\/}
  42. slapcat -n0 -F /etc/ldap/slapd.d -l /tmp/config.ldif
  43. sed -i "s/\(olcRootDN: cn=admin,cn=config\)/\1\nolcRootPW: ${sed_safe_password_hash}/g" /tmp/config.ldif
  44. rm -rf /etc/ldap/slapd.d/*
  45. slapadd -n0 -F /etc/ldap/slapd.d -l /tmp/config.ldif >/dev/null 2>&1
  46. fi
  47. if [[ -n "$SLAPD_ADDITIONAL_SCHEMAS" ]]; then
  48. IFS=","; declare -a schemas=($SLAPD_ADDITIONAL_SCHEMAS); unset IFS
  49. for schema in "${schemas[@]}"; do
  50. slapadd -n0 -F /etc/ldap/slapd.d -l "/etc/ldap/schema/${schema}.ldif" >/dev/null 2>&1
  51. done
  52. fi
  53. if [[ -n "$SLAPD_ADDITIONAL_MODULES" ]]; then
  54. IFS=","; declare -a modules=($SLAPD_ADDITIONAL_MODULES); unset IFS
  55. for module in "${modules[@]}"; do
  56. echo "Adding module ${module}"
  57. slapadd -n0 -F /etc/ldap/slapd.d -l "/etc/ldap/modules/${module}.ldif" >/dev/null 2>&1
  58. done
  59. fi
  60. # This needs to run in background
  61. # Will prepopulate entries after ldap daemon has started
  62. ./prepopulate.sh &
  63. chown -R openldap:openldap /etc/ldap/slapd.d/ /var/lib/ldap/ /var/run/slapd/
  64. else
  65. slapd_configs_in_env=`env | grep 'SLAPD_'`
  66. if [ -n "${slapd_configs_in_env:+x}" ]; then
  67. echo "Info: Container already configured, therefore ignoring SLAPD_xxx environment variables"
  68. fi
  69. fi
  70. exec "$@"