X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=functions.sh;h=47ad62f0e3be17026aac7ff9fee678468bb1e67a;hb=53e4a56a246421d5ec52c23135661e9b7d7ddb63;hp=cd0bdee3178f1ab41a8c52e0d337cb0318d4e9ec;hpb=ea01a241287a74a8a5b3576f6fdda3c801786cb7;p=carnet-tools-cn.git diff --git a/functions.sh b/functions.sh index cd0bdee..47ad62f 100644 --- a/functions.sh +++ b/functions.sh @@ -1,3 +1,9 @@ +# Initialize "public" CP_ECHO_RETURN variable once +if [ -z "$_CP_INIT_ECHO_RETURN" ]; then + _CP_INIT_ECHO_RETURN=1 + CP_ECHO_RETURN="" +fi + # by ddzeko & ico, Fri, 18 Mar 2005 14:44:08 +0100 cp_get_ifaddr() { [ "$CP_SCRIPT_DEBUG" ] && set -vx @@ -153,11 +159,47 @@ 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" + 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 @@ -167,9 +209,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 @@ -232,7 +274,7 @@ cp_check_and_sed() { fi ret=0 done - [ "$ret" -eq 2 -a "$grepret" ] && ret=1 || true + [ "$ret" -eq 2 -a "$grepret" ] && ret=1 return $ret } @@ -261,8 +303,12 @@ cp_mail () { quiet=1 shift fi - [ -n "$1" ] && pkg="$1" # barf if no package - [ -n "$2" ] && version=" $2" || true + if [ -n "$1" ]; then + pkg="$1" + else + return 1 # must have at least the package name as argument + fi + [ -n "$2" ] && version=" $2" if [ "$(echo $CP_NOTICE|wc -w)" -gt 0 ]; then [ -n "$quiet" ] || echo "Mailing upgrade output to root." CP_NOTICE="From: $pkg postinst script