#!/bin/bash -e FIRST_START_DONE="/etc/docker-openldap-first-start-done" WAS_STARTED_WITH_TLS="/etc/ldap/slapd.d/docker-openldap-was-started-with-tls" # Reduce maximum number of number of open file descriptors to 1024 # otherwise slapd consumes two orders of magnitude more of RAM # see https://github.com/docker/docker/issues/8231 ulimit -n 1024 #fix file permissions chown -R openldap:openldap /var/lib/ldap chown -R openldap:openldap /etc/ldap chown -R openldap:openldap /osixia/slapd # container first start if [ ! -e "$FIRST_START_DONE" ]; then function get_base_dn() { BASE_DN="" IFS='.' read -ra BASE_DN_TABLE <<< "$LDAP_DOMAIN" for i in "${BASE_DN_TABLE[@]}"; do EXT="dc=$i," BASE_DN=$BASE_DN$EXT done BASE_DN=${BASE_DN::-1} } function is_new_schema() { local COUNT=$(ldapsearch -Q -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config cn | grep -c $1) if [ "$COUNT" -eq 0 ]; then echo 1 else echo 0 fi } function check_tls_files() { local CA_CRT=$1 local LDAP_CRT=$2 local LDAP_KEY=$3 # check certificat and key or create it /sbin/ssl-kit "/osixia/slapd/ssl/$LDAP_CRT" "/osixia/slapd/ssl/$LDAP_KEY" --ca-crt=/osixia/slapd/ssl/$CA_CRT --gnutls # create DHParamFile if not found [ -f /osixia/slapd/ssl/dhparam.pem ] || openssl dhparam -out /osixia/slapd/ssl/dhparam.pem 2048 # fix file permissions chown -R openldap:openldap /osixia/slapd } BOOTSTRAP=false # database and config directory are empty -> set bootstrap config if [ -z "$(ls -A /var/lib/ldap)" ] && [ -z "$(ls -A /etc/ldap/slapd.d)" ]; then BOOTSTRAP=true echo "database and config directory are empty" echo "-> set bootstrap config" cat <> $WAS_STARTED_WITH_TLS echo "export PREVIOUS_SSL_CRT_FILENAME=${SSL_CRT_FILENAME}" >> $WAS_STARTED_WITH_TLS echo "export PREVIOUS_SSL_KEY_FILENAME=${SSL_KEY_FILENAME}" >> $WAS_STARTED_WITH_TLS chmod +x $WAS_STARTED_WITH_TLS # add localhost route to certificate cn (need docker 1.5.0) cn=$(openssl x509 -in /osixia/slapd/ssl/$SSL_CRT_FILENAME -subject -noout | sed -n 's/.*CN=\(.*\)\/*\(.*\)/\1/p') echo "127.0.0.1 $cn" >> /etc/hosts # local ldap tls client config sed -i "s,TLS_CACERT.*,TLS_CACERT /osixia/slapd/ssl/${SSL_CA_CRT_FILENAME},g" /etc/ldap/ldap.conf else [[ -f "$WAS_STARTED_WITH_TLS" ]] && rm -f "$WAS_STARTED_WITH_TLS" ldapmodify -c -Y EXTERNAL -Q -H ldapi:/// -f /osixia/slapd/config/tls/tls-disable.ldif || true fi # replication config if [ "${USE_REPLICATION,,}" == "true" ]; then else # disable replication for f in $(find /osixia/slapd/config/replication -name \*-disable.ldif -type f); do echo "Processing file ${f}" ldapmodify -Y EXTERNAL -Q -H ldapi:/// -f $f done fi # stop OpenLDAP kill -INT `cat /run/slapd/slapd.pid` touch $FIRST_START_DONE fi exit 0