X-Git-Url: https://git.cyclocoop.org/?p=lhc%2Fateliers.git;a=blobdiff_plain;f=local%2Fdovecot-user-del;fp=local%2Fdovecot-user-del;h=513f7aa23ec5a563b3f469e75b31d67228532bc7;hp=0000000000000000000000000000000000000000;hb=b75d4503ef9c919231c0c02daf5a1ed1e57c73af;hpb=4c57b350e0265cfadb9bbf95cd55ae491ee66820 diff --git a/local/dovecot-user-del b/local/dovecot-user-del new file mode 100755 index 0000000..513f7aa --- /dev/null +++ b/local/dovecot-user-del @@ -0,0 +1,134 @@ +#!/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