diff --git a/Dockerfile b/Dockerfile index 5bd4d80..f4e709e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,14 +25,17 @@ RUN /sbin/enable-service dnsmasq # Use baseimage-docker's init system. CMD ["/sbin/my_init"] +# Add Mandriva MDS repository +RUN echo "deb http://mds.mandriva.org/pub/mds/debian wheezy main" >> /etc/apt/sources.list + # Resynchronize the package index files from their sources RUN apt-get -y update -# Install openldap (slapd) and ldap-utils -RUN LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends mmc-agent slapd ldap-utils +# Install openldap (slapd),ldap-utils and mmc tools +RUN LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -y --force-yes --no-install-recommends mmc-agent python-mmc-mail slapd ldap-utils -# Expose ldap default port -EXPOSE 389 +# Expose ldap and mmc-agent default ports +EXPOSE 389 7080 # Create TLS certificats directory RUN mkdir /etc/ldap/ssl @@ -40,6 +43,15 @@ RUN mkdir /etc/ldap/ssl # Add config directory RUN mkdir /etc/ldap/config ADD service/slapd/config /etc/ldap/config +ADD service/mmc-agent/assets /etc/ldap/config + +# mmc-agent config on container start +RUN mkdir -p /etc/my_init.d +ADD service/mmc-agent/install.sh /etc/my_init.d/mmc-agent.sh + +# Add mmc-agent deamon +RUN mkdir /etc/service/mmc-agent +ADD service/mmc-agent/mmc-agent.sh /etc/service/mmc-agent/run # Add slapd deamon RUN mkdir /etc/service/slapd diff --git a/service/install.sh b/service/install.sh deleted file mode 100644 index 39b1e6c..0000000 --- a/service/install.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -# copy mds ldap schema -cp /usr/share/doc/python-mmc-base/contrib/ldap/mmc.schema /etc/ldap/schema/ -cp /usr/share/doc/python-mmc-base/contrib/ldap/mail.schema /etc/ldap/schema/ - - diff --git a/service/mmc-agent/assets/append_to_mail.ini b/service/mmc-agent/assets/append_to_mail.ini new file mode 100644 index 0000000..f215055 --- /dev/null +++ b/service/mmc-agent/assets/append_to_mail.ini @@ -0,0 +1,3 @@ +[userdefault] +mailbox = /home/vmail/%uid%/ +mailuserquota = 204800 diff --git a/service/mmc-agent/assets/convert_to_ldif b/service/mmc-agent/assets/convert_to_ldif new file mode 100644 index 0000000..1eed02c --- /dev/null +++ b/service/mmc-agent/assets/convert_to_ldif @@ -0,0 +1,6 @@ +include /etc/ldap/schema/core.schema +include /etc/ldap/schema/cosine.schema +include /etc/ldap/schema/nis.schema +include /etc/ldap/schema/inetorgperson.schema +include /usr/share/doc/mmc/contrib/base/mmc.schema +include /usr/share/doc/mmc/contrib/mail/mail.schema diff --git a/service/mmc-agent/install.sh b/service/mmc-agent/install.sh new file mode 100755 index 0000000..e8288cf --- /dev/null +++ b/service/mmc-agent/install.sh @@ -0,0 +1,51 @@ +#!/bin/sh + +# -e Exit immediately if a command exits with a non-zero status +set -e + +WITH_MMC_AGENT=${WITH_MMC_AGENT} +LDAP_DOMAIN=${LDAP_DOMAIN} +LDAP_ADMIN_PWD=${LDAP_ADMIN_PWD} + +if [ "$WITH_MMC_AGENT" = true ]; then + + mkdir -p /etc/ldap/schema/converted + slaptest -f /etc/ldap/config/convert_to_ldif -F /etc/ldap/schema/converted + + sed -i -e 's/^dn:.*$/dn: cn=mmc,cn=schema,cn=config/; s/^cn:.*$/cn: mmc/; /^structuralObjectClass:.*$/d; /^entryUUID:.*$/d; /^creatorsName:.*$/d; /^createTimestamp:.*$/d; /^entryCSN:.*$/d; /^modifiersName:.*$/d; /^modifyTimestamp:.*$/d' /etc/ldap/schema/converted/cn\=config/cn\=schema/cn=\{4\}mmc.ldif + + sed -i -e 's/^dn:.*$/dn: cn=mail,cn=schema,cn=config/; s/^cn:.*$/cn: mail/; /^structuralObjectClass:.*$/d; /^entryUUID:.*$/d; /^creatorsName:.*$/d; /^createTimestamp:.*$/d; /^entryCSN:.*$/d; /^modifiersName:.*$/d; /^modifyTimestamp:.*$/d' /etc/ldap/schema/converted/cn\=config/cn\=schema/cn=\{5\}mail.ldif + + # Base config + getBaseDn () { + IFS="." + export IFS + + domain=$1 + init=1 + + for s in $domain; do + dc="dc=$s" + if [ "$init" -eq 1 ]; then + baseDn=$dc + init=0 + else + baseDn="$baseDn,$dc" + fi + done + } + + # Get base dn from ldap domain + getBaseDn ${LDAP_DOMAIN} + + sed -i -e "s/dc=mandriva, dc=com/$baseDn/" /etc/mmc/plugins/base.ini + sed -i -e "s/password = secret/password = $LDAP_ADMIN_PWD/" /etc/mmc/plugins/base.ini + + mkdir /home/archives + + # Mail plugin + sed -i -e 's/vDomainSupport = 0/vDomainSupport = 1/g' /etc/mmc/plugins/mail.ini + sed -i -e 's/vAliasesSupport = 0/vAliasesSupport = 1/g' /etc/mmc/plugins/mail.ini + cat /etc/ldap/config/append_to_mail.ini >> /etc/mmc/plugins/mail.ini + +fi diff --git a/service/mmc-agent/mmc-agent.sh b/service/mmc-agent/mmc-agent.sh new file mode 100755 index 0000000..52e4c6c --- /dev/null +++ b/service/mmc-agent/mmc-agent.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# -e Exit immediately if a command exits with a non-zero status +set -e + +WITH_MMC_AGENT=${WITH_MMC_AGENT} + +if [ "$WITH_MMC_AGENT" = true ]; then + + if [ -e /etc/ldap/config/docker_bootstrapped ]; then + exec /usr/sbin/mmc-agent -d + else + sleep 3s + fi +else + sleep 1d +fi diff --git a/service/slapd/slapd.sh b/service/slapd/slapd.sh index 7e8fb6e..c017741 100755 --- a/service/slapd/slapd.sh +++ b/service/slapd/slapd.sh @@ -49,16 +49,13 @@ if [ ! -e /etc/ldap/config/docker_bootstrapped ]; then slapd -h "ldapi:///" -u openldap -g openldap chown -R openldap:openldap /etc/ldap - # Add mds ldap schema - cp /usr/share/doc/mmc/contrib/base/mmc.schema /etc/ldap/schema/ - cp /usr/share/doc/mmc/contrib/mail/mail.schema /etc/ldap/schema/ + if [ "$WITH_MMC_AGENT" = true ]; then - echo "include /etc/ldap/schema/mmc.schema" >> convert_schemas - echo "include /etc/ldap/schema/mail.schema" >> convert_schemas + ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/converted/cn\=config/cn\=schema/cn=\{4\}mmc.ldif -Q + ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/converted/cn\=config/cn\=schema/cn=\{5\}mail.ldif -Q + + fi - slaptest -f convert_schemas - ldapadd -Y EXTERNAL -H ldapi:/// -f cn\=config/cn\=schema/cn\=\{0\}mmc.ldif - ldapadd -Y EXTERNAL -H ldapi:/// -f cn\=config/cn\=schema/cn\=\{0\}mail.ldif # TLS if [ -e /etc/ldap/ssl/ldap.crt ] && [ -e /etc/ldap/ssl/ldap.key ] && [ -e /etc/ldap/ssl/ca.crt ]; then @@ -98,4 +95,4 @@ status "starting slapd on default port 389" set -x #with debug: #exec /usr/sbin/slapd -h "ldap:///" -u openldap -g openldap -d -1 -exec /usr/sbin/slapd -h "ldap:///" -u openldap -g openldap +exec /usr/sbin/slapd -h "ldap:///" -u openldap -g openldap -d -0