File: /volume1/@appstore/MailPlus-Server/hook/DovecotUserGroupHook.sh
#!/bin/bash
###############################################################
# This script should be hooked when invoking SYNOUserSet()
# Usable environment variable:
# NITEMS, ORIGIN_USER_NAME_{n}, USER_NAME_{n}, UID_{n},
# USER_OP_RESULT_{n}, RESULT
#
# Note: The script should bear to be invoked multiple times
###############################################################
#Include common scripts
. /var/packages/MailPlus-Server/target/scripts/MailPlusServerCommon
. /var/packages/MailPlus-Server/target/scripts/DsmVersionUtil.sh
#At begining, acquire package settings
PackageInfoGet;
MAIL_SERVER_PKG="/var/packages/MailPlus-Server"
USER_SET_PLUGIN_LOCK=/var/lock/mailplus_server/user_set_lock
USER_SET_PLUGIN_FLAG=/var/lock/mailplus_server/user_set_flag
WAITING_TIME=90
GOT_LOCK=0
case $1 in
--sdk-mod-ver)
#Print SDK support version
echo "1.0";
;;
--name)
#Print package name
echo "${MAIL_SERVER_PKG_NAME}";
;;
--pkg-ver)
#Print package version
echo "${MAIL_SERVER_PKG_VERSION}";
;;
--vendor)
#Print package vendor
echo "${MAIL_SERVER_PKG_VENDOR}";
;;
--pre)
if ! isPackageStarted; then
exit 0
fi
#LOCK is used to prevent 2 hooks execute pre action at the same time
FLOCK_FD=100
eval "exec ${FLOCK_FD}>${USER_SET_PLUGIN_LOCK}"
for i in $(seq 1 ${WAITING_TIME}); do
flock -x -n "${FLOCK_FD}"
if [ 0 -eq $? ]; then
GOT_LOCK=1
break
fi
sleep 1
done
#FLAG is used to prevent another hook executes pre action before last
#post action is done
for i in $(seq 1 ${WAITING_TIME}); do
if [ ! -e "${USER_SET_PLUGIN_FLAG}" ]; then
touch "${USER_SET_PLUGIN_FLAG}"
break
fi
sleep 1
done
[ "${GOT_LOCK}" -eq 1 ] && flock -u "${FLOCK_FD}"
;;
--post)
. /var/packages/MailPlus-Server/target/hook/ShareMailboxHook.sh
isUserHook=$2
isDeleteHook=$3
# 1:Local User Set
# 2:Local User Delete
# 3:Ldap/Domain User Set
# 4:Ldap/Domain User Delete
# 5:Local Group Set
# 6:Local Group Detele
# 7:Ldap/Domain Group Rename
# 8:Ldap/Domain Group Delete
hookType=1
[ "${isUserHook}" == "0" ] && hookType=$((hookType + 4))
[ "${isDeleteHook}" == "1" ] && hookType=$((hookType + 1))
[ -n "${SERVER_TYPE}" ] && hookType=$((hookType + 2))
UpdateShareMailbox "${hookType}"
rm -f "${USER_SET_PLUGIN_FLAG}"
;;
*)
echo "Usage: $0 --sdk-mod-ver|--name|--pkg-ver|--vendor|--pre|--post"
;;
esac