#!/bin/bash # this script runs INSIDE the container #!/bin/bash #set -e # Exit on any error echo "--> Starting ldapdock 0.9" echo "--> Launching slapd (temp)..." # Start slapd temporarily for setup /usr/sbin/slapd -h "ldap:/// ldapi:///" -g openldap -u openldap & sleep 3 # Populate with user & group echo "--> Populating directory with marisa..." cat > /tmp/add_content.ldif << 'EOF' dn: ou=People,dc=example,dc=com objectClass: organizationalUnit ou: People dn: ou=Groups,dc=example,dc=com objectClass: organizationalUnit ou: Groups dn: cn=mages,ou=Groups,dc=example,dc=com objectClass: posixGroup cn: mages gidNumber: 5000 memberUid: marisa dn: uid=marisa,ou=People,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: marisa sn: Kirisame givenName: Marisa cn: Marisa Kirisame displayName: Marisa Kirisame uidNumber: 10000 gidNumber: 5000 userPassword: {CRYPT}x gecos: Marisa Kirisame loginShell: /bin/bash homeDirectory: /home/marisa EOF ldapadd -x -D "cn=admin,dc=example,dc=com" -w admin -f /tmp/add_content.ldif ldappasswd -x -D "cn=admin,dc=example,dc=com" -w admin -s qwerty "uid=marisa,ou=People,dc=example,dc=com" # Kill temp slapd pkill slapd sleep 2 # === CERTIFICATES: ONLY IF NOT ALREADY EXPORTED === if [ ! -f "/export-certs/mycacert.crt" ]; then echo "--> No CA found in /export-certs → generating certificates..." mkdir -p /etc/ldap/certs cd /etc/ldap/certs # CA certtool --generate-privkey --bits 4096 --outfile ca-key.pem cat > ca.info < ldap01.info < ldap01_slapd_cert_full.pem chown root:openldap ldap01_slapd_cert_full.pem chmod 640 ldap01_slapd_cert_full.pem # Start temp slapd to apply config slapd -h "ldap:/// ldapi:///" -u openldap -g openldap & sleep 3 # Apply TLS config cat > /tmp/certinfo.ldif < Exporting CA to /export-certs..." cp /etc/ldap/certs/ca-cert.pem /export-certs/mycacert.crt cp /etc/ldap/certs/ldap01_slapd_cert_full.pem /export-certs/server-cert.pem echo "--> CA ready at ./hosts-certs/mycacert.crt on host" else echo "--> CA already exists at /export-certs/mycacert.crt → skipping generation" fi # === FINAL SLAPD START === echo "--> Starting final slapd with LDAPS..." slapd -h "ldap:/// ldaps:/// ldapi:///" -u openldap -g openldap -d 0 & sleep 3 # === ENABLE TLS FOR ALL CLIENT TOOLS INSIDE CONTAINER === export LDAPTLS_CACERT=/etc/ldap/certs/ca-cert.pem echo "LDAPTLS_CACERT=$LDAPTLS_CACERT (all ldap* commands now work with TLS)" echo "--> ldapdock framework ready." # === KEEP CONTAINER ALIVE === # 'exec' replaces the script process with the command (e.g., /bin/bash), # ensuring the container stays alive as long as that command runs interactively. echo "Executing: $@" exec "$@"