summaryrefslogtreecommitdiff
path: root/user-init
blob: c2b4ad838e0a338e02b93e27d49e3aae5c81730b (plain)
  1. #!/bin/sh
  2. set -e
  3. . /etc/local/volumes || exit 0
  4. XDIRREAL="$XDIR/users/root"
  5. if [ $XCHANGE ]; then
  6. if [ ! -d "$XDIR" ]; then
  7. echo "XDIR doesn't exist. Ignoring XCHANGE!"
  8. XCHANGE=""
  9. fi
  10. fi
  11. if [ $# -gt 0 ]; then
  12. USERS=$*
  13. else
  14. # TODO: scan /etc/passwd and use `getent passwd postgres | awk -F: '{print $6}' | head -1` or similar
  15. USERS=$(ls /home)
  16. fi
  17. mac=".mac"
  18. pc=".pc"
  19. xchange=".xchange"
  20. [ $NETATALK_HOME ] && mac=$NETATALK_HOME
  21. [ $SAMBA_HOME ] && pc=$SAMBA_HOME
  22. [ $XCHANGE_HOME ] && xchange=$XCHANGE_HOME
  23. for USER in $USERS; do
  24. HOME="/home/$USER"
  25. test -d $HOME || continue
  26. test -L $HOME && continue
  27. # [ $USER != "lost+found" ] || continue
  28. id -u $USER >/dev/null 2>&1 || continue
  29. # echo $UID
  30. # [ $UID gt 1000 ] || continue
  31. echo -n $USER
  32. # if [ -x /etc/local/quota.sh ]; then
  33. # /etc/local/quota.sh $USER
  34. # fi
  35. [ $QUOTASOFT ] || QUOTASOFT="0"
  36. [ $QUOTAHARD ] || QUOTAHARD="0"
  37. for QUOTAHOME in $QUOTAHOMES; do
  38. if [ $NEW_QUOTA ]; then
  39. setquota $USER $QUOTASOFT $QUOTAHARD 0 0 $QUOTAHOME
  40. else
  41. setquota $USER $QUOTAHOME $QUOTASOFT $QUOTAHARD 0 0
  42. fi
  43. done
  44. # groupadd $USER
  45. # usermod -g $USER $USER
  46. # rm -f $HOME/.profile $HOME/.bashrc $HOME/.bash_history
  47. # cp /etc/skel/.bash_profile /etc/skel/.bashrc $HOME/
  48. if [ $NETATALK ]; then
  49. mkdir -p $HOME/$mac
  50. fi
  51. if [ $SAMBA ]; then
  52. mkdir -p $HOME/$pc
  53. fi
  54. # if [ $XCHANGE ]; then
  55. # mkdir -p $HOME/$xchange
  56. # chown -R $USER: $HOME/$xchange
  57. # chmod -R u=rw,go=,g+r,ug+X $HOME/$xchange
  58. # fi
  59. if [ $XCHANGE ]; then
  60. [ -d $XDIRREAL/$USER ] || mkdir -p $XDIRREAL/$USER
  61. chown -R $USER:users $XDIRREAL/$USER
  62. chmod -R g=r,g+X $XDIRREAL/$USER
  63. if [ -e "x$HOME/$xchange" ]; then
  64. rm -rf $HOME/$xchange
  65. ln -dfs $XDIRREAL/$USER $HOME/$xchange
  66. fi
  67. fi
  68. if [ $PUBLIC ]; then
  69. mkdir -p $HOME/public_html
  70. fi
  71. chown $USER: $HOME
  72. chmod u=rwX,go=rX $HOME
  73. # chown -R $USER: $HOME
  74. # chmod -R u=rw,g=r,o=,ug+X $HOME
  75. # chmod o+rX $HOME
  76. if [ -f $HOME/.forward ]; then
  77. chown $USER: $HOME/.forward
  78. chmod 0640 $HOME/.forward
  79. fi
  80. mkdir -p $HOME/mail
  81. touch $HOME/mail/mbox
  82. chown -R $USER: $HOME/mail
  83. chmod -R u=rw,go=,u+X $HOME/mail
  84. if [ -f $HOME/.mailboxlist ]; then
  85. chown $USER: $HOME/.mailboxlist
  86. chmod 0640 $HOME/.mailboxlist
  87. fi
  88. if [ -f /var/spool/mail/$USER ]; then
  89. chown $USER:mail /var/spool/mail/$USER
  90. chmod ug=rw,o= /var/spool/mail/$USER
  91. fi
  92. if [ -d $HOME/$mac ]; then
  93. chown -R $USER: $HOME/$mac
  94. chmod -R u=rw,g=r,o=,ug+X $HOME/$mac
  95. rm -rf $HOME/$mac/Network\ Trash\ Folder
  96. mkdir $HOME/$mac/Network\ Trash\ Folder
  97. chown nobody: $HOME/$mac/Network\ Trash\ Folder
  98. chmod a= $HOME/$mac/Network\ Trash\ Folder
  99. fi
  100. # Access to Mac folders
  101. for macdir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_$USER$"`; do
  102. chgrp -R $USER $macdir
  103. chmod -R u=rw,g=rw,o=,ug+X,g+s $macdir
  104. done
  105. for macdir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_${USER}_ro$"`; do
  106. chown -R $USER: $macdir
  107. chmod -R u=rw,g=r,o=,ug+X $macdir
  108. done
  109. # Content cleanup of Mac folders
  110. for macdir in `find $HOME -mindepth 2 -maxdepth 2 -type d | egrep "^$HOME/mac_$USER/"`; do
  111. rm -rf $macdir/Network\ Trash\ Folder
  112. mkdir $macdir/Network\ Trash\ Folder
  113. chown nobody: $macdir/Network\ Trash\ Folder
  114. chmod a= $macdir/Network\ Trash\ Folder
  115. done
  116. if [ -d $HOME/$pc ]; then
  117. chown -R $USER: $HOME/$pc
  118. chmod -R u=rw,g=r,o=,ug+X $HOME/$pc
  119. fi
  120. # if test -d $HOME/$xchange; then
  121. # chown -R $USER:users $HOME/$xchange
  122. # chmod -R g=r,g+X $HOME/$xchange
  123. # if test "x$XCHANGEDIR" != "x"; then
  124. # rm -rf $XCHANGEDIR/$USER
  125. # ln -dfs $HOME/$xchange $XCHANGEDIR/$USER
  126. # fi
  127. # fi
  128. if [ -d $HOME/public_html ]; then
  129. chown -R $USER: $HOME/public_html
  130. chmod -R u+rX,go=r,go+X $HOME/public_html
  131. if [ $NETATALK ]; then
  132. if [ -d "$HOME/public_html/Network\ Trash\ Folder" ]; then
  133. rm -rf $HOME/public_html/Network\ Trash\ Folder
  134. mkdir $HOME/public_html/Network\ Trash\ Folder
  135. chown nobody: $HOME/public_html/Network\ Trash\ Folder
  136. chmod a= $HOME/public_html/Network\ Trash\ Folder
  137. fi
  138. fi
  139. fi
  140. ## Needs more work (not all websites are equally handled)
  141. # for dir in $(cd $HOME && find -maxdepth 1 -type d -name 'web_*' -exec sh -c 'cd {} && basename `pwd`' \;); do
  142. # chown -R $USER: $HOME/$dir
  143. # chmod -R u+rX,go=r,go+X $HOME/$dir
  144. # done
  145. echo "."
  146. done
  147. if [ $XCHANGE ]; then
  148. for USER in $(ls $XDIRREAL); do
  149. id $USER >/dev/null 2>&1 || rm -rf $XDIRREAL/$USER
  150. done
  151. fi