|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
source /usr/share/calculate/xdm/functions
|
|
|
|
|
|
|
|
progname=$0
|
|
|
|
|
|
|
|
SHORTOPTS="h"
|
|
|
|
LONGOPTS="login,logout,help"
|
|
|
|
|
|
|
|
|
|
|
|
PATH_LOG='/var/log/calculate'
|
|
|
|
FILE_LOG="${PATH_LOG}/cl_login-error.log"
|
|
|
|
|
|
|
|
print_help() {
|
|
|
|
cat <<'EOF'
|
|
|
|
Usage: xdm --login|--logout
|
|
|
|
|
|
|
|
Execute scripts in /usr/share/calculate/xdm/login.d or
|
|
|
|
/usr/share/calculate/xdm/logout.d .
|
|
|
|
|
|
|
|
Options:
|
|
|
|
--login Execute all scripts in /usr/share/calculate/xdm/login.d
|
|
|
|
--logout Execute all scripts in /usr/share/calculate/xdm/logout.d
|
|
|
|
-h, --help Print this help message
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
warning() {
|
|
|
|
echo "Warning: "$1 1>&2
|
|
|
|
}
|
|
|
|
|
|
|
|
writelog() {
|
|
|
|
local ERROR_MESSAGE="${1}"
|
|
|
|
if [[ ! -e $PATH_LOG && -w /var/log ]];
|
|
|
|
then
|
|
|
|
# Создадим директорию логов
|
|
|
|
mkdir $PATH_LOG
|
|
|
|
fi
|
|
|
|
# если права на файл не 755
|
|
|
|
if [[ "`stat ${PATH_LOG} | sed -n -r '/Access: \(/ {s/.*\([0-9]([^/]+).*/\1/;p}'`" != "755" && -w $PATH_LOG ]];
|
|
|
|
then
|
|
|
|
chmod 755 $PATH_LOG
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -n $ERROR_MESSAGE && -w $FILE_LOG ]];
|
|
|
|
then
|
|
|
|
# Запишем ошибку в файл
|
|
|
|
echo "$ERROR_MESSAGE" >> $FILE_LOG
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
die() {
|
|
|
|
[[ -n $BG_PID ]] && kill $BG_PID
|
|
|
|
echo "Error: "$1 1>&2
|
|
|
|
writelog "${1}"
|
|
|
|
umount_user_res
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
die_xmes() {
|
|
|
|
#xmes "${1}"
|
|
|
|
die "${1}"
|
|
|
|
}
|
|
|
|
|
|
|
|
umount_user_res(){
|
|
|
|
if [[ -n $USER && -z `who | awk '{ print $1, $2 }' | grep -P ":\d+" | awk '{ print $1}' | grep $USER` ]];
|
|
|
|
then
|
|
|
|
HOME_DIR=`getent passwd $USER | awk -F: '{ print( $6 ); }'`
|
|
|
|
PROFILE_DIR=`dirname $HOME_DIR`/.`basename $HOME_DIR`
|
|
|
|
REMOTE_PROFILE_DIR=`dirname $HOME_DIR`/.`basename $HOME_DIR`.remote
|
|
|
|
ALL_MOUNT_DIRS=`cat /proc/mounts | grep -e $HOME_DIR -e $PROFILE_DIR -e $REMOTE_PROFILE_DIR | awk '{ print $2 }'`
|
|
|
|
ALL_MOUNT_DIRS=`echo $ALL_MOUNT_DIRS | awk '{ for (i = NF; i > 0; --i) print $i }'`
|
|
|
|
for MOUNT_DIR in $ALL_MOUNT_DIRS;
|
|
|
|
do
|
|
|
|
KILL_PIDS=`fuser ${MOUNT_DIR} 2>/dev/null`
|
|
|
|
if [[ -n $KILL_PIDS ]];
|
|
|
|
then
|
|
|
|
kill -9 $KILL_PIDS
|
|
|
|
fi
|
|
|
|
umount "${MOUNT_DIR}"
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
gtk_background(){
|
|
|
|
if [[ -n $(env | grep RUNNING_UNDER_GDM=true) ]] && ls /var/db/pkg/gnome-base/gdm-2* &>/dev/null;
|
|
|
|
then
|
|
|
|
/usr/bin/env HOME=/root python2 /usr/share/calculate/xdm/setbg &
|
|
|
|
BG_PID=$(ps ax | sed -nr "s/^\s*([0-9]+)\s.*setbg$/\1/p")
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
OPTS=$(getopt -o $SHORTOPTS --long $LONGOPTS -n "$progname" -- "$@")
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "'$progname --help' for more information" 1>&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
eval set -- "$OPTS"
|
|
|
|
|
|
|
|
EXECDIR=/usr/share/calculate/xdm
|
|
|
|
|
|
|
|
if [[ -w $FILE_LOG ]]; then
|
|
|
|
# Очистим лог ошибок
|
|
|
|
echo -n "" > $FILE_LOG
|
|
|
|
fi
|
|
|
|
|
|
|
|
while [ $# -gt 0 ]; do
|
|
|
|
case $1 in
|
|
|
|
-h|--help)
|
|
|
|
print_help
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
--login)
|
|
|
|
[[ $EXECDIR == /usr/share/calculate/xdm ]] ||
|
|
|
|
die "only one of --login or --logout must be specified"
|
|
|
|
EXECDIR=${EXECDIR}/login.d
|
|
|
|
shift 1
|
|
|
|
;;
|
|
|
|
--logout)
|
|
|
|
[[ $EXECDIR == /usr/share/calculate/xdm ]] ||
|
|
|
|
die "only one of --login or --logout must be specified"
|
|
|
|
EXECDIR=${EXECDIR}/logout.d
|
|
|
|
shift 1
|
|
|
|
;;
|
|
|
|
--)
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
auto)
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
die "unrecognized option: $1"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
if [[ $EXECDIR == /usr/share/calculate/xdm ]]; then
|
|
|
|
die "must specify option"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
[[ -e ${EXECDIR} ]] || die "${EXECDIR} is not exists"
|
|
|
|
|
|
|
|
FILELIST=$(find ${EXECDIR} -type f | sort)
|
|
|
|
[[ $FILELIST ]] || warning "${EXECDIR} hasn't scripts"
|
|
|
|
|
|
|
|
gtk_background
|
|
|
|
DOMAIN_USER="`desktop_variable_value desktop.ur_domain_set`"
|
|
|
|
HOME_DIR=`getent passwd $USER | awk -F: '{ print( $6 ); }'`
|
|
|
|
for script in $FILELIST
|
|
|
|
do
|
|
|
|
FILE_LOG=$FILE_LOG HOME_DIR=$HOME_DIR USER=$USER DOMAIN_USER=$DOMAIN_USER /bin/bash $script || die_xmes "failed on execute $script"
|
|
|
|
done
|
|
|
|
|
|
|
|
sleep_kill()
|
|
|
|
{
|
|
|
|
sleep 2
|
|
|
|
kill $1
|
|
|
|
}
|
|
|
|
|
|
|
|
[[ -n $BG_PID ]] && sleep_kill $BG_PID &
|
|
|
|
exit 0
|