#!/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 php_roundcube -g php_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" sudo delgroup "$domain_group" fi 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 php_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