summaryrefslogtreecommitdiff
path: root/user-init
blob: b1448073b6524bbd321ab080c4809a66b0032240 (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 dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_$USER$"`; do
  102. chgrp -R $USER $dir
  103. chmod -R u=rw,g=rw,o=,ug+X,g+s $dir
  104. rm -rf $dir/Network\ Trash\ Folder
  105. mkdir $dir/Network\ Trash\ Folder
  106. chown nobody: $dir/Network\ Trash\ Folder
  107. chmod a= $dir/Network\ Trash\ Folder
  108. done
  109. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_${USER}_ro$"`; do
  110. chown -R $USER: $dir
  111. chmod -R u=rw,g=r,o=,ug+X $dir
  112. rm -rf $dir/Network\ Trash\ Folder
  113. mkdir $dir/Network\ Trash\ Folder
  114. chown nobody: $dir/Network\ Trash\ Folder
  115. chmod a= $dir/Network\ Trash\ Folder
  116. done
  117. # Access to ftp folders
  118. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/ftp_$USER$"`; do
  119. chgrp -R $USER $dir
  120. chmod -R ug=rw,o=r,a+X,g+s $dir
  121. rm -rf $dir/Network\ Trash\ Folder
  122. mkdir $dir/Network\ Trash\ Folder
  123. chown nobody: $dir/Network\ Trash\ Folder
  124. chmod a= $dir/Network\ Trash\ Folder
  125. done
  126. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/ftp_${USER}_ro$"`; do
  127. chown -R $USER: $dir
  128. chmod -R u=rw,go=r,a+X $dir
  129. rm -rf $dir/Network\ Trash\ Folder
  130. mkdir $dir/Network\ Trash\ Folder
  131. chown nobody: $dir/Network\ Trash\ Folder
  132. chmod a= $dir/Network\ Trash\ Folder
  133. done
  134. # Access to web folders
  135. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/web_"`; do
  136. chown -R $USER: $dir
  137. # chmod -R u=rw,go=r,a+X $webdir
  138. #TODO: Only cgi scripts (.cgi and .pl) should be executable
  139. chmod -R u+rw,go+r,a+X $dir
  140. rm -rf $dir/Network\ Trash\ Folder
  141. mkdir $dir/Network\ Trash\ Folder
  142. chown nobody: $dir/Network\ Trash\ Folder
  143. chmod a= $dir/Network\ Trash\ Folder
  144. done
  145. if [ -d $HOME/$pc ]; then
  146. chown -R $USER: $HOME/$pc
  147. chmod -R u=rw,g=r,o=,ug+X $HOME/$pc
  148. fi
  149. # if test -d $HOME/$xchange; then
  150. # chown -R $USER:users $HOME/$xchange
  151. # chmod -R g=r,g+X $HOME/$xchange
  152. # if test "x$XCHANGEDIR" != "x"; then
  153. # rm -rf $XCHANGEDIR/$USER
  154. # ln -dfs $HOME/$xchange $XCHANGEDIR/$USER
  155. # fi
  156. # fi
  157. if [ -d $HOME/public_html ]; then
  158. chown -R $USER: $HOME/public_html
  159. chmod -R u+rX,go=r,go+X $HOME/public_html
  160. if [ $NETATALK ]; then
  161. if [ -d "$HOME/public_html/Network\ Trash\ Folder" ]; then
  162. rm -rf $HOME/public_html/Network\ Trash\ Folder
  163. mkdir $HOME/public_html/Network\ Trash\ Folder
  164. chown nobody: $HOME/public_html/Network\ Trash\ Folder
  165. chmod a= $HOME/public_html/Network\ Trash\ Folder
  166. fi
  167. fi
  168. fi
  169. ## Needs more work (not all websites are equally handled)
  170. # for dir in $(cd $HOME && find -maxdepth 1 -type d -name 'web_*' -exec sh -c 'cd {} && basename `pwd`' \;); do
  171. # chown -R $USER: $HOME/$dir
  172. # chmod -R u+rX,go=r,go+X $HOME/$dir
  173. # done
  174. echo "."
  175. done
  176. if [ $XCHANGE ]; then
  177. for USER in $(ls $XDIRREAL); do
  178. id $USER >/dev/null 2>&1 || rm -rf $XDIRREAL/$USER
  179. done
  180. fi