aboutsummaryrefslogtreecommitdiff
path: root/libexec/rc/rc.d/cleartmp
diff options
context:
space:
mode:
Diffstat (limited to 'libexec/rc/rc.d/cleartmp')
-rwxr-xr-xlibexec/rc/rc.d/cleartmp64
1 files changed, 64 insertions, 0 deletions
diff --git a/libexec/rc/rc.d/cleartmp b/libexec/rc/rc.d/cleartmp
new file mode 100755
index 000000000000..c4dfb5367dcb
--- /dev/null
+++ b/libexec/rc/rc.d/cleartmp
@@ -0,0 +1,64 @@
+#!/bin/sh
+#
+#
+
+# PROVIDE: cleartmp
+# REQUIRE: mountcritremote tmp
+# BEFORE: DAEMON
+
+. /etc/rc.subr
+
+name="cleartmp"
+desc="Purge /tmp directory"
+# Disguise rcvar for the start method to run irrespective of its setting.
+rcvar1="clear_tmp_enable"
+start_cmd="${name}_start"
+stop_cmd=":"
+
+cleartmp_start()
+{
+ # Make /tmp location variable for easier debugging.
+ local tmp="/tmp"
+
+ # X related directories to create in /tmp.
+ local x11_socket_dirs="${tmp}/.X11-unix ${tmp}/.XIM-unix \
+ ${tmp}/.ICE-unix ${tmp}/.font-unix"
+
+ if checkyesno ${rcvar1}; then
+ startmsg "Clearing ${tmp}."
+
+ # This is not needed for mfs, but doesn't hurt anything.
+ # Things to note:
+ # + The dot in ${tmp}/. is important.
+ # + Put -prune before -exec so find never descends
+ # into a directory that was already passed to rm -rf.
+ # + "--" in rm arguments isn't strictly necessary, but
+ # it can prevent foot-shooting in future.
+ # + /tmp/lost+found is preserved, but its contents are removed.
+ # + lost+found and quota.* in subdirectories are removed.
+ # + .sujournal and .snap are preserved.
+ find -x ${tmp}/. ! -name . \
+ ! \( -name .sujournal -type f -user root \) \
+ ! \( -name .snap -type d -user root \) \
+ ! \( -name lost+found -type d -user root \) \
+ ! \( \( -name quota.user -or -name quota.group \) \
+ -type f -user root \) \
+ -prune -exec rm -rf -- {} +
+ elif checkyesno clear_tmp_X; then
+ # Remove X lock files, since they will prevent you from
+ # restarting X. Remove other X related directories.
+ startmsg "Clearing ${tmp} (X related)."
+ rm -rf ${tmp}/.X[0-9]-lock ${x11_socket_dirs}
+ fi
+ if checkyesno clear_tmp_X; then
+ # Create X related directories with proper permissions.
+ mkdir -m 1777 ${x11_socket_dirs}
+ fi
+}
+
+load_rc_config $name
+
+# doesn't make sense to run in a svcj
+cleartmp_svcj="NO"
+
+run_rc_command "$1"