summaryrefslogtreecommitdiff
blob: 6a3c60c3783721a9240ee68ba3f4819d9977f513 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/sh
# Copyright 2003 Mike Markley <mike@markley.org>
# This script is free for any purpose whatseoever so long as the above
# copyright notice remains in place.
#
# Modified for Gentoo: Benjamin Smee
# Date: Fri Sep 10 11:36:04 BST 2004

# This is the email address reports get mailed to
MAILTO=root@localhost

# Defaults
#MAILTO="${MAILTO:-root}"

# Options
opt_f=0
opt_y=0
opt_c=0
opt_b=0
config="/etc/aide/aide.conf"

aideinit_usage() {
	echo "Usage: $0 [options] -- [aide options]"
	echo "  -y|--yes         Overwrite output file"
	echo "  -f|--force       Force overwrite of database"
	echo "  -c|--config      Specify alternate config file"
	echo "  -o|--output      Specify alternate output file"
	echo "  -d|--database    Specify alternate database file"
	echo "  -b|--background  Run in the background"
}

while [ -n "$1" ]; do
	case "$1" in
	    -h|--help)
		aideinit_usage
		exit 0
		;;
	    -f|--force)
		opt_f=1
		shift
		;;
	    -y|--yes)
		opt_y=1
		shift
		;;
	    -b|--background)
		opt_b=1
		shift
		;;
	    -o|--output)
		shift
		[ -z "$1" ] && aideinit_usage && exit 1
		outfile=$1
		shift
		;;
	    -d|--database)
		shift
		[ -z "$1" ] && aideinit_usage && exit 1
		dbfile=$1
		shift
		;;
	    -c|--config)
		opt_c=1
		shift
		[ -z "$1" ] && aideinit_usage && exit 1
		config=$1
		shift
		;;
	    --)
	    	shift
		break 2
		;;
	    *)
		echo "Unknown option $1 (use -- to delimit aideinit and aide options)"
		exit
		;;
	esac
done

if [ ! -f "$config" ]; then
	echo "$0: $config: file not found"
	exit 1
fi

if [ -z "$outfile" ]; then
	outfile=`egrep "database_out=file:" $config | cut -d: -f2`
	[ -z "$outfile" ] && outfile="/var/lib/aide/aide.db.new"
fi
if [ -z "$dbfile" ]; then
	dbfile=`egrep "database=file:" $config | cut -d: -f2`
	[ -z "$dbfile" ] && dbfile="/var/lib/aide/aide.db"
fi

if [ -f $outfile ]; then
	if [ $opt_y -eq 0 ]; then
		echo -n "Overwrite existing $outfile [Yn]? "
		read yn
		case "$yn" in
		    [Nn]*)
			exit 0
			;;
		esac
	fi
fi

extraflags=""

if [ $opt_c -eq 1 ]; then
	extraflags="$extraflags --config $config"
fi

if [ $opt_b -eq 1 ]; then
	(aide --init $extraflags $@ >/var/log/aide/aideinit.log 2>/var/log/aide/aideinit.errors
	if [ -f "$dbfile" -a $opt_f -eq 0 ]; then
		echo "$dbfile exists and -f was not specified" >> /var/log/aide/aideinit.errors
	fi
	lines=`wc -l /var/log/aide/aideinit.errors | awk '{ print $1 }'`
	if [ "$lines" -gt 0 ]; then
		(echo "AIDE init errors:"; cat /var/log/aide/aideinit.errors) | /bin/mail -s "AIDE initialization problem" $MAILTO
	else
		cp -f $outfile $dbfile
	fi) &
	exit 0
fi

echo "Running aide --init..."
aide --init $extraflags $@

return=$?
if [ $return -ne 0 ]; then
	echo "Something didn't quite go right; see $outfile for details" >&2
	exit $return
fi

if [ -f "$dbfile" -a $opt_f -eq 0 ]; then
	echo -n "Overwrite $dbfile [yN]? "
	read yn
	case "$yn" in
	    [yY]*)
		cp -f $outfile $dbfile
		;;
	esac
else
	cp -f $outfile $dbfile
fi