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