ladserg n00b
Joined: 01 Nov 2004 Posts: 65
|
Posted: Wed Mar 23, 2005 9:47 am Post subject: Виртуальные пользователи в qmail+cou |
|
|
Потребовались виртуальные пользователи в qmail+courier-imap, vpopmail ставить или примотать все это к LDAP не могу по различным соображениям, начитавшись написал скрипт, автоматизирующий все это. Для тех, кому это кому это интересно привожу скрипт на bash'е:
---------- mailuser ------------------
Code: |
#!/bin/bash
#----------------------------------------------------------------
# Данные переменные необходимо изменить на свои
#----------------------------------------------------------------
# Почтовый домен(хост), в котором находится пользователь
# user_name@$MAIL_DOMAIN
MAIL_DOMAIN='tty.perm.ru'
# Установки реально существующего пользователя который будет
# использоваться для хранения почты
# (требуются только для добавления пользователя).
# Если у вас нет такого пользователя, то либо создайте его, либо
# укажите другого пользователя.
# В домашнем каталоге данного пользователя будет храниться
# почта виртуальных пользователей.
VIRTUAL_USER='virtmail'
VIRTUAL_UID='1010'
VIRTUAL_GID='100'
VIRTUAL_HOME='/home/virtmail'
#----------------------------------------------------------------
# Каталог пользователей qmail'а
#
# Если у вас qmail находится в другом каталоге, или путь каталога
# пользоватей иной, то измените данную переменную на првильный путь
#
QMAIL_USERSDIR='/var/qmail/users'
#----------------------------------------------------------------
die() {
echo $*
exit 1
}
[ ! -d $QMAIL_USERSDIR ] && die "Не найден каталог $QMAIL_USERSDIR"
[ ! -f $QMAIL_USERSDIR/assign ] && echo . > $QMAIL_USERSDIR/assign
this.passwd() {
USER_NAME=''
shift
for i in $*; do
case "$1" in
*)
[ -n "$USER_NAME" ] && \
die "Неверный синтаксис командной строки."
USER_NAME="$i"
;;
esac
done
[ -z "$USER_NAME" ] && die "Укажите имя пользователя"
[ -n "`grep "^=$USER_NAME:" $QMAIL_USERSDIR/assign`" ] || \
die "Такой пользователь не существует!"
LINE=`grep "^=$USER_NAME:" $QMAIL_USERSDIR/assign| sed "s/^=//g"`
USER_NAME=`echo $LINE | cut -d ':' -f 1`
VIRTUAL_USER=`echo $LINE | cut -d ':' -f 2`
VIRTUAL_UID=`echo $LINE | cut -d ':' -f 3`
VIRTUAL_GUID=`echo $LINE | cut -d ':' -f 4`
USER_HOME=`echo $LINE | cut -d ':' -f 5`
userdbpw -md5 | userdb $MAIL_DOMAIN/$USER_NAME \
set uid=$VIRTUAL_UID \
gid=$VIRTUAL_GUID \
home=$USER_HOME \
mail=$USER_HOME/.maildir/ systempw
makeuserdb
}
this.add() {
USER_NAME=''
shift
for i in $*; do
case "$1" in
*)
[ -n "$USER_NAME" ] && \
die "Неверный синтаксис командной строки."
USER_NAME="$i"
;;
esac
done
[ -z "$USER_NAME" ] && die "Укажите имя пользователя"
[ -n "`grep "^=$USER_NAME:" $QMAIL_USERSDIR/assign`" ] && \
die "Такой пользователь уже существует!"
su virtmail -c "mkdir $VIRTUAL_HOME/$USER_NAME"
su virtmail -c "maildirmake $VIRTUAL_HOME/$USER_NAME/.maildir/"
su virtmail -c \
"echo $VIRTUAL_HOME/$USER_NAME/.maildir/> $VIRTUAL_HOME/$USER_NAME/.qmail"
sed -i "s%^\s*\.\s*$%=$USER_NAME:$VIRTUAL_USER:$VIRTUAL_UID:$VIRTUAL_GID:$VIRTUAL_HOME/$USER_NAME/:::\n.%g" $QMAIL_USERSDIR/assign
qmail-newu
userdbpw -md5 | userdb $MAIL_DOMAIN/$USER_NAME \
set uid=$VIRTUAL_UID \
gid=$VIRTUAL_GUID \
home=$VIRTUAL_HOME/$USER_NAME \
mail=$VIRTUAL_HOME/$USER_NAME/.maildir/ systempw
makeuserdb
}
this.help () {
echo
echo " Менеджер виртуальных почтовых пользователей."
echo
echo "Способ вызова:"
echo
echo " mailuser [команда]"
echo
echo "Описание комманд:"
echo
echo " add <имя пользователя> - добавляет указанного пользователя"
echo " passwd <имя пользователя> - изменяет пароль указанного пользователя"
echo " del <имя пользователя> - удаляет указанного пользователя"
echo " --help - вызов справки"
echo
}
this.del ()
{
USER_NAME=''
shift
for i in $*; do
case "$1" in
*)
[ -n "$USER_NAME" ] && \
die "Неверный синтаксис командной строки."
USER_NAME="$i"
;;
esac
done
[ -z "$USER_NAME" ] && die "Укажите имя пользователя"
[ -n "`grep "^=$USER_NAME:" $QMAIL_USERSDIR/assign`" ] || \
die "Такой пользователь не существует!"
sed -i "/^=$USER_NAME:.*./ c\\" $QMAIL_USERSDIR/assign
qmail-newu
userdb $MAIL_DOMAIN/$USER_NAME del
makeuserdb
}
case "$1" in
--help)
this.help
exit 0
;;
-h)
this.help
exit 0
;;
passwd)
this.passwd $*
exit 0
;;
add)
this.add $*
exit 0
;;
del)
this.del $*
exit 0
;;
*)
;;
esac
|
|
|