2 tool
=$
(readlink
-e "${0%/*}/..")
14 # DESCRIPTION: outil de création de compte dovecot
16 IFS
=@
read -r user domain
<<-EOF
20 test "${domain:+set"}"
24 domain_group
=mail-
"$(sed -e 's/[^0-9a-z-]/_/g' <<-EOF
28 "$tool"/local
/addgroup
"$domain_group" --system
35 /var
/lib
/dovecot-control \
36 /var
/lib
/dovecot-index
38 # NOTE: postfix est configuré pour transporter "dovecot.$domain" via le LMTP de dovecot.
39 # mais du coup le domaine récupéré par dovecot comporte le préfixe "dovecot."
40 sudo
install -d -o mail -g "$domain_group" -m 1770 \
41 "$dir"/dovecot.
"$domain"
46 sudo
chmod -t ~mail
/acl
/dovecot.
"$domain"
47 # NOTE: permet les mv shared.db{.lock,} effectués par dovecot
49 sudo
install -d -o mail -g php_roundcube
-m 1770 \
50 /etc
/dovecot
/dovecot.
"$domain"
51 sudo
install -d -o mail -g postfix
-m 750 \
54 dir_virtual_alias
=/etc
/mail
/dovecot
55 old_virtual_alias
="$dir_virtual_alias"/virtual_alias
56 virtual_alias_entry
="$user@$domain $user@dovecot.$domain"
57 virtual_alias
=$
(sudo
cat "$old_virtual_alias")
58 if ! grep -Fqx "$virtual_alias_entry" <<-EOF
62 new_virtual_alias
=$
(sudo TMPDIR
= mktemp
--tmpdir="$dir_virtual_alias" -t "virtual_alias.XXXXXXXX.tmp")
64 $virtual_alias_entry${virtual_alias:+$(printf '\n%s' "$virtual_alias")}
66 sudo
install -o root
-g postfix
-m 640 /dev
/stdin \
68 sudo
mv -f "$new_virtual_alias" "$old_virtual_alias"
69 sudo postmap
hash:/etc
/mail
/dovecot
/virtual_alias
73 dir_passwd
=/etc
/dovecot
/"$domain"
74 old_passwd
="$dir_passwd"/passwd
75 new_passwd
=$
(sudo TMPDIR
= mktemp
--tmpdir="$dir_passwd" -t "passwd.XXXXXXXX.tmp")
77 while IFS
=: read <&4 -r \
87 case "$passwd_user" in
90 has_done_user
=continue
91 if test "${password:+set}"
93 password
=$
(/usr
/bin
/doveadm pw
-s SHA512-CRYPT
-p "$password")
95 if test "${password+defined}" -o -z "${passwd_password-}"
97 IFS
= read -r password
<<-EOF
98 $(/usr/bin/doveadm pw -s SHA512-CRYPT)
101 password
=$passwd_password
104 home
=${home:-~mail/data/"$domain/$user"}
105 uid
=${uid:-$passwd_uid}
106 gid
=${gid:-$passwd_gid}
107 if test "$domain" = "$local_domainname" &&
108 getent passwd
"$user"
110 uid
=${uid:-$(id -u "$user")}
111 gid
=${gid:-$(id -g "$user")}
112 sudo adduser
"$user" "$domain_group"
114 if sudo
test -e "$home"
116 uid
=${uid:-$(sudo stat -c '%u' "$home")}
117 gid
=${gid:-$(sudo stat -c '%g' "$home")}
119 sudo
touch /etc
/dovecot
/passwd
120 if test ! "${uid:+set}"
121 then uid
=$first_valid_uid; while sudo
find /etc
/dovecot
/ \
122 -mindepth 1 -maxdepth 2 -type f
-name passwd
-exec \
123 grep -q -x "^[^:]*:[^:]*:$uid:.*" {} +
127 if test ! "${gid:+set}"
128 then gid
=$first_valid_gid; while sudo
find /etc
/dovecot
/ \
129 -mindepth 1 -maxdepth 2 -type f
-name passwd
-exec \
130 grep -q -x "^[^:]*:[^:]*:[^:]*:$gid:.*" {} +
135 gecos
=${gecos:-${passwd_gecos:-}}
136 shell
=${shell:-${passwd_shell:-/bin/false}}
137 while IFS
='=' read -r name value
141 ("userdb_mail_access_groups") mail_access_groups
=${mail_access_groups-$value};;
144 (*) extra_fields
="${extra_fields:+$extra_fields }$name=$value";;
152 extra_fields
="${extra_fields:+$extra_fields }userdb_uid=$uid"
153 extra_fields
="${extra_fields:+$extra_fields }userdb_gid=$gid"
154 extra_fields
="${extra_fields:+$extra_fields }userdb_home=$home"
155 extra_fields
="${extra_fields:+$extra_fields }userdb_mail_access_groups=${mail_access_groups-$domain_group,amavis}"
157 $user:$password:$uid:$gid:$gecos:$home:$shell:$extra_fields
160 welcome_mail
=$
(sudo
test -e "$home" ||
echo send
)
161 sudo
install -d -o "$uid" -g "$gid" -m 2770 \
164 sudo
install -d -o "$uid" -g "$gid" -m 0700 \
167 sudo
install -o "$uid" -g "$gid" -m 0600 \
168 "$tool"/etc
/dovecot
/sieve
/user.sieve \
169 "$home"/sieve.d
/main.sieve
170 sudo
touch "$home"/sieve.d
/roundcube.sieve
171 if sudo
test ! -e "$home"/sieve
172 then sudo
ln -s sieve.d
/main.sieve
"$home"/sieve
177 if test "${welcome_mail:+set}"
180 -S from
=postmaster@
"$local_domainname" \
181 -s "Bienvenue $user@$domain" \
182 "$user"@
"$domain" <<-EOF
183 Bienvenue $user@$domain,
185 pour tout support technique : postmaster@$domain .
188 Le support technique de $domain.
194 $passwd_user:$passwd_password:$passwd_uid:$passwd_gid:$passwd_gecos:$passwd_home:$passwd_shell:$passwd_extra_fields
198 done 4<<-EOF 3>&1 >&2 |
199 $(sudo test ! -e "$old_passwd" || sudo cat "$old_passwd")
204 sudo
install -o php_roundcube
-g php_roundcube
-m 0640 /dev
/stdin
"$new_passwd"
205 sudo
mv -f "$new_passwd" "$old_passwd"