Ajout : roundcube.
[lhc/ateliers.git] / local / dovecot-user-del
diff --git a/local/dovecot-user-del b/local/dovecot-user-del
new file mode 100755 (executable)
index 0000000..513f7aa
--- /dev/null
@@ -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