CVE-2016-0771: tests/dns: Remove dependencies on env variables
[Samba.git] / ctdb / config / events.d / 00.ctdb
blob3bc20d7f78c850d345ad79c4f1a61243f24bfd4d
1 #!/bin/sh
3 # Event script for ctdb-specific setup and other things that don't fit
4 # elsewhere.
6 [ -n "$CTDB_BASE" ] || \
7 export CTDB_BASE=$(cd -P $(dirname "$0") ; dirname "$PWD")
9 . $CTDB_BASE/functions
10 loadconfig
12 ctdb_setup_service_state_dir "ctdb"
14 ############################################################
16 select_tdb_checker ()
18 # Find the best TDB consistency check available.
19 use_tdb_tool_check=false
20 type tdbtool >/dev/null 2>&1 && found_tdbtool=true
21 type tdbdump >/dev/null 2>&1 && found_tdbdump=true
23 if $found_tdbtool && echo "help" | tdbtool | grep -q check ; then
24 use_tdb_tool_check=true
25 elif $found_tdbtool && $found_tdbdump ; then
26 cat <<EOF
27 WARNING: The installed 'tdbtool' does not offer the 'check' subcommand.
28 Using 'tdbdump' for database checks.
29 Consider updating 'tdbtool' for better checks!
30 EOF
31 elif $found_tdbdump ; then
32 cat <<EOF
33 WARNING: 'tdbtool' is not available.
34 Using 'tdbdump' to check the databases.
35 Consider installing a recent 'tdbtool' for better checks!
36 EOF
37 else
38 cat <<EOF
39 WARNING: Cannot check databases since neither
40 'tdbdump' nor 'tdbtool check' is available.
41 Consider installing tdbtool or at least tdbdump!
42 EOF
43 return 1
47 check_tdb ()
49 _db="$1"
51 if $use_tdb_tool_check ; then
52 # tdbtool always exits with 0 :-(
53 if timeout 10 tdbtool "$_db" check 2>/dev/null |
54 grep -q "Database integrity is OK" ; then
55 return 0
56 else
57 return 1
59 else
60 timeout 10 tdbdump "$_db" >/dev/null 2>/dev/null
61 return $?
65 check_persistent_databases ()
67 _dir="${CTDB_DBDIR_PERSISTENT:-${CTDB_DBDIR:-${CTDB_VARDIR}}/persistent}"
68 [ -d "$_dir" ] || return 0
70 [ "${CTDB_MAX_PERSISTENT_CHECK_ERRORS:-0}" = "0" ] || return 0
72 for _db in $(ls "$_dir/"*.tdb.*[0-9] 2>/dev/null) ; do
73 check_tdb $_db || {
74 echo "Persistent database $_db is corrupted! CTDB will not start."
75 return 1
77 done
80 check_non_persistent_databases ()
82 _dir="${CTDB_DBDIR:-${CTDB_VARDIR}}"
83 [ -d "$_dir" ] || return 0
85 for _db in $(ls "${_dir}/"*.tdb.*[0-9] 2>/dev/null) ; do
86 check_tdb $_db || {
87 _backup="${_db}.$(date +'%Y%m%d.%H%M%S.%N').corrupt"
88 cat <<EOF
89 WARNING: database ${_db} is corrupted.
90 Moving to backup ${_backup} for later analysis.
91 EOF
92 mv "$_db" "$_backup"
94 # Now remove excess backups
95 ls -td "${_db}."*".corrupt" |
96 tail -n +$((${CTDB_MAX_CORRUPT_DB_BACKUPS:-10} + 1)) |
97 xargs rm -f
100 done
103 set_ctdb_variables ()
105 # set any tunables from the config file
106 set | sed -n '/^CTDB_SET_/s/=.*//p' |
107 while read v; do
108 varname="${v#CTDB_SET_}"
109 value=$(eval echo "\$$v")
110 if ctdb setvar $varname $value ; then
111 echo "Set $varname to $value"
112 else
113 echo "Invalid configuration: CTDB_SET_${varname}=${value}"
114 return 1
116 done
119 ############################################################
121 ctdb_check_args "$@"
123 case "$1" in
124 init)
125 # make sure we have a blank state directory for the scripts to work with
126 rm -rf "$CTDB_SCRIPT_VARDIR"
127 mkdir -p "$CTDB_SCRIPT_VARDIR" || \
128 die "mkdir -p ${CTDB_SCRIPT_VARDIR} - failed - ${ret}" $?
130 if select_tdb_checker ; then
131 check_persistent_databases || exit $?
132 check_non_persistent_databases
136 setup)
137 # Set any tunables from the config file
138 set_ctdb_variables || \
139 die "Aborting setup due to invalid configuration - fix typos, remove unknown tunables"
142 startup)
143 ctdb attach ctdb.tdb persistent
147 ctdb_standard_event_handler "$@"
149 esac
151 # all OK
152 exit 0