178344Sobrien#!/bin/sh
278344Sobrien#
398184Sgordon# $FreeBSD$
478344Sobrien#
578344Sobrien
678344Sobrien# PROVIDE: cleartmp
7127345Sbrooks# REQUIRE: mountcritremote tmp
898184Sgordon# BEFORE: DAEMON
978344Sobrien
1078344Sobrien. /etc/rc.subr
1178344Sobrien
1278344Sobrienname="cleartmp"
13163427Syar# Disguise rcvar for the start method to run irrespective of its setting.
14230099Sdougbrcvar1="clear_tmp_enable"
15153537Sdougbstart_cmd="${name}_start"
16163427Syarstop_cmd=":"
1778344Sobrien
18163427Syarcleartmp_start()
1978344Sobrien{
20163427Syar	# Make /tmp location variable for easier debugging.
21163427Syar	local tmp="/tmp"
22153537Sdougb
23163427Syar	# X related directories to create in /tmp.
24163427Syar	local x11_socket_dirs="${tmp}/.X11-unix ${tmp}/.XIM-unix \
25163427Syar			       ${tmp}/.ICE-unix ${tmp}/.font-unix"
26153537Sdougb
27163427Syar	if checkyesno ${rcvar1}; then
28197947Sdougb		check_startmsgs && echo "Clearing ${tmp}."
29153537Sdougb
30163427Syar		# This is not needed for mfs, but doesn't hurt anything.
31163427Syar		# Things to note:
32163427Syar		# + The dot in ${tmp}/. is important.
33163427Syar		# + Put -prune before -exec so find never descends
34163427Syar		#   into a directory that was already passed to rm -rf.
35163427Syar		# + "--" in rm arguments isn't strictly necessary, but
36163427Syar		#   it can prevent foot-shooting in future.
37163427Syar		# + /tmp/lost+found is preserved, but its contents are removed.
38163427Syar		# + lost+found and quota.* in subdirectories are removed.
39212222Sdaichi		# + .sujournal and .snap are preserved.
40163427Syar		find -x ${tmp}/. ! -name . \
41212222Sdaichi		    ! \( -name .sujournal -type f -user root \) \
42212222Sdaichi		    ! \( -name .snap -type d -user root \) \
43163427Syar		    ! \( -name lost+found -type d -user root \) \
44163427Syar		    ! \( \( -name quota.user -or -name quota.group \) \
45163427Syar			-type f -user root \) \
46163427Syar		    -prune -exec rm -rf -- {} +
47163427Syar	elif checkyesno clear_tmp_X; then
48163427Syar		# Remove X lock files, since they will prevent you from
49163427Syar		# restarting X.  Remove other X related directories.
50197947Sdougb		check_startmsgs && echo "Clearing ${tmp} (X related)."
51163427Syar		rm -rf ${tmp}/.X[0-9]-lock ${x11_socket_dirs}
52163427Syar	fi
53163427Syar	if checkyesno clear_tmp_X; then
54163427Syar		# Create X related directories with proper permissions.
55163427Syar		mkdir -m 1777 ${x11_socket_dirs}
56163427Syar	fi
5778344Sobrien}
5878344Sobrien
5978344Sobrienload_rc_config $name
6078344Sobrienrun_rc_command "$1"
61