..
[matthijs/upstream/backupninja.git] / backupninja
index ce85ba46d10ca25d3a95e2aca50ab467f8512d95..a105a5bf3eef7cc06b2d0d141828d03d1bcf73fa 100755 (executable)
@@ -143,7 +143,6 @@ function getconf() {
 
        # replace * with %, so that it is not globbed.
        ret="${ret//\\*/__star__}"
-       ret="${ret//\*/__star__}"
 
        # this is weird, but single quotes are needed to 
        # allow for returned values with spaces. $ret is still expanded
@@ -160,9 +159,11 @@ function check_perms() {
        local perms=`ls -ld $file`
        perms=${perms:4:6}
        if [ "$perms" != "------" ]; then
+               echo "Configuration files must not be group or world readable! Dying on file $file"
                fatal "Configuration files must not be group or world readable! Dying on file $file"
        fi
        if [ `ls -ld $file | awk '{print $3}'` != "root" ]; then
+               echo "Configuration files must be owned by root! Dying on file $file"
                fatal "Configuration files must be owned by root! Dying on file $file"
        fi
 }
@@ -200,9 +201,9 @@ function isnow() {
        whendayofweek=$1; at=$2; whentime=$3;
        whenday=`toint "$whendayofweek"`
        whendayofweek=`tolower "$whendayofweek"`
-       whentime=`echo "$whentime" | sed 's/:[0-9][0-9]$//'`
+       whentime=`echo "$whentime" | sed 's/:[0-9][0-9]$//' | sed -r 's/^([0-9])$/0\1/'`
 
-       if [ "$whendayofweek" == "everyday" ]; then
+       if [ "$whendayofweek" == "everyday" -o "$whendayofweek" == "daily" ]; then
                whendayofweek=$nowdayofweek
        fi
 
@@ -268,6 +269,8 @@ function process_action() {
        getconf when "$defaultwhen"
        if [ "$processnow" == 1 ]; then
                info "running $file because of --now"
+       elif [ "$when" == "hourly" ]; then
+               debug "running $file because 'when = hourly'"
        else
                IFS=$'\t\n'
                for w in $when; do
@@ -318,10 +321,12 @@ function process_action() {
        elif [ $_warnings != 0 ]; then
                msg "*warning* -- $file"
                errormsg="$errormsg\n== warnings from $file ==\n\n$ret\n"
-       elif [ $retcode == 0 ]; then
-               msg "success -- $file"
        else
-               msg "unknown -- $file"
+               msg "success -- $file"
+#      elif [ $retcode == 0 ]; then
+#              msg "success -- $file"
+#      else
+#              msg "unknown -- $file"
        fi
 
        let "fatals += _fatals"
@@ -348,6 +353,7 @@ while [ $# -ge 1 ]; do
                        if [ -f $2 ]; then
                                conffile=$2
                        else
+                               echo "-f|--conffile option must be followed by an existing filename"
                                fatal "-f|--conffile option must be followed by an existing filename"
                                usage
                        fi
@@ -360,6 +366,7 @@ while [ $# -ge 1 ]; do
                                singlerun=$2
                                processnow=1
                        else
+                               echo "--run option must be fallowed by a backupninja action file"
                                fatal "--run option must be fallowed by a backupninja action file"
                                usage
                        fi
@@ -367,6 +374,7 @@ while [ $# -ge 1 ]; do
                        ;;
                *)
                        debug=1
+                       echo "Unknown option $1"
                        fatal "Unknown option $1"
                        usage
                        exit
@@ -382,10 +390,22 @@ done
 ## Load and confirm basic configuration values
 
 # bootstrap
-[ -r "$conffile" ] || fatal "Configuration file $conffile not found."
+if [ ! -r "$conffile" ]; then
+       echo "Configuration file $conffile not found." 
+       fatal "Configuration file $conffile not found."
+fi
+
 scriptdir=`grep scriptdirectory $conffile | awk '{print $3}'`
-[ -n "$scriptdir" ] || fatal "Cound not find entry 'scriptdirectory' in $conffile"
-[ -d "$scriptdir" ] || fatal "Script directory $scriptdir not found."
+if [ ! -n "$scriptdir" ]; then
+       echo "Cound not find entry 'scriptdirectory' in $conffile" 
+       fatal "Cound not find entry 'scriptdirectory' in $conffile"
+fi
+
+if [ ! -d "$scriptdir" ]; then
+       echo "Script directory $scriptdir not found." 
+       fatal "Script directory $scriptdir not found."
+fi
+
 setfile $conffile
 
 # get global config options (second param is the default)
@@ -399,20 +419,35 @@ defaultwhen=$when
 getconf logfile /var/log/backupninja.log
 getconf usecolors "yes"
 getconf SLAPCAT /usr/sbin/slapcat
+getconf LDAPSEARCH /usr/bin/ldapsearch
 getconf RDIFFBACKUP /usr/bin/rdiff-backup
 getconf MYSQL /usr/bin/mysql
 getconf MYSQLHOTCOPY /usr/bin/mysqlhotcopy
 getconf MYSQLDUMP /usr/bin/mysqldump
 getconf GZIP /bin/gzip
 getconf RSYNC /usr/bin/rsync
+getconf vservers no
+getconf VSERVERINFO /usr/sbin/vserver-info
+getconf VSERVER /usr/sbin/vserver
+getconf VROOTDIR `$VSERVERINFO info SYSINFO |grep vserver-Rootdir | awk '{print $2}'`
+
+if [ ! -d "$configdirectory" ]; then
+       echo "Configuration directory '$configdirectory' not found."
+       fatal "Configuration directory '$configdirectory' not found."
+fi
 
-[ -d "$configdirectory" ] || fatal "Configuration directory '$configdirectory' not found."
+[ -f "$logfile" ] || touch $logfile
 
 if [ "$UID" != "0" ]; then
        echo "$0 can only be run as root"
        exit 1
 fi
 
+if [ "$VSERVERS" = "yes" -a ! -d $VROOTDIR ]; then
+        echo "vservers option set in config, but $VROOTDIR is not a directory!"
+       fatal "vservers option set in config, but $VROOTDIR is not a directory!"
+fi
+
 ## Process each configuration file
 
 # by default, don't make files which are world or group readable.
@@ -428,7 +463,7 @@ errormsg=""
 if [ "$singlerun" ]; then
        files=$singlerun
 else
-       files=`find $configdirectory -mindepth 1 `
+       files=`find $configdirectory -mindepth 1 | sort -n`
 fi
 
 for file in $files; do