diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-02-02 15:15:37 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-02-02 15:15:37 +0200 |
commit | 0225fb12aa45a259f728951693d5b101c010c3fd (patch) | |
tree | 1e8990874b8370cdb8ee1d2f3f29f4b4c8b31004 | |
parent | 814257a140f499653d9cf3dbc64be9fac53a09fe (diff) | |
download | dnstools-0225fb12aa45a259f728951693d5b101c010c3fd.tar.gz dnstools-0225fb12aa45a259f728951693d5b101c010c3fd.tar.bz2 |
Bugfixes
-rwxr-xr-x | dgd/rc.uplink | 88 | ||||
-rwxr-xr-x | vhostcname/vhostcname | 13 |
2 files changed, 66 insertions, 35 deletions
diff --git a/dgd/rc.uplink b/dgd/rc.uplink index 239d85f..55b3242 100755 --- a/dgd/rc.uplink +++ b/dgd/rc.uplink @@ -26,6 +26,10 @@ END { echo "$n $1" >> $rt_tables fi ip rule add from $3 table $1 + ip rule add from $5 table $1 + if [ -n "$6" ]; then + ip rule add from $6 table $1 + fi ip route add default via $4 table $1 if [ -n "$7" ]; then ip route add $7 dev $2 src $3 table $1 @@ -40,6 +44,7 @@ gw=$4 ns=$5 $6 net=$7 EOF + /etc/rc.d/rc.dgd reload } readlinkinfo() { @@ -51,54 +56,79 @@ readlinkinfo() { linkcleanup() { test -f "$linkdir/$1" && rm "$linkdir/$1" ip route flush table $1 + /etc/rc.d/rc.dgd reload } -#linkup NAME +#linkup NAME [ IF IP GW NS1 NS2 [NET] ] linkup() { local name=$1 link_if link_ip link_gw link_ns link_net - shift - if [ -f "$linkdir/$name" ]; then - readlinkinfo "$linkdir/$name" - if [ -z "$link_gw" ]; then - echo >&2 "$0: $linkdir/$name: gw not set" + if [ $# -eq 1 ]; then + if [ -f "$linkdir/$name" ]; then + readlinkinfo "$linkdir/$name" + if [ -z "$link_gw" ]; then + echo >&2 "$0: $linkdir/$name: gw not set" + exit 1 + fi + else + echo >&2 "$0: $linkdir/$name: no such file" exit 1 fi - ip route add default via $link_gw - cat > $active <<EOT + elif [ $# -lt 6 ]; then + echo >&2 "$0: bad number of arguments to linkup" + exit 1 + else + link_if=$2 + link_ip=$3 + link_gw=$4 + link_ns="$5 $6" + link_net=$7 + fi + ip route add default via $link_gw + cat > $active <<EOT [core] active = $name EOT - echo "$link_ns" | awk ' + echo "$link_ns" | awk ' BEGIN { print "forwarders {" } { for (i = 1; i <= NF; i++) print " " $(i) ";"; } END { print "};" }' > $forwarders - rndc reload - else - echo >&2 "$0: $linkdir/$name: no such file" - exit 1 - fi + rndc reload || /etc/rc.d/rc.bind restart + export link_if + /etc/rc.d/rc.iptables -f nat start } -#linkdown NAME +#linkdown NAME [ IF IP GW NS1 NS2 [NET] ] linkdown() { local name=$1 link_if link_ip link_gw link_ns link_net link_active - shift - if [ -f "$linkdir/$name" ]; then - readlinkinfo "$linkdir/$name" - if [ -z "$link_gw" ]; then - echo >&2 "$0: $linkdir/$name: gw not set" - exit 1 - fi - ip route del default via $link_gw - if [ -r "$active" ]; then - readlinkinfo $active - if [ "$link_name" = "$name" ]; then - rm $active + if [ $# -eq 1 ]; then + if [ -f "$linkdir/$name" ]; then + readlinkinfo "$linkdir/$name" + if [ -z "$link_gw" ]; then + echo >&2 "$0: $linkdir/$name: gw not set" + exit 1 fi + else + echo >&2 "$0: $linkdir/$name: no such file" + exit 1 fi + elif [ $# -lt 6 ]; then + echo >&2 "$0: bad number of arguments to linkdown" + exit 1 else - echo >&2 "$0: $linkdir/$name: no such file" - exit 1 + link_if=$2 + link_ip=$3 + link_gw=$4 + link_ns="$5 $6" + link_net=$7 + fi + export link_if + /etc/rc.d/rc.iptables -f nat stop + ip route del default via $link_gw + if [ -r "$active" ]; then + readlinkinfo $active + if [ "$link_name" = "$name" ]; then + rm $active + fi fi } diff --git a/vhostcname/vhostcname b/vhostcname/vhostcname index 5981871..91a2c8d 100755 --- a/vhostcname/vhostcname +++ b/vhostcname/vhostcname @@ -88,7 +88,7 @@ sub parse_section { $input = $2; $quote = undef; } else { - die "unparsable input $input"; + abend(EX_CONFIG, "unparsable input $input"); } } @@ -527,9 +527,9 @@ sub com_status { my %comtab = ( start => \&com_start, - restart => \&com_reload, - 'force-restart' => \&com_start, + 'force-restart' => 'start', reload => \&com_reload, + restart => 'reload', stop => \&com_stop, status => \&com_status ); @@ -537,11 +537,12 @@ my %comtab = ( sub getcom { my $com = shift; - while (defined($comtab{$com}) and ref($comtab{$com}) ne 'CODE') { + while (exists($comtab{$com}) and ref($comtab{$com}) ne 'CODE') { + die "internal error: unresolved command alias" + unless exists $comtab{$com}; $com = $comtab{$com}; } - die "internal error: unresolved command alias" unless defined $com; - return $comtab{$com} if defined $comtab{$com}; + return $comtab{$com} if exists $comtab{$com}; my @v = map { /^$com/ ? $_ : () } sort keys %comtab; if ($#v == -1) { |