summaryrefslogtreecommitdiff
path: root/user-init
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2001-12-12 19:52:40 +0000
committerJonas Smedegaard <dr@jones.dk>2001-12-12 19:52:40 +0000
commitc81b7f986867db292d62a1757123723b5ef66518 (patch)
treea217cf2f481ab7b3099ef76b519a4cc8e1786096 /user-init
Initial revision
Diffstat (limited to 'user-init')
-rwxr-xr-xuser-init175
1 files changed, 175 insertions, 0 deletions
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