X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=functions.sh;h=84af78032ba88e54cec649e2012d70a9cef1adea;hb=dd60228fb054bcc7ad1f222d1de6c7f351c00069;hp=43909786eeff605ffda737f96eaf22950cc24fc8;hpb=a650589630a1059f6184e8a632f47fadc5fab4d1;p=carnet-tools-cn.git diff --git a/functions.sh b/functions.sh index 4390978..84af780 100644 --- a/functions.sh +++ b/functions.sh @@ -88,9 +88,19 @@ cp_get_ifdefault() { RET="" case $1 in - dev) RET=`route -n | awk '/^0.0.0.0/{print $8}'` ;; - addr) RET=`route -n | awk '/^0.0.0.0/{print $2}'` ;; - *) echo "cp_get_ifdefault: Argument required (dev or addr)" >&2 ;; + dev) + RET=`route -n | awk 'BEGIN {m = 2^32} + /^0\.0\.0\.0[ \t]/ {if ($5 < m) {r = $8; m = $5}} + END {print r}'` + ;; + addr) + RET=`route -n | awk 'BEGIN {m = 2^32} + /^0\.0\.0\.0[ \t]/ {if ($5 < m) {r = $2; m = $5}} + END {print r}'` + ;; + *) + echo "cp_get_ifdefault: Argument required (dev or addr)" >&2 + ;; esac [ -z "$RET" -a "$1" ] && echo "cp_get_ifdefault: No default route" >&2 @@ -159,11 +169,50 @@ cp_check_and_backup() { cp_backup_conffile() { [ "$CP_SCRIPT_DEBUG" ] && set -vx - local file_bak check did + local dir ext file_bak check did opt_p opt_d - if [ "x$1" = "x-r" ]; then - check=1 - shift + dir=/var/backups + ext=.bak + + while echo "x$1" |grep -q '^x-'; do + case "$1" in + -r) + shift + check=1 + ;; + -p) + shift + opt_p=1 + ;; + -d) + shift + opt_d=1 + # Is argument to -d full path or relative? + if echo "$1" |grep -q '^/'; then + dir="$1" + else + dir="$dir/$1" + fi + shift + ;; + -n) + shift + ext= + ;; + esac + done + if [ "$opt_d" ]; then + if [ ! -e "$dir" -a "$opt_p" ]; then + mkdir "$dir" + fi + if [ $? -ne 0 ]; then + echo "cp_backup_conffile: Error creating backup directory $dir" 1>&2 + return 3 + fi + fi + if [ ! -d "$dir" ]; then + echo "cp_backup_conffile: Invalid backup directory $dir" 1>&2 + return 3 fi if [ -z "$1" ]; then return 1 @@ -173,9 +222,9 @@ cp_backup_conffile() { return 2 fi if [ -z "$2" ]; then - file_bak="/var/backups/`basename $1`.bak" + file_bak="$dir/`basename $1`$ext" else - file_bak="/var/backups/`basename $2`.bak" + file_bak="$dir/`basename $2`$ext" fi if [ ! -f "$file_bak" ]; then