--- /dev/null
+#!/bin/sh -eu
+tool=$(readlink -e "${0%/*}/..")
+. "$tool"/local/lib.sh
+# SYNTAX: user@domain
+# ENVIRONMENT:
+# purge
+# DESCRIPTION: outil de suppression de compte dovecot
+
+IFS=@ read -r user domain <<-EOF
+ $1
+ EOF
+test "${user:+set"}"
+test "${domain:+set"}"
+shift
+
+# setup_postfix
+ dir_virtual_alias=/etc/mail/dovecot
+ old_virtual_alias="$dir_virtual_alias"/virtual_alias
+ virtual_alias_entry="$user@$domain $user@dovecot.$domain"
+ virtual_alias=$(sudo cat "$old_virtual_alias" || true)
+ if grep -Fqx "$virtual_alias_entry" <<-EOF
+ $virtual_alias
+ EOF
+ then
+ new_virtual_alias=$(sudo TMPDIR= mktemp --tmpdir="$dir_virtual_alias" -t "virtual_alias.XXXXXXXX.tmp")
+ grep -Fvx "$virtual_alias_entry" <<-EOF |
+ $virtual_alias
+ EOF
+ sudo install -o root -g postfix -m 640 /dev/stdin \
+ "$new_virtual_alias"
+ sudo mv -f "$new_virtual_alias" "$old_virtual_alias"
+ sudo postmap hash:/etc/mail/dovecot/virtual_alias
+ sudo postfix reload
+ fi
+# setup_acl
+ if test "${purge:+set}"
+ then
+ if sudo doveadm user "$user@$domain"
+ then
+ sudo doveadm mailbox list -u "$user@$domain" |
+ while IFS= read -r mailbox
+ do sudo doveadm acl get -u "$user@$domain" "$mailbox" |
+ while IFS=' ' read -r acl_id x
+ do sudo doveadm acl delete -u "$user@$domain" "$mailbox" "$acl_id"
+ done
+ done
+ fi
+ fi
+# setup_passwd
+ dir_passwd=/etc/dovecot/"$domain"
+ old_passwd="$dir_passwd"/passwd
+ new_passwd=$(sudo TMPDIR= mktemp --tmpdir="$dir_passwd" -t "passwd.XXXXXXXX.tmp")
+ if sudo test -e "$old_passwd"
+ then
+ while IFS=: read <&4 -r \
+ passwd_user \
+ passwd_x
+ do
+ case "$passwd_user" in
+ ("$user") : ;;
+ (*)
+ cat >&3 <<-EOF
+ $passwd_user${passwd_x:+:$passwd_x}
+ EOF
+ ;;
+ esac
+ done 4<<-EOF 3>&1 >&2 |
+ $(sudo cat "$old_passwd")
+ EOF
+ sudo install -o php5_roundcube -g php5_roundcube -m 0640 /dev/stdin "$new_passwd"
+ sudo mv -f "$new_passwd" "$old_passwd"
+ fi
+# setup_nss
+ domain_group=mail-"$(printf '%s' "$domain" | sed -e 's/[^0-9a-z-]/_/g')"
+ if test -z "$({ getent group "$domain_group" || printf ":::x"; } | cut -d: -f4)"
+ then
+ if test "$domain" = "$local_domainname" &&
+ getent passwd "$user"
+ then
+ sudo deluser "$user" "$domain_group"
+ fi
+ sudo delgroup "$domain_group"
+ fi
+# setup_dirs
+ if test "${purge:+set}"
+ then
+ for dir in \
+ ~mail/data/"$domain"/"$user" \
+ /var/lib/dovecot-control/"$domain"/"$user" \
+ /var/lib/dovecot-index/"$domain"/"$user"
+ do
+ if sudo test -e "$dir"
+ then
+ sudo find "$dir" -type f -exec \
+ shred --force --iterations=1 --remove {} +
+ sudo rm -rf "$dir"
+ fi
+ done
+ fi
+# setup_roundcube
+ if test "${purge:+set}"
+ then
+ sudo -u php5_roundcube psql -1AqtX --set ON_ERROR_STOP=1 -U roundcube roundcube <<-EOF
+ DO LANGUAGE plpgsql \$\$
+ DECLARE uid integer;
+ BEGIN
+ SELECT user_id INTO uid
+ FROM users
+ WHERE username = '$user@$domain';
+ DELETE
+ FROM cache
+ WHERE user_id = uid;
+ DELETE
+ FROM contactgroupmembers
+ WHERE contactgroup_id
+ IN (SELECT contactgroup_id
+ FROM contactgroups
+ WHERE user_id = uid);
+ DELETE
+ FROM contactgroups
+ WHERE user_id = uid;
+ DELETE
+ FROM contacts
+ WHERE user_id = uid;
+ DELETE
+ FROM identities
+ WHERE user_id = uid;
+ DELETE
+ FROM users
+ WHERE user_id = uid;
+ END;
+ \$\$;
+ EOF
+ fi