#!/bin/sh set -x echo "Username -> $1" LOG="/var/log/home_linker.log" echo "" > "$LOG" trim() { local var="$*" var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters echo -n "$var" } #SET VARIABLES FOR THE ENVIRONMENT #GET VARIABLES USER=$1 HL_USER=$(trim "$USER") if [ ! -z "$2" ]; then HL_HOME="$2" else NHOME=$(python -c " tmp='$HOME'.split('/') last=tmp[-1] print '/'.join(tmp[:-1])+'/'+last.strip() ") HL_HOME="$NHOME" fi if [ ! -z "$LDM_LANGUAGE" ]; then AUX_LANG="$LDM_LANGUAGE" else AUX_LANG="$LANG" fi # From this file get $LANG { [ -r "$HL_HOME/.pam_environment" ] && . "$HL_HOME/.pam_environment" ;} || { [ -r "/etc/default/locale" ] && . "/etc/default/locale" ;} || LANG="en" # Get Usernames GRP_USER="$(id -ng $HL_USER)" # Source for user-dirs if it exists USER_DIRS="$HL_HOME/.config/user-dirs.dirs" [ ! -r $USER_DIRS ] || . $USER_DIRS # Source the token file if it exists LAST_LOGIN_DIRECTORIES="$HL_HOME/.config/user-dirs.created" [ ! -r "$LAST_LOGIN_DIRECTORIES" ] || . "$LAST_LOGIN_DIRECTORIES" #Temp file with new user-dirs [ -d "$HL_HOME" ] || { mkdir -p "$HL_HOME" ; chown $HL_USER:$GRP_USER "$HL_HOME" ;} [ -d "$HL_HOME/.config" ] || { mkdir -p "$HL_HOME/.config" ; chown $HL_USER:$GRP_USER "$HL_HOME/.config" ;} TEMP_NEW_USER_DIRS="$HL_HOME/.config/aux-user-dirs.create" :> $TEMP_NEW_USER_DIRS #set Acl on Home to be more restricted get_acl_from_server "$HL_HOME" "$GRP_USER" $HL_USER # Download directory actions DOWNLOADS_LOCALE="$(/usr/bin/xdg_translator "$AUX_LANG" "Downloads")" DESKTOP_LOCALE="$(/usr/bin/xdg_translator "$AUX_LANG" "Desktop")" DOCUMENTS_LOCALE="$(/usr/bin/xdg_translator "$AUX_LANG" "Documents")" SHARE_LOCALE="$(/usr/bin/xdg_translator "$AUX_LANG" "Share")" SHARETEACHERS_LOCALE="$(/usr/bin/xdg_translator "$AUX_LANG" "Teachers_Share")" GROUPSSHARE_LOCALE="$(/usr/bin/xdg_translator "$AUX_LANG" "Groups_Share")" [ ! -z $DESKTOP_LOCALE ] || DESKTOP_LOCALE="Desktop" [ ! -z $DOWNLOADS_LOCALE ] || DOWNLOADS_LOCALE="Downloads" [ ! -z $DOCUMENTS_LOCALE ] || DOCUMENTS_LOCALE="Documents" [ ! -z $SHARE_LOCALE ] || SHARE_LOCALE="Share" [ ! -z $SHARETEACHERS_LOCALE ] || SHARETEACHERS_LOCALE="Teachers_Share" [ ! -z $GROUPSSHARE_LOCALE ] || GROUPSSHARE_LOCALE="Groups_Share" # Umount directories mounted previously LIST_BIND_MOUNTED="$(mount | grep -E '[,(]bind[,)]' | cut -d ' ' -f3 | tr '\n' ' ')" for MOUNT_POINT in $LIST_BIND_MOUNTED; do rc=0 $(echo $MOUNT_POINT | grep -q $HL_HOME) || rc=1 if [ $rc -eq 0 ]; then umount $MOUNT_POINT || true fi done if [ "$TOKEN_DESKTOP" != "$DESKTOP_LOCALE" ]; then if [ ! -z "$TOKEN_DESKTOP" -a -e $HL_HOME/${TOKEN_DESKTOP} ]; then mv $HL_HOME/${TOKEN_DESKTOP} $HL_HOME/${DESKTOP_LOCALE} else mkdir $HL_HOME/${DESKTOP_LOCALE} || true fi fi if [ -L "$HL_HOME/${DESKTOP_LOCALE}" ]; then rm -rf "$HL_HOME/${DESKTOP_LOCALE}" mkdir $HL_HOME/${DESKTOP_LOCALE} fi chown $HL_USER:$GRP_USER $HL_HOME/${DESKTOP_LOCALE} echo "TOKEN_DESKTOP=\"$DESKTOP_LOCALE\"" >> $TEMP_NEW_USER_DIRS if [ "$TOKEN_DOCUMENTS" != "$DOCUMENTS_LOCALE" ]; then if [ ! -z "$TOKEN_DOCUMENTS" -a -e $HL_HOME/${TOKEN_DOCUMENTS} ]; then mv $HL_HOME/${TOKEN_DOCUMENTS} $HL_HOME/${DOCUMENTS_LOCALE} else mkdir $HL_HOME/${DOCUMENTS_LOCALE} || true fi fi if [ -L "$HL_HOME/${DOCUMENTS_LOCALE}" ]; then rm -rf "$HL_HOME/${DOCUMENTS_LOCALE}" mkdir $HL_HOME/${DOCUMENTS_LOCALE} fi chown $HL_USER:$GRP_USER $HL_HOME/${DOCUMENTS_LOCALE} echo "TOKEN_DOCUMENTS=\"$DOCUMENTS_LOCALE\"" >> $TEMP_NEW_USER_DIRS if [ "$TOKEN_DOWNLOADS" != "$DOWNLOADS_LOCALE" ]; then if [ ! -z "$TOKEN_DOWNLOADS" -a -e $HL_HOME/${TOKEN_DOWNLOADS} ]; then mv $HL_HOME/${TOKEN_DOWNLOADS} $HL_HOME/${DOWNLOADS_LOCALE} else mkdir $HL_HOME/${DOWNLOADS_LOCALE} || true fi fi if [ -L "$HL_HOME/${DOWNLOADS_LOCALE}" ]; then rm -rf "$HL_HOME/${DOWNLOADS_LOCALE}" mkdir $HL_HOME/${DOWNLOADS_LOCALE} fi chown $HL_USER:$GRP_USER $HL_HOME/${DOWNLOADS_LOCALE} echo "TOKEN_DOWNLOADS=\"$DOWNLOADS_LOCALE\"" >> $TEMP_NEW_USER_DIRS if [ -d "/run/$HL_USER/home" -o -d "/net/server-sync/home/" ]; then if [ "$TOKEN_SHARE" != "$SHARE_LOCALE" ]; then if [ ! -z "$TOKEN_SHARE" -a -e $HL_HOME/${TOKEN_SHARE} ]; then mv $HL_HOME/${TOKEN_SHARE} $HL_HOME/${SHARE_LOCALE} else mkdir $HL_HOME/${SHARE_LOCALE} || true fi fi if [ -L "$HL_HOME/${SHARE_LOCALE}" ]; then rm -rf "$HL_HOME/${SHARE_LOCALE}" mkdir "$HL_HOME/${SHARE_LOCALE}" fi chown $HL_USER:$GRP_USER $HL_HOME/${SHARE_LOCALE} echo "TOKEN_SHARE=\"$SHARE_LOCALE\"" >> $TEMP_NEW_USER_DIRS if [ "$GRP_USER" = "teachers" ]; then if [ "$TOKEN_SHARETEACHERS" != "$SHARETEACHERS_LOCALE" ]; then if [ ! -z "$SHARETEACHERS_TOKEN" -a -e $HL_HOME/${SHARETEACHERS_TOKEN} ]; then mv $HL_HOME/${SHARETEACHERS_TOKEN} $HL_HOME/${SHARETEACHERS_LOCALE} else mkdir $HL_HOME/${SHARETEACHERS_LOCALE} || true fi fi if [ -L "$HL_HOME/${SHARETEACHERS_LOCALE}" ]; then rm -rf "$HL_HOME/${SHARETEACHERS_LOCALE}" mkdir "$HL_HOME/${SHARETEACHERS_LOCALE}" fi chown $HL_USER:$GRP_USER $HL_HOME/${SHARETEACHERS_LOCALE} echo "TOKEN_SHARETEACHERS=\"$SHARETEACHERS_LOCALE\"" >> $TEMP_NEW_USER_DIRS fi fi if [ "$TOKEN_GROUPSSHARE" != "$GROUPSSHARE_LOCALE" ]; then if [ ! -z "$TOKEN_GROUPSSHARE" -a -e $HL_HOME/${TOKEN_GROUPSSHARE} ]; then mv $HL_HOME/${TOKEN_GROUPSSHARE} $HL_HOME/${GROUPSSHARE_LOCALE} else mkdir $HL_HOME/${GROUPSSHARE_LOCALE} || true fi fi if [ -L "$HL_HOME/${GROUPSSHARE_LOCALE}" ]; then rm -rf "$HL_HOME/${GROUPSSHARE_LOCALE}" mkdir "$HL_HOME/${GROUPSSHARE_LOCALE}" fi chown $HL_USER:$GRP_USER $HL_HOME/${GROUPSSHARE_LOCALE} echo "TOKEN_GROUPSSHARE=\"$GROUPSSHARE_LOCALE\"" >> $TEMP_NEW_USER_DIRS fix_owner_home "$HL_HOME" "$GRP_USER" "$HL_USER" if [ -d "/net/server-sync/home/$GRP_USER/$HL_USER/" ]; then # other machines in aula echo "OTHER MACHINES IN AULA" >> "$LOG" [ "${DESKTOP_LOCALE}" = "" ] || mount --bind /net/server-sync/home/$GRP_USER/$HL_USER/Desktop $HL_HOME/${DESKTOP_LOCALE} || true [ "${DOCUMENTS_LOCALE}" = "" ] || mount --bind /net/server-sync/home/$GRP_USER/$HL_USER/Documents $HL_HOME/${DOCUMENTS_LOCALE} || true [ "${SHARE_LOCALE}" = "" ] || mount --bind /net/server-sync/share $HL_HOME/${SHARE_LOCALE} || true if [ "$GRP_USER" = "teachers" ]; then [ "${DESKTOP_LOCALE}" = "" ] || mount --bind /net/server-sync/teachers_share $HL_HOME/${SHARETEACHERS_LOCALE} || true [ -d $HL_HOME/alum ] || mkdir $HL_HOME/alum mount --bind /net/server-sync/home/students/ $HL_HOME/alum || true fi [ "${GROUPSSHARE_LOCALE}" = "" ] || mount --bind /net/server-sync/groups_share $HL_HOME/${GROUPSSHARE_LOCALE} || true elif [ -d "/var/run/$HL_USER/home" ]; then #Fat clients echo "FATCLIENTS IN AULA" >> "$LOG" [ "${DESKTOP_LOCALE}" = "" ] || mount --bind /run/$HL_USER/home/$GRP_USER/$HL_USER/Desktop $HL_HOME/${DESKTOP_LOCALE} || true [ "${DOCUMENTS_LOCALE}" = "" ] || mount --bind /run/$HL_USER/home/$GRP_USER/$HL_USER/Documents $HLHOME/${DOCUMENTS_LOCALE} || true [ "${SHARE_LOCALE}" = "" ] || mount --bind /run/$HL_USER/share $HL_HOME/${SHARE_LOCALE} || true if [ "$GRP_USER" = "teachers" ]; then [ "${SHARETEACHERS_LOCALE}" = "" ] || mount --bind /run/$HL_USER/teachers_share $HL_HOME/${SHARETEACHERS_LOCALE} || true [ -d $HL_HOME/alum ] || mkdir $HL_HOME/alum mount --bind /run/$HL_USER/home/students $HL_HOME/alum || true fi [ "${GROUPSSHARE_LOCALE}" = "" ] || mount --bind /run/$HL_USER/groups_share $HL_HOME/${GROUPSSHARE_LOCALE} || true fi mv ${TEMP_NEW_USER_DIRS} ${LAST_LOGIN_DIRECTORIES} cat > $USER_DIRS << EOF # This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit the line you're # interested in. All local changes will be retained on the next run # Format is XDG_xxx_DIR="$HL_HOME/yyy", where yyy is a shell-escaped # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an # absolute path. No other format is supported. # XDG_DESKTOP_DIR="\$HOME/$DESKTOP_LOCALE" XDG_DOWNLOAD_DIR="\$HOME/$DOWNLOADS_LOCALE" XDG_DOCUMENTS_DIR="\$HOME/$DOCUMENTS_LOCALE" EOF chmod 600 "$USER_DIRS" chown $HL_USER:$GRP_USER "$USER_DIRS" date >> "$LOG" echo "" >> "$LOG" echo "Las variables a tener en cuenta son:" >> "$LOG" echo " \$HL_USER -> $HL_USER" >> "$LOG" echo " \$HL_HOME -> $HL_HOME" >> "$LOG" echo " \$HOME -> $HOME" >> "$LOG" echo " \$DESKTOP_LOCALE -> $DESKTOP_LOCALE" >> "$LOG" echo "" >> "$LOG" echo "El idioma es $AUX_LANG" >> "$LOG" echo "" >> "$LOG" echo "AFTER HOME LINKER" >> "$LOG" tree $HL_HOME >> "$LOG" echo "" >> "$LOG" cat $HL_HOME/.config/user-dirs.created >> "$LOG" echo "" >> "$LOG" cat $HL_HOME/.config/user-dirs.dirs >> "$LOG" echo "" >> "$LOG" echo "END /usr/sbin/home-linker" >> "$LOG" exit 0