xref: /freebsd/libexec/rc/rc.d/accounting (revision e17f5b1d)
1#!/bin/sh
2#
3# $FreeBSD$
4#
5
6# PROVIDE: accounting
7# REQUIRE: mountcritremote
8# BEFORE: DAEMON
9# KEYWORD: nojail
10
11. /etc/rc.subr
12
13name="accounting"
14rcvar="accounting_enable"
15accounting_command="/usr/sbin/accton"
16accounting_file="/var/account/acct"
17
18extra_commands="rotate_log"
19
20start_cmd="accounting_start"
21stop_cmd="accounting_stop"
22rotate_log_cmd="accounting_rotate_log"
23
24create_accounting_file()
25{
26	install -o root -g wheel -m 0640 /dev/null "${accounting_file}"
27}
28
29accounting_start()
30{
31	local _dir
32
33	_dir="${accounting_file%/*}"
34	if [ ! -d "$_dir" ]; then
35		if ! mkdir -p -m 0750 "$_dir"; then
36			err 1 "Could not create $_dir."
37		fi
38	fi
39
40	if [ ! -e "$accounting_file" ]; then
41		echo -n "Creating accounting file ${accounting_file}"
42		create_accounting_file
43		echo '.'
44	fi
45
46	echo "Turning on accounting."
47	${accounting_command} ${accounting_file}
48}
49
50accounting_stop()
51{
52	echo "Turning off accounting."
53	${accounting_command}
54}
55
56accounting_rotate_log()
57{
58	# Note that this function must handle being called as "onerotate_log"
59	# (by the periodic scripts) when accounting is disabled, and handle
60	# being called multiple times (by an admin making mistakes) without
61	# anything having actually rotated the old .0 file out of the way.
62
63	if [ -e "${accounting_file}.0" ]; then
64		err 1 "Cannot rotate accounting log, ${accounting_file}.0 already exists."
65	fi
66
67	if [ ! -e "${accounting_file}" ]; then
68		err 1 "Cannot rotate accounting log, ${accounting_file} does not exist."
69	fi
70
71	mv ${accounting_file} ${accounting_file}.0
72
73	if checkyesno accounting_enable; then
74		create_accounting_file
75		${accounting_command} "${accounting_file}"
76	fi
77}
78
79load_rc_config $name
80run_rc_command "$1"
81