summaryrefslogtreecommitdiff
path: root/user-init
blob: 214cbaf9c4ef07e6852dbb9954d558572d5190c2 (plain)
  1. #!/bin/sh
  2. set -e
  3. # reset flags
  4. apache_reload_needed=""
  5. runmode="normal"
  6. mac=".mac"
  7. pc=".pc"
  8. xchange=".xchange"
  9. . /etc/adduser.conf || exit 1
  10. [ -f /etc/local/users.conf ] && . /etc/local/users.conf
  11. . /etc/local/volumes || exit 0
  12. XDIRREAL="$XDIR/users/root"
  13. if [ $XCHANGE ]; then
  14. if [ ! -d "$XDIR" ]; then
  15. echo "XDIR doesn't exist. Ignoring XCHANGE!"
  16. XCHANGE=""
  17. fi
  18. fi
  19. if [ $# -gt 0 ]; then
  20. USERS=$*
  21. else
  22. USERS=`getent passwd | awk -F: '{print $1}'`
  23. fi
  24. [ $NETATALK_HOME ] && mac=$NETATALK_HOME
  25. [ $SAMBA_HOME ] && pc=$SAMBA_HOME
  26. [ $XCHANGE_HOME ] && xchange=$XCHANGE_HOME
  27. echo "Setting up additional folders and permissions..."
  28. for user in $USERS; do
  29. if [ -z "`getent passwd $user | awk -F: '{print $6}'`" ]; then
  30. echo "User $user doesn't exist. Ignoring..."
  31. continue
  32. fi
  33. uid=`getent passwd $user | awk -F: '{print $3}' | head -1`
  34. HOME=`getent passwd $user | awk -F: '{print $6}' | head -1`
  35. # Ignore non-human accounts silently
  36. [ "$uid" -ge "$FIRST_UID" -a "$uid" -le "$LAST_UID" ] || continue
  37. [ -d $HOME ] || continue
  38. # [ -L $HOME ] && continue
  39. echo -n $user
  40. # if [ -x /etc/local/quota.sh ]; then
  41. # /etc/local/quota.sh $user
  42. # fi
  43. [ $QUOTASOFT ] || QUOTASOFT="0"
  44. [ $QUOTAHARD ] || QUOTAHARD="0"
  45. for QUOTAHOME in $QUOTAHOMES; do
  46. if [ $NEW_QUOTA ]; then
  47. setquota $user $QUOTASOFT $QUOTAHARD 0 0 $QUOTAHOME
  48. else
  49. setquota $user $QUOTAHOME $QUOTASOFT $QUOTAHARD 0 0
  50. fi
  51. done
  52. mkdir -p $HOME/mail
  53. if [ "$USE_MBOX" ]; then
  54. touch $HOME/mail/mbox
  55. elif [ -f $HOME/mail/mbox -a ! -s $HOME/mail/mbox ]; then
  56. rm -f $HOME/mail/mbox
  57. fi
  58. if [ $NETATALK ]; then
  59. mkdir -p $HOME/$mac
  60. fi
  61. if [ $SAMBA ]; then
  62. mkdir -p $HOME/$pc
  63. fi
  64. if [ $XCHANGE ]; then
  65. mkdir -p $XDIRREAL/$user
  66. fi
  67. if [ $PUBLIC ]; then
  68. mkdir -p $HOME/public_html
  69. fi
  70. chown $user: $HOME
  71. chmod u=rwX,go=rX $HOME
  72. # Mail handling
  73. chown -R $user: $HOME/mail
  74. chmod -R u=rw,go=,u+X $HOME/mail
  75. if [ -f $HOME/.mailboxlist ]; then
  76. chown $user: $HOME/.mailboxlist
  77. chmod 0640 $HOME/.mailboxlist
  78. fi
  79. if [ -f $HOME/.forward ]; then
  80. chown $user: $HOME/.forward
  81. chmod 0640 $HOME/.forward
  82. fi
  83. if [ -f /var/mail/$user ]; then
  84. chown $user:mail /var/mail/$user
  85. chmod ug=rw,o= /var/mail/$user
  86. elif [ -f /var/spool/mail/$user ]; then
  87. chown $user:mail /var/spool/mail/$user
  88. chmod ug=rw,o= /var/spool/mail/$user
  89. fi
  90. # Mac dir permissions
  91. if [ -d $HOME/$mac ]; then
  92. chown -R $user: $HOME/$mac
  93. chmod -R u=rw,g=r,o=,ug+X $HOME/$mac
  94. rm -rf $HOME/$mac/Network\ Trash\ Folder
  95. mkdir $HOME/$mac/Network\ Trash\ Folder
  96. chown nobody: $HOME/$mac/Network\ Trash\ Folder
  97. chmod a= $HOME/$mac/Network\ Trash\ Folder
  98. fi
  99. # PC dir permissions
  100. if [ -d $HOME/$pc ]; then
  101. chown -R $user: $HOME/$pc
  102. chmod -R u=rw,g=r,o=,ug+X $HOME/$pc
  103. fi
  104. # Exchange dir permissions
  105. if [ -d $XDIRREAL/$user ]; then
  106. chown -R $user:users $XDIRREAL/$user
  107. chmod -R g=r,g+X $XDIRREAL/$user
  108. if [ -e "x$HOME/$xchange" ]; then
  109. if [ -L "x$HOME/$xchange" ]; then
  110. ln -sf $XDIRREAL/$user $HOME/$xchange
  111. else
  112. echo "ERROR: $HOME/$xchange exists already. Leaving it as is..."
  113. fi
  114. else
  115. ln -s $XDIRREAL/$user $HOME/$xchange
  116. fi
  117. fi
  118. # Public dir permissions
  119. if [ -d $HOME/public_html ]; then
  120. chown -R $user: $HOME/public_html
  121. chmod -R u+rX,go=r,go+X $HOME/public_html
  122. if [ $NETATALK ]; then
  123. rm -rf $HOME/public_html/Network\ Trash\ Folder
  124. mkdir $HOME/public_html/Network\ Trash\ Folder
  125. chown nobody: $HOME/public_html/Network\ Trash\ Folder
  126. chmod a= $HOME/public_html/Network\ Trash\ Folder
  127. fi
  128. fi
  129. # Mac shares permissions
  130. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_$USER$"`; do
  131. chgrp -R $user $dir
  132. chmod -R u=rw,g=rw,o=,ug+X,g+s $dir
  133. rm -rf $dir/Network\ Trash\ Folder
  134. mkdir $dir/Network\ Trash\ Folder
  135. chown nobody: $dir/Network\ Trash\ Folder
  136. chmod a= $dir/Network\ Trash\ Folder
  137. done
  138. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_${USER}_ro$"`; do
  139. chown -R $user: $dir
  140. chmod -R u=rw,g=r,o=,ug+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. # Ftp shares permissions
  147. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/ftp_$USER$"`; do
  148. chgrp -R $user $dir
  149. chmod -R ug=rw,o=r,a+X,g+s $dir
  150. rm -rf $dir/Network\ Trash\ Folder
  151. mkdir $dir/Network\ Trash\ Folder
  152. chown nobody: $dir/Network\ Trash\ Folder
  153. chmod a= $dir/Network\ Trash\ Folder
  154. done
  155. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/ftp_${USER}_ro$"`; do
  156. chown -R $user: $dir
  157. chmod -R u=rw,go=r,a+X $dir
  158. rm -rf $dir/Network\ Trash\ Folder
  159. mkdir $dir/Network\ Trash\ Folder
  160. chown nobody: $dir/Network\ Trash\ Folder
  161. chmod a= $dir/Network\ Trash\ Folder
  162. done
  163. # Web shares permissions
  164. for dir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/web_"`; do
  165. chown -R $user: $dir
  166. # chmod -R u=rw,go=r,a+X $webdir
  167. #TODO: Only cgi scripts (.cgi and .pl) should be executable
  168. chmod -R u+rw,go+r,a+X $dir
  169. if [ $NETATALK ]; then
  170. rm -rf $dir/Network\ Trash\ Folder
  171. mkdir $dir/Network\ Trash\ Folder
  172. chown nobody: $dir/Network\ Trash\ Folder
  173. chmod a= $dir/Network\ Trash\ Folder
  174. fi
  175. done
  176. # Dummy user restrictions
  177. if [ -n "$DUMMYSHAREDIR" -a -n "$DUMMYSHAREOWNER" -a -n "$DUMMYSHARENAME" ]; then
  178. [ -e $DUMMYSHAREDIR/$user ] \
  179. || mkdir $DUMMYSHAREDIR/$user
  180. chown $DUMMYSHAREOWNER: $DUMMYSHAREDIR/$user
  181. chmod u=rw,go=r,a+X $DUMMYSHAREDIR/$user
  182. if [ -e $HOME/$DUMMYSHARENAME ]; then
  183. if [ -L $HOME/$DUMMYSHARENAME ]; then
  184. ln -sf $DUMMYSHAREDIR/$user $HOME/$DUMMYSHARENAME
  185. chown $user: $HOME/$DUMMYSHARENAME
  186. else
  187. echo "ERROR: $HOME/$DUMMYSHAREDIR exists already. Leaving it as is..."
  188. fi
  189. else
  190. ln -s $DUMMYSHAREDIR/$user $HOME/$DUMMYSHARENAME
  191. chown $user: $HOME/$DUMMYSHARENAME
  192. fi
  193. if [ -n "$DUMMYAPACHECFG" -a -n "$DUMMYAPACHESHAREDIR" ]; then
  194. if [ -f /etc/apache/include.d/$DUMMYAPACHECFG -a -x /etc/init.d/apache ]; then
  195. if [ -e /etc/apache/include.d/$DUMMYAPACHECFG-$user ]; then
  196. echo "/etc/apache/include.d/$DUMMYAPACHECFG-$user exists already. Ignoring..."
  197. else
  198. echo "# Created automatically by adduser.local
  199. <Location /$DUMMYAPACHESHAREDIR/$user>
  200. <Limit GET POST>
  201. require user $user
  202. </Limit>
  203. </Location>" \
  204. > /etc/apache/include.d/$DUMMYAPACHECFG-$user
  205. apache_reload_needed="1"
  206. fi
  207. fi
  208. fi
  209. fi
  210. echo "."
  211. done
  212. if [ $XCHANGE ]; then
  213. for USER in $(ls $XDIRREAL); do
  214. id $user >/dev/null 2>&1 || rm -rf $XDIRREAL/$user
  215. done
  216. fi
  217. if [ "$apache_reload_needed" ]; then
  218. apache_do_reload=""
  219. case runmode in
  220. interactive)
  221. echo -n "Apache config changed. Reload Apache now (Y/n)? "
  222. read apache_reload
  223. case $apache_reload in
  224. y|Y|"")
  225. apache_do_reload="1"
  226. ;;
  227. esac
  228. ;;
  229. force)
  230. apache_do_reload="1"
  231. ;;
  232. *)
  233. echo "Apache config has changed. Remember to reload Apache...!"
  234. ;;
  235. esac
  236. if "$apache_do_reload" ]; then
  237. /etc/init.d/apache force-reload
  238. fi
  239. fi