X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=functions.sh;h=2ab04ff124f4e450a84492b2c72d6b59d7f43861;hb=407cf3f5ae6558ce23844285cd35d65cfbc22012;hp=0813756bdba0af4984b923a141c4644b87428852;hpb=6747fddc8ece9e748a8624cb55828465bdb3ba1c;p=carnet-tools-cn.git diff --git a/functions.sh b/functions.sh index 0813756..2ab04ff 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,7 +169,7 @@ cp_check_and_backup() { cp_backup_conffile() { [ "$CP_SCRIPT_DEBUG" ] && set -vx - local dir ext file_bak check did + local dir ext file_bak check did opt_p opt_d dir=/var/backups ext=.bak @@ -170,25 +180,40 @@ cp_backup_conffile() { shift check=1 ;; + -p) + shift + opt_p=1 + ;; -d) shift - # is argument to -d full path or relative? + 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 - if [ ! -d "$dir" ]; then - echo "cp_backup_conffile: Invalid backup directory $dir" 1>&2 - return 3 - fi ;; -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 fi @@ -455,3 +480,41 @@ cp_get_ldap_realm() { CP_ECHO_RETURN="$echo_return" } +_cp_customize() { + [ "$CP_SCRIPT_DEBUG" ] && set -vx + # < input functions > output_functions + # new-prefix list-of-functions + perl -e ' + $prefix = shift; %keep = (); $output = ""; + $keep{$_} = 1 for @ARGV; + # add dependent functions + %deps = ( + get_ifaddr => [ "get_ifdefault" ], + get_netaddr => [ "get_ifdefault", "get_ifaddr", "get_ifmask" ], + check_and_backup => [ "backup_conffile" ], + check_and_sed => [ "mv" ], + get_ldap_realm => [ "get_ldap_suffix" ], + ); + foreach my $f (keys(%keep)) { + if (exists($deps{$f})) { + $keep{$_} = 1 for (@{$deps{$f}}); + } + } + while () { + if (/^_?cp_(\w+) *\(\) *\{/) { + if (! exists($keep{$1})) { + while () { last if /^\}/; } # skip it + next; + } else { + $output .= "\n"; + } + } + next if /^\s*(\#|$)/; + $output .= $_; + } + $output =~ s/\b(_?)cp_/$1${prefix}_/sg; + $prefix = uc($prefix); + $output =~ s/\b(_?)CP_/$1${prefix}_/sg; + print $output; + ' -- $* +}