mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
[enh] Update slapd conf_regen hook
This commit is contained in:
parent
9585e37340
commit
0f9e777fc6
2 changed files with 84 additions and 71 deletions
|
@ -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
|
84
data/hooks/conf_regen/06-slapd
Executable file
84
data/hooks/conf_regen/06-slapd
Executable file
|
@ -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
|
Loading…
Add table
Reference in a new issue