xref: /freebsd/libexec/rc/rc.d/cleartmp (revision 349cc55c9796c4596a5b9904cd3281af295f878f)
1#!/bin/sh
2#
3# $FreeBSD$
4#
5
6# PROVIDE: cleartmp
7# REQUIRE: mountcritremote tmp
8# BEFORE: DAEMON
9
10. /etc/rc.subr
11
12name="cleartmp"
13desc="Purge /tmp directory"
14# Disguise rcvar for the start method to run irrespective of its setting.
15rcvar1="clear_tmp_enable"
16start_cmd="${name}_start"
17stop_cmd=":"
18
19cleartmp_start()
20{
21	# Make /tmp location variable for easier debugging.
22	local tmp="/tmp"
23
24	# X related directories to create in /tmp.
25	local x11_socket_dirs="${tmp}/.X11-unix ${tmp}/.XIM-unix \
26			       ${tmp}/.ICE-unix ${tmp}/.font-unix"
27
28	if checkyesno ${rcvar1}; then
29		startmsg "Clearing ${tmp}."
30
31		# This is not needed for mfs, but doesn't hurt anything.
32		# Things to note:
33		# + The dot in ${tmp}/. is important.
34		# + Put -prune before -exec so find never descends
35		#   into a directory that was already passed to rm -rf.
36		# + "--" in rm arguments isn't strictly necessary, but
37		#   it can prevent foot-shooting in future.
38		# + /tmp/lost+found is preserved, but its contents are removed.
39		# + lost+found and quota.* in subdirectories are removed.
40		# + .sujournal and .snap are preserved.
41		find -x ${tmp}/. ! -name . \
42		    ! \( -name .sujournal -type f -user root \) \
43		    ! \( -name .snap -type d -user root \) \
44		    ! \( -name lost+found -type d -user root \) \
45		    ! \( \( -name quota.user -or -name quota.group \) \
46			-type f -user root \) \
47		    -prune -exec rm -rf -- {} +
48	elif checkyesno clear_tmp_X; then
49		# Remove X lock files, since they will prevent you from
50		# restarting X.  Remove other X related directories.
51		startmsg "Clearing ${tmp} (X related)."
52		rm -rf ${tmp}/.X[0-9]-lock ${x11_socket_dirs}
53	fi
54	if checkyesno clear_tmp_X; then
55		# Create X related directories with proper permissions.
56		mkdir -m 1777 ${x11_socket_dirs}
57	fi
58}
59
60load_rc_config $name
61run_rc_command "$1"
62