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