--- /dev/null
+#!/bin/sh -efu
+
+test "$(id -n -u)" = php5_roundcube
+
+IFS=: read -r user password
+IFS=@ read -r user domain <<-EOF
+ $user
+ EOF
+test "${user:+set"}"
+test "${domain:+set"}"
+test "${password:+set"}"
+
+umask 0077
+dir_passwd=/etc/dovecot/"$domain"
+old_passwd="$dir_passwd"/passwd
+new_passwd=$(TMPDIR= /bin/mktemp --tmpdir="$dir_passwd" -t "passwd.XXXXXXXX.tmp")
+return=1
+while IFS=: read <&4 -r passwd_user passwd_password passwd_x
+ do
+ case "$passwd_user" in
+ ("$user")
+ return=0
+ /bin/cat >&3 <<-EOF
+ $user:$(/usr/bin/doveadm pw -s SHA512-CRYPT -p "$password"):$passwd_x
+ EOF
+ ;;
+ ('') : ;;
+ (*)
+ /bin/cat >&3 <<-EOF
+ $passwd_user:$passwd_password:$passwd_x
+ EOF
+ ;;
+ esac
+ done 3>"$new_passwd" 4<<-EOF
+ $(/bin/cat "$old_passwd")
+ EOF
+/bin/mv -f "$new_passwd" "$old_passwd"
+exit $return