summaryrefslogtreecommitdiff
path: root/user-init
blob: 2d61ad96d237d19c10b3d0a0e760982764b038ab (plain)
  1. #!/bin/sh
  2. set -e
  3. # reset flags
  4. apache_reload_needed=""
  5. runmode="normal"
  6. # subfolder name defaults (edit /etc/local/users.conf to override)
  7. mac="mac" # Optimized for sharing through AppleShare (netatalk)
  8. pc="pc" # Optimized for sharing though SMB/CIFS (Samba)
  9. xchange="xchange" # Readable by group
  10. # config (edit /etc/local/users.conf to override)
  11. # which are user accounts (adduser values are used if empty)
  12. first_uid=""
  13. last_uid=""
  14. do_quota="no" # Manage disk quota
  15. do_distrib="no" # Distributed shares (software archive)
  16. do_personal="no" # Personal shares (mac, pc, public_html)
  17. do_xchange="no" # Group-readable shares
  18. do_public="no" # Public share (web homepage)
  19. do_mac="no" # AppleShare-optimized share (netatalk)
  20. do_pc="no" # SMB-ptimized share (Samba)
  21. do_server="no" # Personal share on remote SMB server
  22. quota_roots="" # space-delimited list of disk devices
  23. quota_soft="100000"
  24. quota_hard="1000000"
  25. quota_newstyle="yes" # Woody used a different syntax...
  26. xchange_root="xchange"
  27. xchange_sharedroot="/home/XCHANGE"
  28. mac_root="mac"
  29. pc_root="pc"
  30. server_name="SERVER" # SMB name of remote server
  31. server_desc="remote server"
  32. server_root="server"
  33. server_conf="/etc/security/pam_mount.conf"
  34. server_userconf=".winpassword"
  35. ### No servicable parts below this line! ###
  36. if [ -e /etc/adduser.conf ]; then
  37. . /etc/adduser.conf
  38. else
  39. echo "/etc/adduser.conf missing. Exiting..."
  40. exit 1
  41. fi
  42. [ -r /etc/local/users.conf ] && . /etc/local/users.conf
  43. #TODO: Add conversion like below, and change remaining script to new variable names
  44. #[ -n "$XDIR" ] && xchange_sharedroot="$XDIR"
  45. # exit silently if this system lacks required hints
  46. [ -r /etc/local/volumes ] && . /etc/local/volumes || exit 0
  47. XDIRREAL="$XDIR/users/root"
  48. if [ -n "$XCHANGE" ]; then
  49. if [ ! -d "$XDIR" ]; then
  50. echo "XDIR doesn't exist. Ignoring XCHANGE!"
  51. XCHANGE=""
  52. fi
  53. fi
  54. if [ $# -gt 0 ]; then
  55. USERS=$*
  56. else
  57. # USERS=`getent passwd | awk -F: '{print $1}'`
  58. echo "uid required!"
  59. exit 1
  60. fi
  61. [ -n "$NETATALK_HOME" ] && mac="$NETATALK_HOME"
  62. [ -n "$SAMBA_HOME" ] && pc="$SAMBA_HOME"
  63. [ -n "$XCHANGE_HOME" ] && xchange="$XCHANGE_HOME"
  64. echo "Setting up additional folders and permissions..."
  65. for user in $USERS; do
  66. uid="`getent passwd \"$user\" | awk -F: '{print $3}' | head -1`"
  67. HOME="`getent passwd \"$user\" | awk -F: '{print $6}' | head -1`"
  68. if [ -z "$HOME" ]; then
  69. echo "User $user doesn't exist. Ignoring..."
  70. continue
  71. fi
  72. # Ignore non-human accounts silently
  73. [ "$uid" -ge "$FIRST_UID" -a "$uid" -le "$LAST_UID" ] || continue
  74. [ -d "$HOME" ] || continue
  75. # [ -L "$HOME" ] && continue
  76. echo -n "$user"
  77. # if [ -x /etc/local/quota.sh ]; then
  78. # /etc/local/quota.sh "$user"
  79. # fi
  80. [ -n "$QUOTASOFT" ] || QUOTASOFT="0"
  81. [ -n "$QUOTAHARD" ] || QUOTAHARD="0"
  82. for QUOTAHOME in $QUOTAHOMES; do
  83. if [ -n "$NEW_QUOTA" ]; then
  84. setquota "$user" "$QUOTASOFT" "$QUOTAHARD" 0 0 "$QUOTAHOME"
  85. else
  86. setquota "$user" "$QUOTAHOME" "$QUOTASOFT" "$QUOTAHARD" 0 0
  87. fi
  88. done
  89. if [ -n "$NETATALK" ]; then
  90. mkdir -p "$HOME/$mac"
  91. fi
  92. if [ -n "$SAMBA" ]; then
  93. mkdir -p "$HOME/$pc"
  94. fi
  95. if [ -n "$XCHANGE" ]; then
  96. mkdir -p "$XDIRREAL/$user"
  97. fi
  98. if [ -n "$PUBLIC" ]; then
  99. mkdir -p "$HOME/public_html"
  100. fi
  101. #TODO: Enable this only when option implemented to do it non-interactively
  102. # echo # dirty hack: better if being able to lower verbosity of localuserconfig
  103. # su -s /bin/bash -c localuserconfig "$user"
  104. if [ "$do_server" = "yes" ] && [ -r "$server_conf" ] && [ -f "$HOME/$server_userconf" ]; then
  105. server_username="$(grep '^username' \"$HOME/$server_userconf\" | awk -F= '{print $2}' | head -1 | awk '{print $1}')"
  106. if [ -n "$server_username" ]; then
  107. if grep -q "^volume $user " "$server_conf"; then
  108. perl -pi -e "s|^volume $user .*|volume $user smb $server_name $server_username $HOME/$server_root uid=$user,gid=$user - -|" "$server_conf"
  109. else
  110. echo "volume $user smb $server_name $server_username $HOME/$server_root uid=$user,gid=$user - -" >> "$server_conf"
  111. fi
  112. fi
  113. fi
  114. chown "$user": "$HOME"
  115. chmod u=rwX,go=rX "$HOME"
  116. # Mail handling
  117. if [ -n "$MAILDIR" ]; then
  118. if [ ! -e "$HOME/.procmailrc" ]; then
  119. echo 'DEFAULT=$HOME/Maildir/' > "$HOME/.procmailrc"
  120. fi
  121. mkdir -p "$HOME/Maildir/cur" "$HOME/Maildir/new" "$HOME/Maildir/tmp"
  122. chown -R "$user": "$HOME/Maildir"
  123. chmod -R u=rw,go=,u+X "$HOME/Maildir"
  124. if [ -f "/var/mail/$user" ] && [ ! -s "/var/mail/$user" ]; then
  125. rm -f "/var/mail/$user"
  126. elif [ -f "/var/spool/mail/$user" ] && [ ! -s "/var/spool/mail/$user" ]; then
  127. rm -f "/var/spool/mail/$user"
  128. fi
  129. else
  130. mkdir -p "$HOME/mail"
  131. if [ -n "$USE_MBOX" ]; then
  132. touch "$HOME/mail/mbox"
  133. elif [ -f "$HOME/mail/mbox" ] && [ ! -s "$HOME/mail/mbox" ]; then
  134. rm -f "$HOME/mail/mbox"
  135. fi
  136. chown -R "$user": "$HOME/mail"
  137. chmod -R u=rw,go=,u+X "$HOME/mail"
  138. if [ -f "$HOME/.mailboxlist" ]; then
  139. chown "$user": "$HOME/.mailboxlist"
  140. chmod 0640 "$HOME/.mailboxlist"
  141. fi
  142. fi
  143. if [ -f "/var/mail/$user" ]; then
  144. chown "$user":mail "/var/mail/$user"
  145. chmod ug=rw,o= "/var/mail/$user"
  146. elif [ -f "/var/spool/mail/$user" ]; then
  147. chown "$user":mail "/var/spool/mail/$user"
  148. chmod ug=rw,o= "/var/spool/mail/$user"
  149. fi
  150. if [ -f "$HOME/.forward" ]; then
  151. chown "$user": "$HOME/.forward"
  152. chmod 0640 "$HOME/.forward"
  153. fi
  154. if [ -f "$HOME/.procmailrc" ]; then
  155. chown "$user": "$HOME/.procmailrc"
  156. chmod 0640 "$HOME/.procmailrc"
  157. fi
  158. # MySQL handling
  159. if [ -f "$HOME/.my.cnf" ]; then
  160. chown "$user": "$HOME/.my.cnf"
  161. chmod 0600 "$HOME/.my.cnf"
  162. fi
  163. # Mac dir permissions
  164. if [ -d "$HOME/$mac" ]; then
  165. chown -R "$user": "$HOME/$mac"
  166. chmod -R u=rw,g=r,o=,ug+X "$HOME/$mac"
  167. rm -rf "$HOME/$mac/Network Trash Folder"
  168. mkdir "$HOME/$mac/Network Trash Folder"
  169. chown nobody: "$HOME/$mac/Network Trash Folder"
  170. chmod a= "$HOME/$mac/Network Trash Folder"
  171. fi
  172. # PC dir permissions
  173. if [ -d "$HOME/$pc" ]; then
  174. chown -R "$user": "$HOME/$pc"
  175. chmod -R u=rw,g=r,o=,ug+X "$HOME/$pc"
  176. fi
  177. #FIXME: something is wrong with prefixing "x" here...
  178. # Exchange dir permissions
  179. if [ -d "$XDIRREAL/$user" ]; then
  180. chown -R "$user":users "$XDIRREAL/$user"
  181. chmod -R g=r,g+X "$XDIRREAL/$user"
  182. if [ -e "x$HOME/$xchange" ]; then
  183. if [ -L "x$HOME/$xchange" ]; then
  184. ln -sf "$XDIRREAL/$user $HOME/$xchange"
  185. else
  186. echo "ERROR: \"$HOME/$xchange\" exists already. Leaving it as is..."
  187. fi
  188. else
  189. ln -s "$XDIRREAL/$user" "$HOME/$xchange"
  190. fi
  191. fi
  192. # Public dir permissions
  193. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./public\(_.*\)?'`; do
  194. chown -R "$user": "$HOME/$dir"
  195. chmod -R u+rX,go=r,go+X "$HOME/$dir"
  196. if [ -n "$NETATALK" ]; then
  197. rm -rf "$HOME/$dir/Network Trash Folder"
  198. mkdir "$HOME/$dir/Network Trash Folder"
  199. chown nobody: "$HOME/$dir/Network Trash Folder"
  200. chmod a= "$HOME/$dir/Network Trash Folder"
  201. fi
  202. done
  203. # Shared dirs are writable by own primary group
  204. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./shared\(_.*\)?'`; do
  205. chgrp -R "$user" "$HOME/$dir"
  206. chmod -R ug=rw,o=,ug+X,g+s "$HOME/$dir"
  207. if [ -n "$NETATALK" ]; then
  208. rm -rf "$HOME/$dir/Network Trash Folder"
  209. mkdir "$HOME/$dir/Network Trash Folder"
  210. chown nobody: "$HOME/$dir/Network Trash Folder"
  211. chmod a= "$HOME/$dir/Network Trash Folder"
  212. fi
  213. done
  214. # Private dirs are readable by own primary group
  215. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./private\(_.*\)?$'`; do
  216. chown -R "$user": "$HOME/$dir"
  217. chmod -R u+rX,g=r,g+X,o= "$HOME/$dir"
  218. done
  219. # Secret dirs are accessible only by self
  220. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./secret\(_.*\)?$'`; do
  221. chown -R "$user": "$HOME/$dir"
  222. chmod -R u+rX,go= "$HOME/$dir"
  223. done
  224. # Fileshares: <home>/shares.<sharetype>/<rogroup>/<rwgroup>/<sharename>
  225. # <sharetype>: Either mac or win depending on which of netatalk and samba provides r/w access to the shares
  226. # <rwgroup>: Group with write access to the share (usually the default group of the owner)
  227. # <rogroup>: Either rwgroup or secondary group with read-only access to the share
  228. # owner and rwgroup members must be member of both groups
  229. #FIXME: Use the below instead, and replace occurrences of "$thisdir" with "$HOME/$dir".
  230. #for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./shares\..*'`; do
  231. find "$HOME" -mindepth 1 -maxdepth 1 -type d -print | egrep "^$HOME/shares\." | (while read thisdir; do
  232. sharetype="`basename \"$thisdir\" | awk -F. '{print $2}'`"
  233. # Define dir and file exceptions
  234. case "$sharetype" in
  235. mac)
  236. dirs_world_rw_create='.AppleDB'
  237. dirs_group_rw_create='.AppleDesktop/Temporary Items/TheFindByContentFolder'
  238. dirs_group_ro_create='TheVolumeSettingsFolder'
  239. dirs_group_ro_update='.AppleDouble'
  240. files_group_ro_update=':2eDS_Store'
  241. dirs_no_access_purge='Network Trash Folder'
  242. ;;
  243. win)
  244. ;;
  245. *)
  246. continue
  247. ;;
  248. esac
  249. exceptions="$dirs_world_rw_create/$dirs_group_rw_create/$dirs_group_ro_create/$dirs_group_ro_update/$files_group_ro_update/$dirs_no_access_purge"
  250. exception_dirs_create="$dirs_world_rw_create/$dirs_group_rw_create/$dirs_group_ro_create"
  251. chown "$user": "$thisdir"
  252. chmod a=rX "$thisdir"
  253. find "$thisdir" -mindepth 1 -maxdepth 1 -type d -print | (while read thisdir; do
  254. rogroup="`basename \"$thisdir\"`"
  255. chown "$user":"$rogroup" "$thisdir"
  256. chmod ug=rX,o= "$thisdir"
  257. find "$thisdir" -mindepth 1 -maxdepth 1 -type d -print | (while read thisdir; do
  258. rwgroup="`basename \"$thisdir\"`"
  259. chown "$user":"$rwgroup" "$thisdir"
  260. chmod a=rX,g+s "$thisdir"
  261. find "$thisdir" -mindepth 1 -maxdepth 1 -type d -print | (while read thisdir; do
  262. sharename="`basename \"$thisdir\"`"
  263. chown "$user":"$rwgroup" "$thisdir"
  264. chmod u=rw,go=r,a+X,g+s "$thisdir"
  265. ifs="$IFS"
  266. # Set default permissions
  267. find "$thisdir" -mindepth 1 -maxdepth 1 -print | (while read thisdir; do
  268. item="`basename \"$thisdir\"`"
  269. IFS="/"; for exception in $exceptions; do IFS="$ifs";
  270. if [ "$item" = "$exception" ]; then
  271. continue 2
  272. fi
  273. done
  274. chgrp -R "$rwgroup" "$thisdir"
  275. chmod -R ug=rw,o=r,a+X,g+s "$thisdir"
  276. done)
  277. # Handle exception dirs to be created if not existing
  278. IFS="/"; for dir in $exception_dirs_create; do IFS="$ifs";
  279. if [ ! -d "$thisdir/$dir" ]; then
  280. rm -f "$thisdir/$dir"
  281. fi
  282. if [ ! -e "$thisdir/$dir" ]; then
  283. mkdir "$thisdir/$dir"
  284. fi
  285. chown "$user":"$rwgroup" "$thisdir/$dir"
  286. done
  287. IFS="/"; for dir in $dirs_world_rw_create; do IFS="$ifs";
  288. if [ "$rogroup" = "$rwgroup" ]; then
  289. chmod -R ug=rw,o=r,a+X,g+s "$thisdir/$dir"
  290. else
  291. chmod -R a=rw,a+X,g+s "$thisdir/$dir"
  292. fi
  293. done
  294. IFS="/"; for dir in $dirs_group_rw_create; do IFS="$ifs";
  295. chmod -R ug=rw,o=r,a+X,g+s "$thisdir/$dir"
  296. done
  297. IFS="/"; for dir in $dirs_group_ro_create; do IFS="$ifs";
  298. chmod -R u=rw,go=r,a+X,g+s "$thisdir/$dir"
  299. done
  300. # Handle exception dirs to be updated if already there
  301. IFS="/"; for dir in $dirs_group_ro_update; do IFS="$ifs";
  302. if [ -e "$thisdir/$dir" ]; then
  303. chmod u=rw,go=r,a+X,g+s "$thisdir/$dir"
  304. fi
  305. done
  306. # Handle exception files to be updated if already there
  307. IFS="/"; for file in $files_group_ro_update; do IFS="$ifs";
  308. if [ -e "$thisdir/$file" ]; then
  309. chmod u=rw,go=r,g+s "$thisdir/$file"
  310. fi
  311. done
  312. # Handle exception dirs to be purged and recreated
  313. IFS="/"; for dir in $dirs_no_access_purge; do IFS="$ifs";
  314. rm -rf "$thisdir/$dir"
  315. mkdir -m a= "$thisdir/$dir"
  316. chown nobody: "$thisdir/$dir"
  317. done
  318. IFS="$ifs"
  319. done)
  320. done)
  321. done)
  322. done)
  323. # Ftp shares permissions
  324. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex "^\./ftp_$user$"`; do
  325. chgrp -R "$user" "$HOME/$dir"
  326. chmod -R ug=rw,o=r,a+X,g+s "$HOME/$dir"
  327. rm -rf "$HOME/$dir/Network Trash Folder"
  328. mkdir "$HOME/$dir/Network Trash Folder"
  329. chown nobody: "$HOME/$dir/Network Trash Folder"
  330. chmod a= "$HOME/$dir/Network Trash Folder"
  331. done
  332. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex "^\./ftp_${user}_ro$"`; do
  333. chown -R "$user": "$HOME/$dir"
  334. chmod -R u=rw,go=r,a+X "$HOME/$dir"
  335. rm -rf "$HOME/$dir/Network Trash Folder"
  336. mkdir "$HOME/$dir/Network Trash Folder"
  337. chown nobody: "$HOME/$dir/Network Trash Folder"
  338. chmod a= "$HOME/$dir/Network Trash Folder"
  339. done
  340. # Web shares permissions
  341. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./web_.*'`; do
  342. chown -R "$user": "$HOME/$dir"
  343. # chmod -R u=rw,go=r,a+X $webdir
  344. #TODO: Only cgi scripts (.cgi and .pl) should be executable
  345. chmod -R u+rw,go+r,a+X "$HOME/$dir"
  346. # leftover from ancient times with another policy
  347. if [ $NETATALK ]; then
  348. rm -rf "$HOME/$dir/Network Trash Folder"
  349. fi
  350. done
  351. # Web shares permissions
  352. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./websites$'`; do
  353. chown root: "$HOME/$dir"
  354. chmod a=r,u+w,a+X "$HOME/$dir"
  355. done
  356. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./websites/.*'`; do
  357. chown -R "$user": "$HOME/$dir"
  358. # chmod -R u=rw,go=r,a+X $webdir
  359. #TODO: Only cgi scripts (.cgi and .pl) should be executable
  360. chmod -R u+rw,go+r,a+X "$HOME/$dir"
  361. # leftover from ancient times with another policy
  362. if [ $NETATALK ]; then
  363. rm -rf "$HOME/$dir/Network Trash Folder"
  364. fi
  365. done
  366. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./webscripts$'`; do
  367. chown root: "$HOME/$dir"
  368. chmod a=r,u+w,a+X "$HOME/$dir"
  369. done
  370. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./webscripts/.*'`; do
  371. chown -R $user: "$HOME/$dir"
  372. # chmod -R u=rw,go=r,a+X $webdir
  373. #TODO: Only cgi scripts (.cgi and .pl) should be executable
  374. chmod -R u+rw,go+r,a+X "$HOME/$dir"
  375. done
  376. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./webdata$'`; do
  377. chown "$user": "$HOME/$dir"
  378. chmod a=r,u+w,a+X "$HOME/$dir"
  379. done
  380. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./webdata/.*'`; do
  381. chown -R "$user": "$HOME/$dir"
  382. chmod -R u=rw,go=,u+X "$HOME/$dir"
  383. done
  384. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./webshareddata$'`; do
  385. chown "$user": "$HOME/$dir"
  386. chmod a=r,u+w,a+X "$HOME/$dir"
  387. done
  388. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./webshareddata/.*'`; do
  389. chown -R "$user:" "$HOME/$dir"
  390. chmod -R u=rw,go=r,a+X "$HOME/$dir"
  391. done
  392. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./webphpsites$'`; do
  393. chown root: "$HOME/$dir"
  394. chmod u=rw,go=r,a+X "$HOME/$dir"
  395. done
  396. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./webphpsites/.*'`; do
  397. chown -R "$user":www-data "$HOME/$dir"
  398. # chmod -R ug=rw,o=r,a+X $dir
  399. chmod -R ug=rw,o=,ug+X "$HOME/$dir"
  400. done
  401. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./webphpdata$'`; do
  402. chown root: "$HOME/$dir"
  403. chmod a=r,u+w,a+X "$HOME/$dir"
  404. done
  405. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./webphpdata/.*'`; do
  406. chown -R "$user":www-data "$HOME/$dir"
  407. chmod -R ug=rw,o=,ug+X "$HOME/$dir"
  408. done
  409. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./weblogs$'`; do
  410. chown -R "$user": "$HOME/$dir"
  411. chmod -R u=rw,g=r,o=,ug+X "$HOME/$dir"
  412. done
  413. # Dummy user restrictions
  414. if [ -n "$REALUSERS_GROUPNAME" -a -n "$DUMMYSHAREDIR" -a -n "$DUMMYSHAREOWNER" -a -n "$DUMMYSHARENAME" ]; then
  415. [ -e $DUMMYSHAREDIR/$user ] \
  416. || mkdir $DUMMYSHAREDIR/$user
  417. chown $DUMMYSHAREOWNER: $DUMMYSHAREDIR/$user
  418. chmod u=rw,go=r,a+X $DUMMYSHAREDIR/$user
  419. if [ -e $HOME/$DUMMYSHARENAME ]; then
  420. if [ -L $HOME/$DUMMYSHARENAME ]; then
  421. ln -sf $DUMMYSHAREDIR/$user $HOME/$DUMMYSHARENAME
  422. chown $user: $HOME/$DUMMYSHARENAME
  423. else
  424. echo "WARNING: $HOME/$DUMMYSHAREDIR exists already. Leaving it as is..."
  425. fi
  426. else
  427. ln -s $DUMMYSHAREDIR/$user $HOME/$DUMMYSHARENAME
  428. chown $user: $HOME/$DUMMYSHARENAME
  429. fi
  430. if [ -n "$DUMMYAPACHECFG" -a -n "$DUMMYAPACHESHAREDIR" ]; then
  431. if [ -f /etc/apache/include.d/$DUMMYAPACHECFG -a -x /etc/init.d/apache ]; then
  432. if [ -e /etc/apache/include.d/$DUMMYAPACHECFG-$user ]; then
  433. echo "/etc/apache/include.d/$DUMMYAPACHECFG-$user exists already. Ignoring..."
  434. else
  435. echo "# Created automatically by adduser.local
  436. <Location /$DUMMYAPACHESHAREDIR/$user>
  437. <Limit GET POST>
  438. require user $user
  439. </Limit>
  440. </Location>" \
  441. > /etc/apache/include.d/$DUMMYAPACHECFG-$user
  442. apache_reload_needed="1"
  443. fi
  444. fi
  445. fi
  446. fi
  447. echo "."
  448. done
  449. if [ $XCHANGE ]; then
  450. for USER in $(ls $XDIRREAL); do
  451. id $user >/dev/null 2>&1 || rm -rf $XDIRREAL/$user
  452. done
  453. fi
  454. if [ "$apache_reload_needed" ]; then
  455. apache_do_reload=""
  456. case runmode in
  457. interactive)
  458. echo -n "Apache config changed. Reload Apache now (Y/n)? "
  459. read apache_reload
  460. case $apache_reload in
  461. y|Y|"")
  462. apache_do_reload="1"
  463. ;;
  464. esac
  465. ;;
  466. force)
  467. apache_do_reload="1"
  468. ;;
  469. *)
  470. echo "Apache config has changed. Remember to reload Apache...!"
  471. ;;
  472. esac
  473. if "$apache_do_reload" ]; then
  474. /etc/init.d/apache force-reload
  475. fi
  476. fi