Modifications: local/boot-configure
[lhc/ateliers.git] / local / dovecot-user-del
1 #!/bin/sh -eu
2 tool=$(readlink -e "${0%/*}/..")
3 . "$tool"/local/lib.sh
4 # SYNTAX: user@domain
5 # ENVIRONMENT:
6 # purge
7 # DESCRIPTION: outil de suppression de compte dovecot
8
9 IFS=@ read -r user domain <<-EOF
10 $1
11 EOF
12 test "${user:+set}"
13 test "${domain:+set}"
14 shift
15
16 # setup_postfix
17 dir_virtual_alias=/etc/mail/dovecot
18 old_virtual_alias="$dir_virtual_alias"/virtual_alias
19 virtual_alias_entry="$user@$domain $user@dovecot.$domain"
20 virtual_alias=$(sudo cat "$old_virtual_alias" || true)
21 if grep -Fqx "$virtual_alias_entry" <<-EOF
22 $virtual_alias
23 EOF
24 then
25 new_virtual_alias=$(sudo TMPDIR= mktemp --tmpdir="$dir_virtual_alias" -t "virtual_alias.XXXXXXXX.tmp")
26 grep -Fvx "$virtual_alias_entry" <<-EOF |
27 $virtual_alias
28 EOF
29 sudo install -o root -g postfix -m 640 /dev/stdin \
30 "$new_virtual_alias"
31 sudo mv -f "$new_virtual_alias" "$old_virtual_alias"
32 sudo postmap hash:/etc/mail/dovecot/virtual_alias
33 sudo postfix reload
34 fi
35 # setup_acl
36 if test "${purge:+set}"
37 then
38 if sudo doveadm user "$user@$domain"
39 then
40 sudo doveadm mailbox list -u "$user@$domain" |
41 while IFS= read -r mailbox
42 do sudo doveadm acl get -u "$user@$domain" "$mailbox" |
43 while IFS=' ' read -r acl_id x
44 do sudo doveadm acl delete -u "$user@$domain" "$mailbox" "$acl_id"
45 done
46 done
47 fi
48 fi
49 # setup_passwd
50 dir_passwd=/etc/dovecot/"$domain"
51 old_passwd="$dir_passwd"/passwd
52 new_passwd=$(sudo TMPDIR= mktemp --tmpdir="$dir_passwd" -t "passwd.XXXXXXXX.tmp")
53 if sudo test -e "$old_passwd"
54 then
55 while IFS=: read <&4 -r \
56 passwd_user \
57 passwd_x
58 do
59 case "$passwd_user" in
60 ("$user") : ;;
61 (*)
62 cat >&3 <<-EOF
63 $passwd_user${passwd_x:+:$passwd_x}
64 EOF
65 ;;
66 esac
67 done 4<<-EOF 3>&1 >&2 |
68 $(sudo cat "$old_passwd")
69 EOF
70 sudo install -o php_roundcube -g php_roundcube -m 0640 /dev/stdin "$new_passwd"
71 sudo mv -f "$new_passwd" "$old_passwd"
72 fi
73 # setup_nss
74 domain_group=mail-"$(printf '%s' "$domain" | sed -e 's/[^0-9a-z-]/_/g')"
75 if test -z "$({ getent group "$domain_group" || printf ":::x"; } | cut -d: -f4)"
76 then
77 if test "$domain" = "$local_domainname" &&
78 getent passwd "$user"
79 then
80 sudo deluser "$user" "$domain_group"
81 sudo delgroup "$domain_group"
82 fi
83 fi
84 # setup_dirs
85 if test "${purge:+set}"
86 then
87 for dir in \
88 ~mail/data/"$domain"/"$user" \
89 /var/lib/dovecot-control/"$domain"/"$user" \
90 /var/lib/dovecot-index/"$domain"/"$user"
91 do
92 if sudo test -e "$dir"
93 then
94 sudo find "$dir" -type f -exec \
95 shred --force --iterations=1 --remove {} +
96 sudo rm -rf "$dir"
97 fi
98 done
99 fi
100 # setup_roundcube
101 if test "${purge:+set}"
102 then
103 sudo -u php_roundcube psql -1AqtX --set ON_ERROR_STOP=1 -U roundcube roundcube <<-EOF
104 DO LANGUAGE plpgsql \$\$
105 DECLARE uid integer;
106 BEGIN
107 SELECT user_id INTO uid
108 FROM users
109 WHERE username = '$user@$domain';
110 DELETE
111 FROM cache
112 WHERE user_id = uid;
113 DELETE
114 FROM contactgroupmembers
115 WHERE contactgroup_id
116 IN (SELECT contactgroup_id
117 FROM contactgroups
118 WHERE user_id = uid);
119 DELETE
120 FROM contactgroups
121 WHERE user_id = uid;
122 DELETE
123 FROM contacts
124 WHERE user_id = uid;
125 DELETE
126 FROM identities
127 WHERE user_id = uid;
128 DELETE
129 FROM users
130 WHERE user_id = uid;
131 END;
132 \$\$;
133 EOF
134 fi