#!@PREFIX@/sbin/runscript # Copyright (c) 2007-2009 Roy Marples # All rights reserved. Released under the 2-clause BSD license. depend() { need localmount before logger after clock sysctl keyword -prefix } dir_writeable() { mkdir "$1"/.test.$$ 2>/dev/null && rmdir "$1"/.test.$$ } : ${wipe_tmp:=${WIPE_TMP:-yes}} cleanup_tmp_dir() { local dir="$1" if ! [ -d "$dir" ]; then mkdir -p "$dir" || return $? fi dir_writeable "$dir" || return 1 chmod a+rwt "$dir" cd "$dir" if yesno $wipe_tmp; then ebegin "Wiping $dir directory" local startopts="-x . -depth" [ "$RC_UNAME" = Linux ] && startopts=". -xdev -depth" # Faster than find rm -rf -- [^ajlq\.]* # pam_mktemp creates a .private directory within which # each user gets a private directory with immutable # bit set; remove the immutable bit before trying to # remove it. [ -d /tmp/.private ] && chattr -R -a /tmp/.private 2> /dev/null find $startopts ! -name . \ ! -path "./lost+found" \ ! -path "./lost+found/*" \ ! -path "./quota.user" \ ! -path "./quota.user/*" \ ! -path "./aquota.user" \ ! -path "./aquota.user/*" \ ! -path "./quota.group" \ ! -path "./quota.group/*" \ ! -path "./aquota.group" \ ! -path "./aquota.group/*" \ ! -path "./journal" \ ! -path "./journal/*" \ -exec rm -rf {} \; eend 0 else ebegin "Cleaning $dir directory" rm -rf -- "$dir"/.X*-lock "$dir"/esrv* "$dir"/kio* \ "$dir"/jpsock.* "$dir"/.fam* "$dir"/.esd* \ "$dir"/orbit-* "$dir"/ssh-* "$dir"/ksocket-* \ "$dir"/.*-unix eend 0 fi } mkutmp() { : >"$1" # Not all systems have the utmp group chgrp utmp "$1" 2>/dev/null chmod 0664 "$1" } start() { # Remove any added console dirs rm -rf "$RC_LIBEXECDIR"/console local logw=false runw=false extra= # Ensure that our basic dirs exist [ "$RC_UNAME" = Linux ] && extra=/var/lib/misc # Satisfy Linux FHS for x in /var/log /var/run /tmp $extra; do if ! [ -d $x ]; then if ! mkdir -p $x; then eend 1 "failed to create needed directory $x" return 1 fi fi done if dir_writeable /var/run; then ebegin "Creating user login records" local xtra= [ "$RC_UNAME" = NetBSD ] && xtra=x for x in "" $xtra; do mkutmp /var/run/utmp$x done [ -e /var/log/wtmp ] || mkutmp /var/log/wtmp eend 0 ebegin "Cleaning /var/run" for x in $(find /var/run ! -type d ! -name utmp \ ! -name random-seed ! -name dev.db \ ! -name ld-elf.so.hints ! -name ld.so.hints); do # Clean stale sockets if [ -S "$x" ]; then if type fuser >/dev/null 2>&1; then fuser "$x" >/dev/null 2>&1 || rm -- "$x" else rm -- "$x" fi fi [ ! -f "$x" ] && continue # Do not remove pidfiles of already running daemons case "$x" in *.pid) start-stop-daemon --test --quiet \ --stop --pidfile "$x" && continue ;; esac rm -f -- "$x" done eend 0 fi # Clean up /tmp directories local tmp= for tmp in ${clean_tmp_dirs:-${wipe_tmp_dirs-/tmp}}; do cleanup_tmp_dir "$tmp" done if dir_writeable /tmp; then # Make sure our X11 stuff have the correct permissions # Omit the chown as bootmisc is run before network is up # and users may be using lame LDAP auth #139411 rm -rf /tmp/.ICE-unix /tmp/.X11-unix mkdir -p /tmp/.ICE-unix /tmp/.X11-unix chmod 1777 /tmp/.ICE-unix /tmp/.X11-unix if [ -x /sbin/restorecon ]; then restorecon /tmp/.ICE-unix /tmp/.X11-unix fi fi if $logw || dir_writeable /var/log; then # Create an 'after-boot' dmesg log if [ "$RC_SYS" != VSERVER -a "$RC_SYS" != OPENVZ ]; then dmesg > /var/log/dmesg chmod 640 /var/log/dmesg fi fi [ -w /etc/nologin ] && rm -f /etc/nologin return 0 } stop() { # Write a halt record if we're shutting down if [ "$RC_RUNLEVEL" = shutdown ]; then [ "$RC_UNAME" = Linux ] && halt -w if [ "$RC_SYS" = OPENVZ ]; then yesno $RC_REBOOT && printf "" >/reboot fi fi return 0 }