summaryrefslogtreecommitdiff
path: root/user-init
blob: fb2def69cb9542263fbf30848f98608e559bfad2 (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. maildir="$MAILDIR"
  118. if [ -f "$HOME/.procmailrc" ]; then
  119. # Drop simple maildir-enabling procmail file when default
  120. if [ -n "$MAILDIR" ] && [ "`md5sum \"$HOME/.procmailrc\" | awk '{print $1}'`" = "03ea802caaa5ce6f2a9be8d56eaf8ff5" ]; then
  121. rm "$HOME/.procmailrc"
  122. else
  123. chown "$user": "$HOME/.procmailrc"
  124. chmod 0640 "$HOME/.procmailrc"
  125. # Check if this one account exceptionally uses maildir
  126. if [ -z "$maildir" ] && egrep -q '^DEFAULT=\$HOME/Maildir/$' "$HOME/.procmailrc"; then
  127. maildir="yes"
  128. fi
  129. fi
  130. fi
  131. if [ -n "$maildir" ]; then
  132. mkdir -p "$HOME/Maildir/cur" "$HOME/Maildir/new" "$HOME/Maildir/tmp"
  133. chown -R "$user": "$HOME/Maildir"
  134. chmod -R u=rw,go=,u+X "$HOME/Maildir"
  135. else
  136. mkdir -p "$HOME/mail"
  137. if [ -n "$USE_MBOX" ]; then
  138. touch "$HOME/mail/mbox"
  139. elif [ -f "$HOME/mail/mbox" ] && [ ! -s "$HOME/mail/mbox" ]; then
  140. rm -f "$HOME/mail/mbox"
  141. fi
  142. chown -R "$user": "$HOME/mail"
  143. chmod -R u=rw,go=,u+X "$HOME/mail"
  144. if [ -f "$HOME/.mailboxlist" ]; then
  145. chown "$user": "$HOME/.mailboxlist"
  146. chmod 0640 "$HOME/.mailboxlist"
  147. fi
  148. fi
  149. mailspool="/var/spool/mail"
  150. if [ -d "/var/mail" ]; then
  151. mailspool="/var/mail"
  152. fi
  153. if [ -f "$mailspool/$user" ]; then
  154. if [ -n "$maildir" ] && [ ! -s "$mailspool/$user" ]; then
  155. rm "$mailspool/$user"
  156. else
  157. chown "$user":mail "$mailspool/$user"
  158. chmod ug=rw,o= "$mailspool/$user"
  159. fi
  160. fi
  161. if [ -f "$HOME/.forward" ]; then
  162. chown "$user": "$HOME/.forward"
  163. chmod 0640 "$HOME/.forward"
  164. fi
  165. # MySQL handling
  166. if [ -f "$HOME/.my.cnf" ]; then
  167. chown "$user": "$HOME/.my.cnf"
  168. chmod 0600 "$HOME/.my.cnf"
  169. fi
  170. # Mac dir permissions
  171. if [ -d "$HOME/$mac" ]; then
  172. chown -R "$user": "$HOME/$mac"
  173. chmod -R u=rw,g=r,o=,ug+X "$HOME/$mac"
  174. rm -rf "$HOME/$mac/Network Trash Folder"
  175. mkdir "$HOME/$mac/Network Trash Folder"
  176. chown nobody: "$HOME/$mac/Network Trash Folder"
  177. chmod a= "$HOME/$mac/Network Trash Folder"
  178. fi
  179. # PC dir permissions
  180. if [ -d "$HOME/$pc" ]; then
  181. chown -R "$user": "$HOME/$pc"
  182. chmod -R u=rw,g=r,o=,ug+X "$HOME/$pc"
  183. fi
  184. #FIXME: something is wrong with prefixing "x" here...
  185. # Exchange dir permissions
  186. if [ -d "$XDIRREAL/$user" ]; then
  187. chown -R "$user":users "$XDIRREAL/$user"
  188. chmod -R g=r,g+X "$XDIRREAL/$user"
  189. if [ -e "x$HOME/$xchange" ]; then
  190. if [ -L "x$HOME/$xchange" ]; then
  191. ln -sf "$XDIRREAL/$user $HOME/$xchange"
  192. else
  193. echo "ERROR: \"$HOME/$xchange\" exists already. Leaving it as is..."
  194. fi
  195. else
  196. ln -s "$XDIRREAL/$user" "$HOME/$xchange"
  197. fi
  198. fi
  199. # Public dir permissions
  200. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./public\(_.*\)?'`; do
  201. chown -R "$user": "$HOME/$dir"
  202. chmod -R u+rX,go=r,go+X "$HOME/$dir"
  203. if [ -n "$NETATALK" ]; then
  204. rm -rf "$HOME/$dir/Network Trash Folder"
  205. mkdir "$HOME/$dir/Network Trash Folder"
  206. chown nobody: "$HOME/$dir/Network Trash Folder"
  207. chmod a= "$HOME/$dir/Network Trash Folder"
  208. fi
  209. done
  210. # Shared dirs are writable by own primary group
  211. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./shared\(_.*\)?'`; do
  212. chgrp -R "$user" "$HOME/$dir"
  213. chmod -R ug=rw,o=,ug+X,g+s "$HOME/$dir"
  214. if [ -n "$NETATALK" ]; then
  215. rm -rf "$HOME/$dir/Network Trash Folder"
  216. mkdir "$HOME/$dir/Network Trash Folder"
  217. chown nobody: "$HOME/$dir/Network Trash Folder"
  218. chmod a= "$HOME/$dir/Network Trash Folder"
  219. fi
  220. done
  221. # Private dirs are readable by own primary group
  222. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./private\(_.*\)?$'`; do
  223. chown -R "$user": "$HOME/$dir"
  224. chmod -R u+rX,g=r,g+X,o= "$HOME/$dir"
  225. done
  226. # Secret dirs are accessible only by self
  227. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./secret\(_.*\)?$'`; do
  228. chown -R "$user": "$HOME/$dir"
  229. chmod -R u+rX,go= "$HOME/$dir"
  230. done
  231. # Fileshares: <home>/shares.<sharetype>/<rogroup>/<rwgroup>/<sharename>
  232. # <sharetype>: Either mac or win depending on which of netatalk and samba provides r/w access to the shares
  233. # <rwgroup>: Group with write access to the share (usually the default group of the owner)
  234. # <rogroup>: Either rwgroup or secondary group with read-only access to the share
  235. # owner and rwgroup members must be member of both groups
  236. #FIXME: Use the below instead, and replace occurrences of "$thisdir" with "$HOME/$dir".
  237. #for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./shares\..*'`; do
  238. find "$HOME" -mindepth 1 -maxdepth 1 -type d -print | egrep "^$HOME/shares\." | (while read thisdir; do
  239. sharetype="`basename \"$thisdir\" | awk -F. '{print $2}'`"
  240. # Define dir and file exceptions
  241. case "$sharetype" in
  242. mac)
  243. dirs_world_rw_create='.AppleDB'
  244. dirs_group_rw_create='.AppleDesktop/Temporary Items/TheFindByContentFolder'
  245. dirs_group_ro_create='TheVolumeSettingsFolder'
  246. dirs_group_ro_update='.AppleDouble'
  247. files_group_ro_update=':2eDS_Store'
  248. dirs_no_access_purge='Network Trash Folder'
  249. ;;
  250. win)
  251. ;;
  252. *)
  253. continue
  254. ;;
  255. esac
  256. 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"
  257. exception_dirs_create="$dirs_world_rw_create/$dirs_group_rw_create/$dirs_group_ro_create"
  258. chown "$user": "$thisdir"
  259. chmod a=rX "$thisdir"
  260. find "$thisdir" -mindepth 1 -maxdepth 1 -type d -print | (while read thisdir; do
  261. rogroup="`basename \"$thisdir\"`"
  262. chown "$user":"$rogroup" "$thisdir"
  263. chmod ug=rX,o= "$thisdir"
  264. find "$thisdir" -mindepth 1 -maxdepth 1 -type d -print | (while read thisdir; do
  265. rwgroup="`basename \"$thisdir\"`"
  266. chown "$user":"$rwgroup" "$thisdir"
  267. chmod a=rX,g+s "$thisdir"
  268. find "$thisdir" -mindepth 1 -maxdepth 1 -type d -print | (while read thisdir; do
  269. sharename="`basename \"$thisdir\"`"
  270. chown "$user":"$rwgroup" "$thisdir"
  271. chmod u=rw,go=r,a+X,g+s "$thisdir"
  272. ifs="$IFS"
  273. # Set default permissions
  274. find "$thisdir" -mindepth 1 -maxdepth 1 -print | (while read thisdir; do
  275. item="`basename \"$thisdir\"`"
  276. IFS="/"; for exception in $exceptions; do IFS="$ifs";
  277. if [ "$item" = "$exception" ]; then
  278. continue 2
  279. fi
  280. done
  281. chgrp -R "$rwgroup" "$thisdir"
  282. chmod -R ug=rw,o=r,a+X,g+s "$thisdir"
  283. done)
  284. # Handle exception dirs to be created if not existing
  285. IFS="/"; for dir in $exception_dirs_create; do IFS="$ifs";
  286. if [ ! -d "$thisdir/$dir" ]; then
  287. rm -f "$thisdir/$dir"
  288. fi
  289. if [ ! -e "$thisdir/$dir" ]; then
  290. mkdir "$thisdir/$dir"
  291. fi
  292. chown "$user":"$rwgroup" "$thisdir/$dir"
  293. done
  294. IFS="/"; for dir in $dirs_world_rw_create; do IFS="$ifs";
  295. if [ "$rogroup" = "$rwgroup" ]; then
  296. chmod -R ug=rw,o=r,a+X,g+s "$thisdir/$dir"
  297. else
  298. chmod -R a=rw,a+X,g+s "$thisdir/$dir"
  299. fi
  300. done
  301. IFS="/"; for dir in $dirs_group_rw_create; do IFS="$ifs";
  302. chmod -R ug=rw,o=r,a+X,g+s "$thisdir/$dir"
  303. done
  304. IFS="/"; for dir in $dirs_group_ro_create; do IFS="$ifs";
  305. chmod -R u=rw,go=r,a+X,g+s "$thisdir/$dir"
  306. done
  307. # Handle exception dirs to be updated if already there
  308. IFS="/"; for dir in $dirs_group_ro_update; do IFS="$ifs";
  309. if [ -e "$thisdir/$dir" ]; then
  310. chmod u=rw,go=r,a+X,g+s "$thisdir/$dir"
  311. fi
  312. done
  313. # Handle exception files to be updated if already there
  314. IFS="/"; for file in $files_group_ro_update; do IFS="$ifs";
  315. if [ -e "$thisdir/$file" ]; then
  316. chmod u=rw,go=r,g+s "$thisdir/$file"
  317. fi
  318. done
  319. # Handle exception dirs to be purged and recreated
  320. IFS="/"; for dir in $dirs_no_access_purge; do IFS="$ifs";
  321. rm -rf "$thisdir/$dir"
  322. mkdir -m a= "$thisdir/$dir"
  323. chown nobody: "$thisdir/$dir"
  324. done
  325. IFS="$ifs"
  326. done)
  327. done)
  328. done)
  329. done)
  330. # Ftp shares permissions
  331. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex "^\./ftp_$user$"`; do
  332. chgrp -R "$user" "$HOME/$dir"
  333. chmod -R ug=rw,o=r,a+X,g+s "$HOME/$dir"
  334. rm -rf "$HOME/$dir/Network Trash Folder"
  335. mkdir "$HOME/$dir/Network Trash Folder"
  336. chown nobody: "$HOME/$dir/Network Trash Folder"
  337. chmod a= "$HOME/$dir/Network Trash Folder"
  338. done
  339. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex "^\./ftp_${user}_ro$"`; do
  340. chown -R "$user": "$HOME/$dir"
  341. chmod -R u=rw,go=r,a+X "$HOME/$dir"
  342. rm -rf "$HOME/$dir/Network Trash Folder"
  343. mkdir "$HOME/$dir/Network Trash Folder"
  344. chown nobody: "$HOME/$dir/Network Trash Folder"
  345. chmod a= "$HOME/$dir/Network Trash Folder"
  346. done
  347. # Web shares permissions
  348. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./web_.*'`; do
  349. chown -R "$user": "$HOME/$dir"
  350. # chmod -R u=rw,go=r,a+X $webdir
  351. #TODO: Only cgi scripts (.cgi and .pl) should be executable
  352. chmod -R u+rw,go+r,a+X "$HOME/$dir"
  353. # leftover from ancient times with another policy
  354. if [ $NETATALK ]; then
  355. rm -rf "$HOME/$dir/Network Trash Folder"
  356. fi
  357. done
  358. # Web shares permissions
  359. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./websites$'`; do
  360. chown root: "$HOME/$dir"
  361. chmod a=r,u+w,a+X "$HOME/$dir"
  362. done
  363. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./websites/.*'`; do
  364. chown -R "$user": "$HOME/$dir"
  365. # chmod -R u=rw,go=r,a+X $webdir
  366. #TODO: Only cgi scripts (.cgi and .pl) should be executable
  367. chmod -R u+rw,go+r,a+X "$HOME/$dir"
  368. # leftover from ancient times with another policy
  369. if [ $NETATALK ]; then
  370. rm -rf "$HOME/$dir/Network Trash Folder"
  371. fi
  372. done
  373. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./webscripts$'`; do
  374. chown root: "$HOME/$dir"
  375. chmod a=r,u+w,a+X "$HOME/$dir"
  376. done
  377. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./webscripts/.*'`; do
  378. chown -R $user: "$HOME/$dir"
  379. # chmod -R u=rw,go=r,a+X $webdir
  380. #TODO: Only cgi scripts (.cgi and .pl) should be executable
  381. chmod -R u+rw,go+r,a+X "$HOME/$dir"
  382. done
  383. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./webdata$'`; do
  384. chown "$user": "$HOME/$dir"
  385. chmod a=r,u+w,a+X "$HOME/$dir"
  386. done
  387. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./webdata/.*'`; do
  388. chown -R "$user": "$HOME/$dir"
  389. chmod -R u=rw,go=,u+X "$HOME/$dir"
  390. done
  391. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./webshareddata$'`; do
  392. chown "$user": "$HOME/$dir"
  393. chmod a=r,u+w,a+X "$HOME/$dir"
  394. done
  395. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./webshareddata/.*'`; do
  396. chown -R "$user:" "$HOME/$dir"
  397. chmod -R u=rw,go=r,a+X "$HOME/$dir"
  398. done
  399. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./webphpsites$'`; do
  400. chown root: "$HOME/$dir"
  401. chmod u=rw,go=r,a+X "$HOME/$dir"
  402. done
  403. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./webphpsites/.*'`; do
  404. chown -R "$user":www-data "$HOME/$dir"
  405. # chmod -R ug=rw,o=r,a+X $dir
  406. chmod -R ug=rw,o=,ug+X "$HOME/$dir"
  407. done
  408. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./webphpdata$'`; do
  409. chown root: "$HOME/$dir"
  410. chmod a=r,u+w,a+X "$HOME/$dir"
  411. done
  412. for dir in `cd "$HOME" && find . -mindepth 2 -maxdepth 2 -type d -regex '^\./webphpdata/.*'`; do
  413. chown -R "$user":www-data "$HOME/$dir"
  414. chmod -R ug=rw,o=,ug+X "$HOME/$dir"
  415. done
  416. for dir in `cd "$HOME" && find . -mindepth 1 -maxdepth 1 -type d -regex '^\./weblogs$'`; do
  417. chown -R "$user": "$HOME/$dir"
  418. chmod -R u=rw,g=r,o=,ug+X "$HOME/$dir"
  419. done
  420. # Dummy user restrictions
  421. if [ -n "$REALUSERS_GROUPNAME" -a -n "$DUMMYSHAREDIR" -a -n "$DUMMYSHAREOWNER" -a -n "$DUMMYSHARENAME" ]; then
  422. [ -e $DUMMYSHAREDIR/$user ] \
  423. || mkdir $DUMMYSHAREDIR/$user
  424. chown $DUMMYSHAREOWNER: $DUMMYSHAREDIR/$user
  425. chmod u=rw,go=r,a+X $DUMMYSHAREDIR/$user
  426. if [ -e $HOME/$DUMMYSHARENAME ]; then
  427. if [ -L $HOME/$DUMMYSHARENAME ]; then
  428. ln -sf $DUMMYSHAREDIR/$user $HOME/$DUMMYSHARENAME
  429. chown $user: $HOME/$DUMMYSHARENAME
  430. else
  431. echo "WARNING: $HOME/$DUMMYSHAREDIR exists already. Leaving it as is..."
  432. fi
  433. else
  434. ln -s $DUMMYSHAREDIR/$user $HOME/$DUMMYSHARENAME
  435. chown $user: $HOME/$DUMMYSHARENAME
  436. fi
  437. if [ -n "$DUMMYAPACHECFG" -a -n "$DUMMYAPACHESHAREDIR" ]; then
  438. if [ -f /etc/apache/include.d/$DUMMYAPACHECFG -a -x /etc/init.d/apache ]; then
  439. if [ -e /etc/apache/include.d/$DUMMYAPACHECFG-$user ]; then
  440. echo "/etc/apache/include.d/$DUMMYAPACHECFG-$user exists already. Ignoring..."
  441. else
  442. echo "# Created automatically by adduser.local
  443. <Location /$DUMMYAPACHESHAREDIR/$user>
  444. <Limit GET POST>
  445. require user $user
  446. </Limit>
  447. </Location>" \
  448. > /etc/apache/include.d/$DUMMYAPACHECFG-$user
  449. apache_reload_needed="1"
  450. fi
  451. fi
  452. fi
  453. fi
  454. echo "."
  455. done
  456. if [ $XCHANGE ]; then
  457. for USER in $(ls $XDIRREAL); do
  458. id $user >/dev/null 2>&1 || rm -rf $XDIRREAL/$user
  459. done
  460. fi
  461. if [ "$apache_reload_needed" ]; then
  462. apache_do_reload=""
  463. case runmode in
  464. interactive)
  465. echo -n "Apache config changed. Reload Apache now (Y/n)? "
  466. read apache_reload
  467. case $apache_reload in
  468. y|Y|"")
  469. apache_do_reload="1"
  470. ;;
  471. esac
  472. ;;
  473. force)
  474. apache_do_reload="1"
  475. ;;
  476. *)
  477. echo "Apache config has changed. Remember to reload Apache...!"
  478. ;;
  479. esac
  480. if "$apache_do_reload" ]; then
  481. /etc/init.d/apache force-reload
  482. fi
  483. fi