From 0f9e777fc603f2d6924b7e79aabee6b3d4adc99a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Lebleu?= Date: Mon, 11 Apr 2016 22:03:50 +0200 Subject: [PATCH] [enh] Update slapd conf_regen hook --- data/hooks/conf_regen-old/06-slapd | 71 ------------------------- data/hooks/conf_regen/06-slapd | 84 ++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 71 deletions(-) delete mode 100644 data/hooks/conf_regen-old/06-slapd create mode 100755 data/hooks/conf_regen/06-slapd diff --git a/data/hooks/conf_regen-old/06-slapd b/data/hooks/conf_regen-old/06-slapd deleted file mode 100644 index b5353394f..000000000 --- a/data/hooks/conf_regen-old/06-slapd +++ /dev/null @@ -1,71 +0,0 @@ -set -e - -force=$1 - -function safe_copy () { - if [ ! -f /etc/yunohost/installed ]; then - sudo cp $1 $2 - else - if [[ "$force" == "True" ]]; then - sudo yunohost service safecopy \ - -s slapd $1 $2 --force - else - sudo yunohost service safecopy \ - -s slapd $1 $2 - fi - fi -} - -cd /usr/share/yunohost/templates/slapd - -# Remove legacy configuration file -[ ! -f /etc/yunohost/installed ] \ - || sudo yunohost service saferemove -s slapd \ - /etc/ldap/slapd-yuno.conf - -# Retrieve current backend -backend=$(sudo slapcat -n 0 | sed -n 's/^dn: olcDatabase={1}\(.*\),cn=config$/\1/p') - -# Save current database in case of a backend change -BACKEND_CHANGE=0 -BACKUP_DIR="/var/backups/dc=yunohost,dc=org-${backend}-$(date +%s)" -if [[ -n "$backend" && "$backend" != "mdb" && "$force" == "True" ]]; then - BACKEND_CHANGE=1 - sudo mkdir -p "$BACKUP_DIR" - sudo slapcat -b dc=yunohost,dc=org \ - -l "${BACKUP_DIR}/dc=yunohost-dc=org.ldif" -fi - -safe_copy sudo.schema /etc/ldap/schema/sudo.schema -safe_copy mailserver.schema /etc/ldap/schema/mailserver.schema -safe_copy ldap.conf /etc/ldap/ldap.conf -safe_copy slapd.default /etc/default/slapd -safe_copy slapd.conf /etc/ldap/slapd.conf - -# Fix some permissions -sudo chown root:openldap /etc/ldap/slapd.conf -sudo chown -R openldap:openldap /etc/ldap/schema/ -sudo chown -R openldap:openldap /etc/ldap/slapd.d/ - -# Check the slapd config file at first -sudo slaptest -Q -u -f /etc/ldap/slapd.conf - -if [[ $BACKEND_CHANGE -eq 1 ]]; then - # Regenerate LDAP config directory and import database as root - # since the admin user may be unavailable - sudo sh -c "rm -Rf /etc/ldap/slapd.d; -mkdir /etc/ldap/slapd.d; -slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d; -chown -R openldap:openldap /etc/ldap/slapd.d; -slapadd -F /etc/ldap/slapd.d -b dc=yunohost,dc=org \ - -l '${BACKUP_DIR}/dc=yunohost-dc=org.ldif'; -chown -R openldap:openldap /var/lib/ldap" 2>&1 -else - # Regenerate LDAP config directory from slapd.conf - sudo rm -Rf /etc/ldap/slapd.d - sudo mkdir /etc/ldap/slapd.d - sudo slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/ 2>&1 - sudo chown -R openldap:openldap /etc/ldap/slapd.d/ -fi - -sudo service slapd force-reload diff --git a/data/hooks/conf_regen/06-slapd b/data/hooks/conf_regen/06-slapd new file mode 100755 index 000000000..a2b0b08c3 --- /dev/null +++ b/data/hooks/conf_regen/06-slapd @@ -0,0 +1,84 @@ +#!/bin/bash + +set -e + +do_pre_regen() { + pending_dir=$1 + + cd /usr/share/yunohost/templates/slapd + + # remove legacy configuration file + [ ! -f /etc/ldap/slapd-yuno.conf ] \ + || touch "${pending_dir}/etc/ldap/slapd-yuno.conf" + + ldap_dir="${pending_dir}/etc/ldap" + install -D ldap.conf "${ldap_dir}/ldap.conf" + install -D slapd.conf "${ldap_dir}/slapd.conf" + + schema_dir="${ldap_dir}/schema" + install -D sudo.schema "${schema_dir}/sudo.schema" + install -D mailserver.schema "${schema_dir}/mailserver.schema" + + install -D slapd.default "${pending_dir}/etc/default/slapd" +} + +do_post_regen() { + # retrieve current backend + #backend=$(sudo slapcat -n 0 | sed -n 's/^dn: olcDatabase={1}\(.*\),cn=config$/\1/p') + backend=$(grep '^database' /etc/ldap/slapd.conf | awk '{print $2}') + + # save current database in case of a backend change + backend_change=0 + backup_dir="/var/backups/dc=yunohost,dc=org-${backend}-$(date +%s)" + if [[ -n "$backend" && "$backend" != "mdb" ]]; then + backend_change=1 + sudo mkdir -p "$backup_dir" + sudo slapcat -b dc=yunohost,dc=org \ + -l "${backup_dir}/dc=yunohost-dc=org.ldif" + fi + + # fix some permissions + sudo chown root:openldap /etc/ldap/slapd.conf + sudo chown -R openldap:openldap /etc/ldap/schema/ + sudo chown -R openldap:openldap /etc/ldap/slapd.d/ + + # check the slapd config file at first + sudo slaptest -Q -u -f /etc/ldap/slapd.conf + + if [[ $backend_change -eq 1 ]]; then + # regenerate LDAP config directory and import database as root + # since the admin user may be unavailable + sudo sh -c "rm -Rf /etc/ldap/slapd.d; + mkdir /etc/ldap/slapd.d; + slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d; + chown -R openldap:openldap /etc/ldap/slapd.d; + slapadd -F /etc/ldap/slapd.d -b dc=yunohost,dc=org \ + -l '${backup_dir}/dc=yunohost-dc=org.ldif'; + chown -R openldap:openldap /var/lib/ldap" 2>&1 + else + # regenerate LDAP config directory from slapd.conf + sudo rm -Rf /etc/ldap/slapd.d + sudo mkdir /etc/ldap/slapd.d + sudo slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/ 2>&1 + sudo chown -R openldap:openldap /etc/ldap/slapd.d/ + fi + + sudo service slapd force-reload +} + +FORCE=$2 + +case "$1" in + pre) + do_pre_regen $3 + ;; + post) + do_post_regen + ;; + *) + echo "hook called with unknown argument \`$status'" >&2 + exit 1 + ;; +esac + +exit 0