summaryrefslogtreecommitdiff
path: root/user-init
blob: 6afb10d77c4367b810e73e98f151c1aeb8bbee76 (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. echo "Creating default folders and setting permissions:"
  24. for USER in $USERS; do
  25. HOME="/home/$USER"
  26. test -d $HOME || continue
  27. test -L $HOME && continue
  28. # [ $USER != "lost+found" ] || continue
  29. id -u $USER >/dev/null 2>&1 || continue
  30. # echo $UID
  31. # [ $UID gt 1000 ] || continue
  32. echo -n $USER
  33. # if [ -x /etc/local/quota.sh ]; then
  34. # /etc/local/quota.sh $USER
  35. # fi
  36. [ $QUOTASOFT ] || QUOTASOFT="0"
  37. [ $QUOTAHARD ] || QUOTAHARD="0"
  38. for QUOTAHOME in $QUOTAHOMES; do
  39. if [ $NEW_QUOTA ]; then
  40. setquota $USER $QUOTASOFT $QUOTAHARD 0 0 $QUOTAHOME
  41. else
  42. setquota $USER $QUOTAHOME $QUOTASOFT $QUOTAHARD 0 0
  43. fi
  44. done
  45. # groupadd $USER
  46. # usermod -g $USER $USER
  47. # rm -f $HOME/.profile $HOME/.bashrc $HOME/.bash_history
  48. # cp /etc/skel/.bash_profile /etc/skel/.bashrc $HOME/
  49. if [ $NETATALK ]; then
  50. mkdir -p $HOME/$mac
  51. fi
  52. if [ $SAMBA ]; then
  53. mkdir -p $HOME/$pc
  54. fi
  55. # if [ $XCHANGE ]; then
  56. # mkdir -p $HOME/$xchange
  57. # chown -R $USER: $HOME/$xchange
  58. # chmod -R u=rw,go=,g+r,ug+X $HOME/$xchange
  59. # fi
  60. if [ $XCHANGE ]; then
  61. [ -d $XDIRREAL/$USER ] || mkdir -p $XDIRREAL/$USER
  62. chown -R $USER:users $XDIRREAL/$USER
  63. chmod -R g=r,g+X $XDIRREAL/$USER
  64. if [ -e "x$HOME/$xchange" ]; then
  65. rm -rf $HOME/$xchange
  66. ln -dfs $XDIRREAL/$USER $HOME/$xchange
  67. fi
  68. fi
  69. if [ $PUBLIC ]; then
  70. mkdir -p $HOME/public_html
  71. fi
  72. chown $USER: $HOME
  73. chmod u=rwX,go=rX $HOME
  74. # chown -R $USER: $HOME
  75. # chmod -R u=rw,g=r,o=,ug+X $HOME
  76. # chmod o+rX $HOME
  77. if [ -f $HOME/.forward ]; then
  78. chown $USER: $HOME/.forward
  79. chmod 0640 $HOME/.forward
  80. fi
  81. mkdir -p $HOME/mail
  82. touch $HOME/mail/mbox
  83. chown -R $USER: $HOME/mail
  84. chmod -R u=rw,go=,u+X $HOME/mail
  85. if [ -f $HOME/.mailboxlist ]; then
  86. chown $USER: $HOME/.mailboxlist
  87. chmod 0640 $HOME/.mailboxlist
  88. fi
  89. if [ -f /var/spool/mail/$USER ]; then
  90. chown $USER:mail /var/spool/mail/$USER
  91. chmod ug=rw,o= /var/spool/mail/$USER
  92. fi
  93. if [ -d $HOME/$mac ]; then
  94. chown -R $USER: $HOME/$mac
  95. chmod -R u=rw,g=r,o=,ug+X $HOME/$mac
  96. rm -rf $HOME/$mac/Network\ Trash\ Folder
  97. mkdir $HOME/$mac/Network\ Trash\ Folder
  98. chown nobody: $HOME/$mac/Network\ Trash\ Folder
  99. chmod a= $HOME/$mac/Network\ Trash\ Folder
  100. fi
  101. # Access to Mac folders
  102. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_$USER$"`; do
  103. chgrp -R $USER $dir
  104. chmod -R u=rw,g=rw,o=,ug+X,g+s $dir
  105. rm -rf $dir/Network\ Trash\ Folder
  106. mkdir $dir/Network\ Trash\ Folder
  107. chown nobody: $dir/Network\ Trash\ Folder
  108. chmod a= $dir/Network\ Trash\ Folder
  109. done
  110. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_${USER}_ro$"`; do
  111. chown -R $USER: $dir
  112. chmod -R u=rw,g=r,o=,ug+X $dir
  113. rm -rf $dir/Network\ Trash\ Folder
  114. mkdir $dir/Network\ Trash\ Folder
  115. chown nobody: $dir/Network\ Trash\ Folder
  116. chmod a= $dir/Network\ Trash\ Folder
  117. done
  118. # Access to ftp folders
  119. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/ftp_$USER$"`; do
  120. chgrp -R $USER $dir
  121. chmod -R ug=rw,o=r,a+X,g+s $dir
  122. rm -rf $dir/Network\ Trash\ Folder
  123. mkdir $dir/Network\ Trash\ Folder
  124. chown nobody: $dir/Network\ Trash\ Folder
  125. chmod a= $dir/Network\ Trash\ Folder
  126. done
  127. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/ftp_${USER}_ro$"`; do
  128. chown -R $USER: $dir
  129. chmod -R u=rw,go=r,a+X $dir
  130. rm -rf $dir/Network\ Trash\ Folder
  131. mkdir $dir/Network\ Trash\ Folder
  132. chown nobody: $dir/Network\ Trash\ Folder
  133. chmod a= $dir/Network\ Trash\ Folder
  134. done
  135. # Access to web folders
  136. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/web_"`; do
  137. chown -R $USER: $dir
  138. # chmod -R u=rw,go=r,a+X $webdir
  139. #TODO: Only cgi scripts (.cgi and .pl) should be executable
  140. chmod -R u+rw,go+r,a+X $dir
  141. rm -rf $dir/Network\ Trash\ Folder
  142. mkdir $dir/Network\ Trash\ Folder
  143. chown nobody: $dir/Network\ Trash\ Folder
  144. chmod a= $dir/Network\ Trash\ Folder
  145. done
  146. if [ -d $HOME/$pc ]; then
  147. chown -R $USER: $HOME/$pc
  148. chmod -R u=rw,g=r,o=,ug+X $HOME/$pc
  149. fi
  150. # if test -d $HOME/$xchange; then
  151. # chown -R $USER:users $HOME/$xchange
  152. # chmod -R g=r,g+X $HOME/$xchange
  153. # if test "x$XCHANGEDIR" != "x"; then
  154. # rm -rf $XCHANGEDIR/$USER
  155. # ln -dfs $HOME/$xchange $XCHANGEDIR/$USER
  156. # fi
  157. # fi
  158. if [ -d $HOME/public_html ]; then
  159. chown -R $USER: $HOME/public_html
  160. chmod -R u+rX,go=r,go+X $HOME/public_html
  161. if [ $NETATALK ]; then
  162. if [ -d "$HOME/public_html/Network\ Trash\ Folder" ]; then
  163. rm -rf $HOME/public_html/Network\ Trash\ Folder
  164. mkdir $HOME/public_html/Network\ Trash\ Folder
  165. chown nobody: $HOME/public_html/Network\ Trash\ Folder
  166. chmod a= $HOME/public_html/Network\ Trash\ Folder
  167. fi
  168. fi
  169. fi
  170. ## Needs more work (not all websites are equally handled)
  171. # for dir in $(cd $HOME && find -maxdepth 1 -type d -name 'web_*' -exec sh -c 'cd {} && basename `pwd`' \;); do
  172. # chown -R $USER: $HOME/$dir
  173. # chmod -R u+rX,go=r,go+X $HOME/$dir
  174. # done
  175. echo "."
  176. done
  177. if [ $XCHANGE ]; then
  178. for USER in $(ls $XDIRREAL); do
  179. id $USER >/dev/null 2>&1 || rm -rf $XDIRREAL/$USER
  180. done
  181. fi