#!/bin/sh set -e . /etc/local/volumes || exit 0 XDIRREAL="$XDIR/users/root" if [ $XCHANGE ]; then if [ ! -d "$XDIR" ]; then echo "XDIR doesn't exist. Ignoring XCHANGE!" XCHANGE="" fi fi if [ $# -gt 0 ]; then USERS=$* else # TODO: scan /etc/passwd and use `getent passwd postgres | awk -F: '{print $6}' | head -1` or similar USERS=$(ls /home) fi mac=".mac" pc=".pc" xchange=".xchange" [ $NETATALK_HOME ] && mac=$NETATALK_HOME [ $SAMBA_HOME ] && pc=$SAMBA_HOME [ $XCHANGE_HOME ] && xchange=$XCHANGE_HOME for USER in $USERS; do HOME="/home/$USER" test -d $HOME || continue test -L $HOME && continue # [ $USER != "lost+found" ] || continue id -u $USER >/dev/null 2>&1 || continue # echo $UID # [ $UID gt 1000 ] || continue echo -n $USER # if [ -x /etc/local/quota.sh ]; then # /etc/local/quota.sh $USER # fi [ $QUOTASOFT ] || QUOTASOFT="0" [ $QUOTAHARD ] || QUOTAHARD="0" for QUOTAHOME in $QUOTAHOMES; do if [ $NEW_QUOTA ]; then setquota $USER $QUOTASOFT $QUOTAHARD 0 0 $QUOTAHOME else setquota $USER $QUOTAHOME $QUOTASOFT $QUOTAHARD 0 0 fi done # groupadd $USER # usermod -g $USER $USER # rm -f $HOME/.profile $HOME/.bashrc $HOME/.bash_history # cp /etc/skel/.bash_profile /etc/skel/.bashrc $HOME/ if [ $NETATALK ]; then mkdir -p $HOME/$mac fi if [ $SAMBA ]; then mkdir -p $HOME/$pc fi # if [ $XCHANGE ]; then # mkdir -p $HOME/$xchange # chown -R $USER: $HOME/$xchange # chmod -R u=rw,go=,g+r,ug+X $HOME/$xchange # fi if [ $XCHANGE ]; then [ -d $XDIRREAL/$USER ] || mkdir -p $XDIRREAL/$USER chown -R $USER:users $XDIRREAL/$USER chmod -R g=r,g+X $XDIRREAL/$USER if [ -e "x$HOME/$xchange" ]; then rm -rf $HOME/$xchange ln -dfs $XDIRREAL/$USER $HOME/$xchange fi fi if [ $PUBLIC ]; then mkdir -p $HOME/public_html fi chown $USER: $HOME chmod u=rwX,go=rX $HOME # chown -R $USER: $HOME # chmod -R u=rw,g=r,o=,ug+X $HOME # chmod o+rX $HOME if [ -f $HOME/.forward ]; then chown $USER: $HOME/.forward chmod 0640 $HOME/.forward fi mkdir -p $HOME/mail touch $HOME/mail/mbox chown -R $USER: $HOME/mail chmod -R u=rw,go=,u+X $HOME/mail if [ -f $HOME/.mailboxlist ]; then chown $USER: $HOME/.mailboxlist chmod 0640 $HOME/.mailboxlist fi if [ -f /var/spool/mail/$USER ]; then chown $USER:mail /var/spool/mail/$USER chmod ug=rw,o= /var/spool/mail/$USER fi if [ -d $HOME/$mac ]; then chown -R $USER: $HOME/$mac chmod -R u=rw,g=r,o=,ug+X $HOME/$mac rm -rf $HOME/$mac/Network\ Trash\ Folder mkdir $HOME/$mac/Network\ Trash\ Folder chown nobody: $HOME/$mac/Network\ Trash\ Folder chmod a= $HOME/$mac/Network\ Trash\ Folder fi # Access to Mac folders for macdir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_$USER$"`; do chgrp -R $USER $macdir chmod -R u=rw,g=rw,o=,ug+X,g+s $macdir done for macdir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_${USER}_ro$"`; do chown -R $USER: $macdir chmod -R u=rw,g=r,o=,ug+X $macdir done # Content cleanup of Mac folders for macdir in `find $HOME -mindepth 2 -maxdepth 2 -type d | egrep "^$HOME/mac_$USER/"`; do rm -rf $macdir/Network\ Trash\ Folder mkdir $macdir/Network\ Trash\ Folder chown nobody: $macdir/Network\ Trash\ Folder chmod a= $macdir/Network\ Trash\ Folder done if [ -d $HOME/$pc ]; then chown -R $USER: $HOME/$pc chmod -R u=rw,g=r,o=,ug+X $HOME/$pc fi # if test -d $HOME/$xchange; then # chown -R $USER:users $HOME/$xchange # chmod -R g=r,g+X $HOME/$xchange # if test "x$XCHANGEDIR" != "x"; then # rm -rf $XCHANGEDIR/$USER # ln -dfs $HOME/$xchange $XCHANGEDIR/$USER # fi # fi if [ -d $HOME/public_html ]; then chown -R $USER: $HOME/public_html chmod -R u+rX,go=r,go+X $HOME/public_html if [ $NETATALK ]; then if [ -d "$HOME/public_html/Network\ Trash\ Folder" ]; then rm -rf $HOME/public_html/Network\ Trash\ Folder mkdir $HOME/public_html/Network\ Trash\ Folder chown nobody: $HOME/public_html/Network\ Trash\ Folder chmod a= $HOME/public_html/Network\ Trash\ Folder fi fi fi ## Needs more work (not all websites are equally handled) # for dir in $(cd $HOME && find -maxdepth 1 -type d -name 'web_*' -exec sh -c 'cd {} && basename `pwd`' \;); do # chown -R $USER: $HOME/$dir # chmod -R u+rX,go=r,go+X $HOME/$dir # done echo "." done if [ $XCHANGE ]; then for USER in $(ls $XDIRREAL); do id $USER >/dev/null 2>&1 || rm -rf $XDIRREAL/$USER done fi