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