From c81b7f986867db292d62a1757123723b5ef66518 Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Wed, 12 Dec 2001 19:52:40 +0000 Subject: Initial revision --- user-init | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100755 user-init (limited to 'user-init') diff --git a/user-init b/user-init new file mode 100755 index 0000000..c2b4ad8 --- /dev/null +++ b/user-init @@ -0,0 +1,175 @@ +#!/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 -- cgit v1.2.3