startup.sh 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. #!/bin/bash -e
  2. set -o pipefail
  3. # set -x (bash debug) if log level is trace
  4. # https://github.com/osixia/docker-light-baseimage/blob/stable/image/tool/log-helper
  5. log-helper level eq trace && set -x
  6. # Reduce maximum number of number of open file descriptors to 1024
  7. # otherwise slapd consumes two orders of magnitude more of RAM
  8. # see https://github.com/docker/docker/issues/8231
  9. ulimit -n 1024
  10. # create dir if they not already exists
  11. [ -d /var/lib/ldap ] || mkdir -p /var/lib/ldap
  12. [ -d /etc/ldap/slapd.d ] || mkdir -p /etc/ldap/slapd.d
  13. # fix file permissions
  14. chown -R openldap:openldap /var/lib/ldap
  15. chown -R openldap:openldap /etc/ldap
  16. chown -R openldap:openldap ${CONTAINER_SERVICE_DIR}/slapd
  17. FIRST_START_DONE="${CONTAINER_STATE_DIR}/slapd-first-start-done"
  18. WAS_STARTED_WITH_TLS="/etc/ldap/slapd.d/docker-openldap-was-started-with-tls"
  19. WAS_STARTED_WITH_TLS_ENFORCE="/etc/ldap/slapd.d/docker-openldap-was-started-with-tls-enforce"
  20. WAS_STARTED_WITH_REPLICATION="/etc/ldap/slapd.d/docker-openldap-was-started-with-replication"
  21. # CONTAINER_SERVICE_DIR and CONTAINER_STATE_DIR variables are set by
  22. # the baseimage run tool more info : https://github.com/osixia/docker-light-baseimage
  23. # container first start
  24. if [ ! -e "$FIRST_START_DONE" ]; then
  25. #
  26. # Helpers
  27. #
  28. function get_ldap_base_dn() {
  29. # if LDAP_BASE_DN is empty set value from LDAP_DOMAIN
  30. if [ -z "$LDAP_BASE_DN" ]; then
  31. IFS='.' read -ra LDAP_BASE_DN_TABLE <<< "$LDAP_DOMAIN"
  32. for i in "${LDAP_BASE_DN_TABLE[@]}"; do
  33. EXT="dc=$i,"
  34. LDAP_BASE_DN=$LDAP_BASE_DN$EXT
  35. done
  36. LDAP_BASE_DN=${LDAP_BASE_DN::-1}
  37. fi
  38. }
  39. function is_new_schema() {
  40. local COUNT=$(ldapsearch -Q -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config cn | grep -c $1)
  41. if [ "$COUNT" -eq 0 ]; then
  42. echo 1
  43. else
  44. echo 0
  45. fi
  46. }
  47. #
  48. # Global variables
  49. #
  50. BOOTSTRAP=false
  51. #
  52. # database and config directory are empty
  53. # setup bootstrap config - Part 1
  54. #
  55. if [ -z "$(ls -A -I lost+found /var/lib/ldap)" ] && [ -z "$(ls -A -I lost+found /etc/ldap/slapd.d)" ]; then
  56. BOOTSTRAP=true
  57. log-helper info "Database and config directory are empty..."
  58. log-helper info "Init new ldap server..."
  59. cat <<EOF | debconf-set-selections
  60. slapd slapd/internal/generated_adminpw password ${LDAP_ADMIN_PASSWORD}
  61. slapd slapd/internal/adminpw password ${LDAP_ADMIN_PASSWORD}
  62. slapd slapd/password2 password ${LDAP_ADMIN_PASSWORD}
  63. slapd slapd/password1 password ${LDAP_ADMIN_PASSWORD}
  64. slapd slapd/dump_database_destdir string /var/backups/slapd-VERSION
  65. slapd slapd/domain string ${LDAP_DOMAIN}
  66. slapd shared/organization string ${LDAP_ORGANISATION}
  67. slapd slapd/backend string ${LDAP_BACKEND^^}
  68. slapd slapd/purge_database boolean true
  69. slapd slapd/move_old_database boolean true
  70. slapd slapd/allow_ldap_v2 boolean false
  71. slapd slapd/no_configuration boolean false
  72. slapd slapd/dump_database select when needed
  73. EOF
  74. dpkg-reconfigure -f noninteractive slapd
  75. #
  76. # Error: the database directory (/var/lib/ldap) is empty but not the config directory (/etc/ldap/slapd.d)
  77. #
  78. elif [ -z "$(ls -A -I lost+found /var/lib/ldap)" ] && [ ! -z "$(ls -A -I lost+found /etc/ldap/slapd.d)" ]; then
  79. log-helper error "Error: the database directory (/var/lib/ldap) is empty but not the config directory (/etc/ldap/slapd.d)"
  80. exit 1
  81. #
  82. # Error: the config directory (/etc/ldap/slapd.d) is empty but not the database directory (/var/lib/ldap)
  83. #
  84. elif [ ! -z "$(ls -A -I lost+found /var/lib/ldap)" ] && [ -z "$(ls -A -I lost+found /etc/ldap/slapd.d)" ]; then
  85. log-helper error "Error: the config directory (/etc/ldap/slapd.d) is empty but not the database directory (/var/lib/ldap)"
  86. exit 1
  87. fi
  88. #
  89. # start OpenLDAP
  90. #
  91. # get previous hostname if OpenLDAP was started with replication
  92. # to avoid configuration pbs
  93. PREVIOUS_HOSTNAME_PARAM=""
  94. if [ -e "$WAS_STARTED_WITH_REPLICATION" ]; then
  95. source $WAS_STARTED_WITH_REPLICATION
  96. # if previous hostname != current hostname
  97. # set previous hostname to a loopback ip in /etc/hosts
  98. if [ "$PREVIOUS_HOSTNAME" != "$HOSTNAME" ]; then
  99. echo "127.0.0.2 $PREVIOUS_HOSTNAME" >> /etc/hosts
  100. PREVIOUS_HOSTNAME_PARAM="ldap://$PREVIOUS_HOSTNAME"
  101. fi
  102. fi
  103. # if the config was bootstraped with TLS
  104. # to avoid error (#6) (#36) and (#44)
  105. # we create fake temporary certificates if they do not exists
  106. if [ -e "$WAS_STARTED_WITH_TLS" ]; then
  107. source $WAS_STARTED_WITH_TLS
  108. log-helper debug "Check previous TLS certificates..."
  109. # fix for #73
  110. # image started with an existing database/config created before 1.1.5
  111. [[ -z "$PREVIOUS_LDAP_TLS_CA_CRT_PATH" ]] && PREVIOUS_LDAP_TLS_CA_CRT_PATH="${CONTAINER_SERVICE_DIR}/slapd/assets/certs/$LDAP_TLS_CA_CRT_FILENAME"
  112. [[ -z "$PREVIOUS_LDAP_TLS_CRT_PATH" ]] && PREVIOUS_LDAP_TLS_CRT_PATH="${CONTAINER_SERVICE_DIR}/slapd/assets/certs/$LDAP_TLS_CRT_FILENAME"
  113. [[ -z "$PREVIOUS_LDAP_TLS_KEY_PATH" ]] && PREVIOUS_LDAP_TLS_KEY_PATH="${CONTAINER_SERVICE_DIR}/slapd/assets/certs/$LDAP_TLS_KEY_FILENAME"
  114. [[ -z "$PREVIOUS_LDAP_TLS_DH_PARAM_PATH" ]] && PREVIOUS_LDAP_TLS_DH_PARAM_PATH="${CONTAINER_SERVICE_DIR}/slapd/assets/certs/dhparam.pem"
  115. ssl-helper $LDAP_SSL_HELPER_PREFIX $PREVIOUS_LDAP_TLS_CRT_PATH $PREVIOUS_LDAP_TLS_KEY_PATH $PREVIOUS_LDAP_TLS_CA_CRT_PATH
  116. [ -f ${PREVIOUS_LDAP_TLS_DH_PARAM_PATH} ] || openssl dhparam -out ${LDAP_TLS_DH_PARAM_PATH} 2048
  117. chmod 600 ${PREVIOUS_LDAP_TLS_DH_PARAM_PATH}
  118. chown openldap:openldap $PREVIOUS_LDAP_TLS_CRT_PATH $PREVIOUS_LDAP_TLS_KEY_PATH $PREVIOUS_LDAP_TLS_CA_CRT_PATH $PREVIOUS_LDAP_TLS_DH_PARAM_PATH
  119. fi
  120. # start OpenLDAP
  121. log-helper info "Start OpenLDAP..."
  122. if log-helper level eq debug; then
  123. # debug
  124. slapd -h "ldap://$HOSTNAME $PREVIOUS_HOSTNAME_PARAM ldap://localhost ldapi:///" -u openldap -g openldap -d $LDAP_LOG_LEVEL 2>&1 &
  125. else
  126. slapd -h "ldap://$HOSTNAME $PREVIOUS_HOSTNAME_PARAM ldap://localhost ldapi:///" -u openldap -g openldap
  127. fi
  128. log-helper info "Waiting for OpenLDAP to start..."
  129. while [ ! -e /run/slapd/slapd.pid ]; do sleep 0.1; done
  130. #
  131. # setup bootstrap config - Part 2
  132. #
  133. if $BOOTSTRAP; then
  134. log-helper info "Add bootstrap schemas..."
  135. # add ppolicy schema
  136. ldapadd -c -Y EXTERNAL -Q -H ldapi:/// -f /etc/ldap/schema/ppolicy.ldif 2>&1 | log-helper debug
  137. # convert schemas to ldif
  138. SCHEMAS=""
  139. for f in $(find ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/schema -name \*.schema -type f); do
  140. SCHEMAS="$SCHEMAS ${f}"
  141. done
  142. ${CONTAINER_SERVICE_DIR}/slapd/assets/schema-to-ldif.sh "$SCHEMAS"
  143. # add converted schemas
  144. for f in $(find ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/schema -name \*.ldif -type f); do
  145. log-helper debug "Processing file ${f}"
  146. # add schema if not already exists
  147. SCHEMA=$(basename "${f}" .ldif)
  148. ADD_SCHEMA=$(is_new_schema $SCHEMA)
  149. if [ "$ADD_SCHEMA" -eq 1 ]; then
  150. ldapadd -c -Y EXTERNAL -Q -H ldapi:/// -f $f 2>&1 | log-helper debug
  151. else
  152. log-helper info "schema ${f} already exists"
  153. fi
  154. done
  155. # set config password
  156. LDAP_CONFIG_PASSWORD_ENCRYPTED=$(slappasswd -s $LDAP_CONFIG_PASSWORD)
  157. sed -i "s|{{ LDAP_CONFIG_PASSWORD_ENCRYPTED }}|${LDAP_CONFIG_PASSWORD_ENCRYPTED}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/01-config-password.ldif
  158. # adapt security config file
  159. get_ldap_base_dn
  160. sed -i "s|{{ LDAP_BASE_DN }}|${LDAP_BASE_DN}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/02-security.ldif
  161. # process config files (*.ldif) in bootstrap directory (do no process files in subdirectories)
  162. log-helper info "Add bootstrap ldif..."
  163. for f in $(find ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif -mindepth 1 -maxdepth 1 -type f -name \*.ldif | sort); do
  164. log-helper debug "Processing file ${f}"
  165. sed -i "s|{{ LDAP_BASE_DN }}|${LDAP_BASE_DN}|g" $f
  166. sed -i "s|{{ LDAP_BACKEND }}|${LDAP_BACKEND}|g" $f
  167. ldapmodify -Y EXTERNAL -Q -H ldapi:/// -f $f 2>&1 | log-helper debug || ldapmodify -h localhost -p 389 -D cn=admin,$LDAP_BASE_DN -w $LDAP_ADMIN_PASSWORD -f $f 2>&1 | log-helper debug
  168. done
  169. # read only user
  170. if [ "${LDAP_READONLY_USER,,}" == "true" ]; then
  171. log-helper info "Add read only user..."
  172. LDAP_READONLY_USER_PASSWORD_ENCRYPTED=$(slappasswd -s $LDAP_READONLY_USER_PASSWORD)
  173. sed -i "s|{{ LDAP_READONLY_USER_USERNAME }}|${LDAP_READONLY_USER_USERNAME}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/readonly-user/readonly-user.ldif
  174. sed -i "s|{{ LDAP_READONLY_USER_PASSWORD_ENCRYPTED }}|${LDAP_READONLY_USER_PASSWORD_ENCRYPTED}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/readonly-user/readonly-user.ldif
  175. sed -i "s|{{ LDAP_BASE_DN }}|${LDAP_BASE_DN}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/readonly-user/readonly-user.ldif
  176. sed -i "s|{{ LDAP_READONLY_USER_USERNAME }}|${LDAP_READONLY_USER_USERNAME}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/readonly-user/readonly-user-acl.ldif
  177. sed -i "s|{{ LDAP_BASE_DN }}|${LDAP_BASE_DN}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/readonly-user/readonly-user-acl.ldif
  178. sed -i "s|{{ LDAP_BACKEND }}|${LDAP_BACKEND}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/readonly-user/readonly-user-acl.ldif
  179. log-helper debug "Processing file ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/readonly-user/readonly-user.ldif"
  180. ldapmodify -h localhost -p 389 -D cn=admin,$LDAP_BASE_DN -w $LDAP_ADMIN_PASSWORD -f ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/readonly-user/readonly-user.ldif 2>&1 | log-helper debug
  181. log-helper debug "Processing file ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/readonly-user/readonly-user-acl.ldif"
  182. ldapmodify -Y EXTERNAL -Q -H ldapi:/// -f ${CONTAINER_SERVICE_DIR}/slapd/assets/config/bootstrap/ldif/readonly-user/readonly-user-acl.ldif 2>&1 | log-helper debug
  183. fi
  184. fi
  185. #
  186. # TLS config
  187. #
  188. if [ -e "$WAS_STARTED_WITH_TLS" ] && [ "${LDAP_TLS,,}" != "true" ]; then
  189. log-helper error "/!\ WARNING: LDAP_TLS=false but the container was previously started with LDAP_TLS=true"
  190. log-helper error "TLS can't be disabled once added. Ignoring LDAP_TLS=false."
  191. LDAP_TLS=true
  192. fi
  193. if [ -e "$WAS_STARTED_WITH_TLS_ENFORCE" ] && [ "${LDAP_TLS_ENFORCE,,}" != "true" ]; then
  194. log-helper error "/!\ WARNING: LDAP_TLS_ENFORCE=false but the container was previously started with LDAP_TLS_ENFORCE=true"
  195. log-helper error "TLS enforcing can't be disabled once added. Ignoring LDAP_TLS_ENFORCE=false."
  196. LDAP_TLS_ENFORCE=true
  197. fi
  198. if [ "${LDAP_TLS,,}" == "true" ]; then
  199. log-helper info "Add TLS config..."
  200. LDAP_TLS_CA_CRT_PATH="${CONTAINER_SERVICE_DIR}/slapd/assets/certs/$LDAP_TLS_CA_CRT_FILENAME"
  201. LDAP_TLS_CRT_PATH="${CONTAINER_SERVICE_DIR}/slapd/assets/certs/$LDAP_TLS_CRT_FILENAME"
  202. LDAP_TLS_KEY_PATH="${CONTAINER_SERVICE_DIR}/slapd/assets/certs/$LDAP_TLS_KEY_FILENAME"
  203. LDAP_TLS_DH_PARAM_PATH="${CONTAINER_SERVICE_DIR}/slapd/assets/certs/dhparam.pem"
  204. # generate a certificate and key with ssl-helper tool if LDAP_CRT and LDAP_KEY files don't exists
  205. # https://github.com/osixia/docker-light-baseimage/blob/stable/image/service-available/:ssl-tools/assets/tool/ssl-helper
  206. ssl-helper $LDAP_SSL_HELPER_PREFIX $LDAP_TLS_CRT_PATH $LDAP_TLS_KEY_PATH $LDAP_TLS_CA_CRT_PATH
  207. # create DHParamFile if not found
  208. [ -f ${LDAP_TLS_DH_PARAM_PATH} ] || openssl dhparam -out ${LDAP_TLS_DH_PARAM_PATH} 2048
  209. chmod 600 ${LDAP_TLS_DH_PARAM_PATH}
  210. # fix file permissions
  211. chown -R openldap:openldap ${CONTAINER_SERVICE_DIR}/slapd
  212. # adapt tls ldif
  213. sed -i "s|{{ LDAP_TLS_CA_CRT_PATH }}|${LDAP_TLS_CA_CRT_PATH}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/tls/tls-enable.ldif
  214. sed -i "s|{{ LDAP_TLS_CRT_PATH }}|${LDAP_TLS_CRT_PATH}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/tls/tls-enable.ldif
  215. sed -i "s|{{ LDAP_TLS_KEY_PATH }}|${LDAP_TLS_KEY_PATH}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/tls/tls-enable.ldif
  216. sed -i "s|{{ LDAP_TLS_DH_PARAM_PATH }}|${LDAP_TLS_DH_PARAM_PATH}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/tls/tls-enable.ldif
  217. sed -i "s|{{ LDAP_TLS_CIPHER_SUITE }}|${LDAP_TLS_CIPHER_SUITE}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/tls/tls-enable.ldif
  218. sed -i "s|{{ LDAP_TLS_VERIFY_CLIENT }}|${LDAP_TLS_VERIFY_CLIENT}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/tls/tls-enable.ldif
  219. ldapmodify -Y EXTERNAL -Q -H ldapi:/// -f ${CONTAINER_SERVICE_DIR}/slapd/assets/config/tls/tls-enable.ldif 2>&1 | log-helper debug
  220. [[ -f "$WAS_STARTED_WITH_TLS" ]] && rm -f "$WAS_STARTED_WITH_TLS"
  221. echo "export PREVIOUS_LDAP_TLS_CA_CRT_PATH=${LDAP_TLS_CA_CRT_PATH}" > $WAS_STARTED_WITH_TLS
  222. echo "export PREVIOUS_LDAP_TLS_CRT_PATH=${LDAP_TLS_CRT_PATH}" >> $WAS_STARTED_WITH_TLS
  223. echo "export PREVIOUS_LDAP_TLS_KEY_PATH=${LDAP_TLS_KEY_PATH}" >> $WAS_STARTED_WITH_TLS
  224. echo "export PREVIOUS_LDAP_TLS_DH_PARAM_PATH=${LDAP_TLS_DH_PARAM_PATH}" >> $WAS_STARTED_WITH_TLS
  225. # ldap client config
  226. sed -i --follow-symlinks "s,TLS_CACERT.*,TLS_CACERT ${LDAP_TLS_CA_CRT_PATH},g" /etc/ldap/ldap.conf
  227. echo "TLS_REQCERT ${LDAP_TLS_VERIFY_CLIENT}" >> /etc/ldap/ldap.conf
  228. cp -f /etc/ldap/ldap.conf ${CONTAINER_SERVICE_DIR}/slapd/assets/ldap.conf
  229. [[ -f "$HOME/.ldaprc" ]] && rm -f $HOME/.ldaprc
  230. echo "TLS_CERT ${LDAP_TLS_CRT_PATH}" > $HOME/.ldaprc
  231. echo "TLS_KEY ${LDAP_TLS_KEY_PATH}" >> $HOME/.ldaprc
  232. cp -f $HOME/.ldaprc ${CONTAINER_SERVICE_DIR}/slapd/assets/.ldaprc
  233. # enforce TLS
  234. if [ "${LDAP_TLS_ENFORCE,,}" == "true" ]; then
  235. log-helper info "Add enforce TLS..."
  236. ldapmodify -Y EXTERNAL -Q -H ldapi:/// -f ${CONTAINER_SERVICE_DIR}/slapd/assets/config/tls/tls-enforce-enable.ldif 2>&1 | log-helper debug
  237. touch $WAS_STARTED_WITH_TLS_ENFORCE
  238. # disable tls enforcing (not possible for now)
  239. #else
  240. #log-helper info "Disable enforce TLS..."
  241. #ldapmodify -Y EXTERNAL -Q -H ldapi:/// -f ${CONTAINER_SERVICE_DIR}/slapd/assets/config/tls/tls-enforce-disable.ldif 2>&1 | log-helper debug || true
  242. #[[ -f "$WAS_STARTED_WITH_TLS_ENFORCE" ]] && rm -f "$WAS_STARTED_WITH_TLS_ENFORCE"
  243. fi
  244. # disable tls (not possible for now)
  245. #else
  246. #log-helper info "Disable TLS config..."
  247. #ldapmodify -c -Y EXTERNAL -Q -H ldapi:/// -f ${CONTAINER_SERVICE_DIR}/slapd/assets/config/tls/tls-disable.ldif 2>&1 | log-helper debug || true
  248. #[[ -f "$WAS_STARTED_WITH_TLS" ]] && rm -f "$WAS_STARTED_WITH_TLS"
  249. fi
  250. #
  251. # Replication config
  252. #
  253. function disableReplication() {
  254. sed -i "s|{{ LDAP_BACKEND }}|${LDAP_BACKEND}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-disable.ldif
  255. ldapmodify -c -Y EXTERNAL -Q -H ldapi:/// -f ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-disable.ldif 2>&1 | log-helper debug || true
  256. [[ -f "$WAS_STARTED_WITH_REPLICATION" ]] && rm -f "$WAS_STARTED_WITH_REPLICATION"
  257. }
  258. if [ "${LDAP_REPLICATION,,}" == "true" ]; then
  259. log-helper info "Add replication config..."
  260. disableReplication || true
  261. i=1
  262. for host in $(complex-bash-env iterate LDAP_REPLICATION_HOSTS)
  263. do
  264. sed -i "s|{{ LDAP_REPLICATION_HOSTS }}|olcServerID: $i ${!host}\n{{ LDAP_REPLICATION_HOSTS }}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif
  265. sed -i "s|{{ LDAP_REPLICATION_HOSTS_CONFIG_SYNC_REPL }}|olcSyncRepl: rid=00$i provider=${!host} ${LDAP_REPLICATION_CONFIG_SYNCPROV}\n{{ LDAP_REPLICATION_HOSTS_CONFIG_SYNC_REPL }}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif
  266. sed -i "s|{{ LDAP_REPLICATION_HOSTS_DB_SYNC_REPL }}|olcSyncRepl: rid=10$i provider=${!host} ${LDAP_REPLICATION_DB_SYNCPROV}\n{{ LDAP_REPLICATION_HOSTS_DB_SYNC_REPL }}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif
  267. ((i++))
  268. done
  269. get_ldap_base_dn
  270. sed -i "s|\$LDAP_BASE_DN|$LDAP_BASE_DN|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif
  271. sed -i "s|\$LDAP_ADMIN_PASSWORD|$LDAP_ADMIN_PASSWORD|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif
  272. sed -i "s|\$LDAP_CONFIG_PASSWORD|$LDAP_CONFIG_PASSWORD|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif
  273. sed -i "/{{ LDAP_REPLICATION_HOSTS }}/d" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif
  274. sed -i "/{{ LDAP_REPLICATION_HOSTS_CONFIG_SYNC_REPL }}/d" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif
  275. sed -i "/{{ LDAP_REPLICATION_HOSTS_DB_SYNC_REPL }}/d" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif
  276. sed -i "s|{{ LDAP_BACKEND }}|${LDAP_BACKEND}|g" ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif
  277. ldapmodify -c -Y EXTERNAL -Q -H ldapi:/// -f ${CONTAINER_SERVICE_DIR}/slapd/assets/config/replication/replication-enable.ldif 2>&1 | log-helper debug || true
  278. [[ -f "$WAS_STARTED_WITH_REPLICATION" ]] && rm -f "$WAS_STARTED_WITH_REPLICATION"
  279. echo "export PREVIOUS_HOSTNAME=${HOSTNAME}" > $WAS_STARTED_WITH_REPLICATION
  280. else
  281. log-helper info "Disable replication config..."
  282. disableReplication || true
  283. fi
  284. #
  285. # stop OpenLDAP
  286. #
  287. log-helper info "Stop OpenLDAP..."
  288. SLAPD_PID=$(cat /run/slapd/slapd.pid)
  289. kill -15 $SLAPD_PID
  290. while [ -e /proc/$SLAPD_PID ]; do sleep 0.1; done # wait until slapd is terminated
  291. #
  292. # remove config files
  293. #
  294. if [ "${LDAP_REMOVE_CONFIG_AFTER_SETUP,,}" == "true" ]; then
  295. log-helper info "Remove config files..."
  296. rm -rf ${CONTAINER_SERVICE_DIR}/slapd/assets/config
  297. fi
  298. #
  299. # setup done :)
  300. #
  301. log-helper info "First start is done..."
  302. touch $FIRST_START_DONE
  303. fi
  304. ln -sf ${CONTAINER_SERVICE_DIR}/slapd/assets/.ldaprc $HOME/.ldaprc
  305. ln -sf ${CONTAINER_SERVICE_DIR}/slapd/assets/ldap.conf /etc/ldap/ldap.conf
  306. # force OpenLDAP to listen on all interfaces
  307. ETC_HOSTS=$(cat /etc/hosts | sed "/$HOSTNAME/d")
  308. echo "0.0.0.0 $HOSTNAME" > /etc/hosts
  309. echo "$ETC_HOSTS" >> /etc/hosts
  310. exit 0