You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
calculate-utils-3-desktop/data/xdm

158 lines
3.4 KiB

#!/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}"
}
gtk_background(){
if [[ -n $(env | grep RUNNING_UNDER_GDM=true) ]] && ls /var/db/pkg/gnome-base/gdm-2* &>/dev/null;
then
/usr/bin/env python2 /usr/share/calculate/xdm/gtkbg
BG_PID=$(ps ax | sed -nr "s/^\s*([0-9]+)\s.*gtkbg$/\1/p")
fi
}
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
}
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 ur_domain_set`"
for script in $FILELIST
do
FILE_LOG=$FILE_LOG DOMAIN_USER=$DOMAIN_USER /bin/bash $script || die_xmes "failed on execute $script"
done
[[ -n $BG_PID ]] && kill $BG_PID
exit 0