X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=functions.sh;h=dc3450d81121e3cc631eacb2cfebe75fae6b5cd9;hb=54d72776be19f25ddb6cf1b51079eca6b3c4418b;hp=8c2e0e864459f73659fa92e9093f4678b69ecfdb;hpb=9d14d6fd31235bc0c8a6733fcf37cec81879dfcd;p=carnet-tools-cn.git diff --git a/functions.sh b/functions.sh index 8c2e0e8..dc3450d 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 @@ -141,7 +151,7 @@ cp_get_netaddr() { if [ "$netmask" = "255.255.255.255" ]; then cidr="$ipaddress/32" else - cidr="`ipcalc -ncb $ipaddress $netmask | awk '/^Network:/{print $2}'`" + cidr="`ipcalc -nb $ipaddress $netmask | awk '/^Network:/{print $2}'`" fi RET="$cidr" @@ -317,8 +327,8 @@ cp_mail () { CP_NOTICE="From: $pkg postinst script To: root Subject: $pkg$version package install log -Date: $(/bin/date +'%a, %d %b %Y %H:%M:%S %z') - +Date: $(LC_ALL=C /bin/date --rfc-2822) + Hello! The $pkg package has been successfully installed on your computer. @@ -327,9 +337,11 @@ is included below. ---------- ${CP_NOTICE}----------" - - echo "$CP_NOTICE" | /usr/sbin/sendmail -t & - sleep 1 + + if [ -x /usr/sbin/sendmail ]; then + echo "$CP_NOTICE" | /usr/sbin/sendmail -t -oi & + sleep 1 + fi fi } @@ -346,6 +358,7 @@ cp_mv () { if [ -e "$old" ]; then chown --reference "$old" "$new" chmod --reference "$old" "$new" + cp -pf "$old" "$old.cn-old" fi mv "$new" "$old" } @@ -368,6 +381,14 @@ cp_yes_no () { echo -n "$prompt (y)es/(n)o: " read answer case "$answer" in + Y*) + echo + RET=y + ;; + N*) + echo + RET=n + ;; y*) echo RET=y @@ -379,7 +400,7 @@ cp_yes_no () { *) echo echo "Please read the message and choose y or n" - cp_yes_no + cp_yes_no "$prompt" ;; esac } @@ -417,7 +438,7 @@ cp_db_get() { fi } -# by ico, Wed, 20 Apr 2005 21:09:54 +0200 +# by ico, Wed, 07 Dec 2011 13:30:02 +0100 cp_get_ldap_suffix() { [ "$CP_SCRIPT_DEBUG" ] && set -vx @@ -427,22 +448,27 @@ cp_get_ldap_suffix() { # but preserving initial state so it could be used afterwards CP_ECHO_RETURN="" - if [ ! -f /etc/ldap/slapd.conf ]; then - echo "cp_get_ldap_suffix: /etc/ldap/slapd.conf: No such file" >&2 + RET="" + + if [ -d /etc/ldap/slapd.d/ ]; then + RET="`grep -r olcSuffix: /etc/ldap/slapd.d/ | awk '{print $2}' | head -1`" + elif [ -f /etc/ldap/slapd.conf ]; then + RET="`awk '/^suffix/ { exit } + END { gsub(/"/, "", $2); print $2 }' \ + < /etc/ldap/slapd.conf`" + else + RET="" + echo "cp_get_ldap_suffix: /etc/ldap/slapd.{d/,conf}: No such file or directory" >&2 return 2 fi - - RET="`awk '/^suffix/ { exit } - END { gsub(/"/, "", $2); print $2 }' \ - < /etc/ldap/slapd.conf`" if [ "`echo $RET | sed 's/,/ /g' | wc -w`" -gt 2 ]; then RET="" - echo "cp_get_ldap_suffix: Invalid LDAP suffix in /etc/ldap/slapd.conf" >&2 + echo "cp_get_ldap_suffix: Invalid LDAP suffix in /etc/ldap/slapd.d/" >&2 return 2 fi - [ -z "$RET" ] && echo "cp_get_ldap_suffix: No LDAP suffix in /etc/ldap/slapd.conf" >&2 + [ -z "$RET" ] && echo "cp_get_ldap_suffix: No LDAP suffix in /etc/ldap/slapd.{d/,conf}" >&2 [ -z "$echo_return" ] || echo $RET CP_ECHO_RETURN="$echo_return" } @@ -457,16 +483,96 @@ cp_get_ldap_realm() { # but preserving initial state so it could be used afterwards CP_ECHO_RETURN="" - if [ ! -f /etc/ldap/slapd.conf ]; then - echo "cp_get_ldap_realm: /etc/ldap/slapd.conf: No such file" >&2 + RET="" + + if [ ! -d /etc/ldap/slapd.d/ -a ! -f /etc/ldap/slapd.conf ]; then + echo "cp_get_ldap_realm: /etc/ldap/slapd.{d/,conf}: No such file or directory" >&2 return 2 fi - + cp_get_ldap_suffix || true RET="`echo $RET | awk -F, '{print $1}' | awk -F= '{print $2}'`" - [ -z "$RET" ] && echo "cp_get_ldap_realm: No LDAP REALM in /etc/ldap/slapd.conf" >&2 + [ -z "$RET" ] && echo "cp_get_ldap_realm: No LDAP REALM in /etc/ldap/slapd.{d/,conf}" >&2 [ -z "$echo_return" ] || echo $RET CP_ECHO_RETURN="$echo_return" } +# if fqdn is name.dom3.dom2.dom1.hr, check if this host is MX for +# either dom3.dom2.dom1.hr, dom2.dom1.hr or dom1.hr and dump highest level +# domain on stdout +cp_get_mx_domain() { + [ "$CP_SCRIPT_DEBUG" ] && set -vx + + local domains d host + + host=$(hostname -f) + RET="$host" + if ! echo "$host" | grep -q '\.'; then + return + fi + if [ ! -x /usr/bin/host ]; then + # no host command + return + fi + domains=$(/bin/hostname -f | awk -F. ' + { + for (i=2; i 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; + ' -- $* +}