181 lines
4.2 KiB
Plaintext
181 lines
4.2 KiB
Plaintext
|
#! /bin/bash
|
||
|
#
|
||
|
# Run sresolv_test using our own name server
|
||
|
#
|
||
|
# --------------------------------------------------------------------
|
||
|
#
|
||
|
# This file is part of the Sofia-SIP package
|
||
|
#
|
||
|
# Copyright (C) 2005 Nokia Corporation.
|
||
|
#
|
||
|
# Contact: Pekka Pessi <pekka.pessi@nokia.com>
|
||
|
#
|
||
|
# This library is free software; you can redistribute it and/or
|
||
|
# modify it under the terms of the GNU Lesser General Public License
|
||
|
# as published by the Free Software Foundation; either version 2.1 of
|
||
|
# the License, or (at your option) any later version.
|
||
|
#
|
||
|
# This library is distributed in the hope that it will be useful, but
|
||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
# Lesser General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU Lesser General Public
|
||
|
# License along with this library; if not, write to the Free Software
|
||
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||
|
# 02110-1301 USA
|
||
|
#
|
||
|
# --------------------------------------------------------------------
|
||
|
#
|
||
|
# Author(s): Pekka Pessi <Pekka.Pessi@nokia.com>.
|
||
|
#
|
||
|
|
||
|
s=${0%/*}
|
||
|
|
||
|
test x$s = x$0 && s=`pwd`
|
||
|
|
||
|
PATH=/usr/sbin:/usr/local/sbin:/sbin:$PATH
|
||
|
|
||
|
# Test for support for IPv6 on Linux. This probably fails on everything else.
|
||
|
ipv6='sysctl net.ipv6.conf.default.mtu >& /dev/null'
|
||
|
# Bind not working with IPv6 on RHEL 4:
|
||
|
# client.c:1325: unexpected error: failed to get request's destination: failure
|
||
|
#ipv6=false
|
||
|
|
||
|
port=`expr $$ % \( 65536 - 1024 \) + 1024`
|
||
|
|
||
|
# Try to find a free port
|
||
|
if netstat --ip >/dev/null 2>&1 ; then
|
||
|
while netstat --ip -n -a | fgrep -q ":$port "
|
||
|
do
|
||
|
port=$(($port + 1))
|
||
|
if [$port = 65536] ; then
|
||
|
port=1024
|
||
|
fi
|
||
|
done
|
||
|
fi
|
||
|
|
||
|
# No named, no fun
|
||
|
type -p named >/dev/null || exit 77
|
||
|
|
||
|
if eval $ipv6
|
||
|
then
|
||
|
# Figure out nice IPv6 address for us
|
||
|
ns=$(ip addr ls | awk '
|
||
|
/^[0-9]:/ { up = ($3 ~ /UP/) && ($3 !~ /LOOPBACK/); }
|
||
|
/inet6 fe80::/ { next; } # no link-local
|
||
|
up && $1 ~ /inet6/ { sub(/\/.*$/, "", $2); print $2; exit 0; }')
|
||
|
|
||
|
# Nothing found, use localnode ::1
|
||
|
if test -z "$ns"; then ns=::1 ; fi
|
||
|
|
||
|
listen6="listen-on-v6 port $port { any; };"
|
||
|
else
|
||
|
ns="127.0.0.1"
|
||
|
listen4="listen-on port $port { 127.0.0.1; };"
|
||
|
fi
|
||
|
|
||
|
#
|
||
|
# Set up configuration. First, nice tmpdir
|
||
|
#
|
||
|
t=${TMPDIR:-/tmp}/sofia-sip-sresolv-$USER-$$
|
||
|
|
||
|
mkdir $t || exit 77
|
||
|
|
||
|
# Main resolv.conf (with primary nameserver not answering)
|
||
|
cat > $t/resolv.conf <<EOF
|
||
|
# Zeroconf subnet, reserved range - no-one should answer this
|
||
|
#nameserver 169.254.0.2
|
||
|
#...but bind9 listens to it if using IPv6 ... and chokes on it.
|
||
|
|
||
|
# 00:10:c6:e3:da:7f belongs to a Nokia WLAN card tucked safely in my closet
|
||
|
nameserver fe80::10:c6ff:fee3:da7f
|
||
|
|
||
|
# This is bind we set up
|
||
|
nameserver $ns
|
||
|
|
||
|
domain example.com
|
||
|
|
||
|
# This is our addition
|
||
|
port $port
|
||
|
EOF
|
||
|
|
||
|
# Resolv.conf with bad namserver addresses
|
||
|
cat > $t/error.conf <<EOF
|
||
|
nameserver 0.0.0.2
|
||
|
nameserver 1.1.1.1.1
|
||
|
search example.com
|
||
|
port $port
|
||
|
EOF
|
||
|
|
||
|
cat > $t/named.conf <<EOF
|
||
|
options {
|
||
|
directory "$(cd $s; pwd)";
|
||
|
pid-file "$t/named.pid";
|
||
|
notify no;
|
||
|
$listen4
|
||
|
$listen6
|
||
|
};
|
||
|
|
||
|
zone "example.com" in {
|
||
|
type master;
|
||
|
file "example.com";
|
||
|
};
|
||
|
|
||
|
zone "." in {
|
||
|
type master;
|
||
|
file "root.zone";
|
||
|
};
|
||
|
|
||
|
zone "188.2.194.in-addr.arpa" in {
|
||
|
type master;
|
||
|
file "194.2.188";
|
||
|
};
|
||
|
|
||
|
zone "0.0.127.in-addr.arpa" in {
|
||
|
type master;
|
||
|
file "127.zone";
|
||
|
};
|
||
|
|
||
|
zone "0.0.0.c.2.1.0.3.0.0.2.1.e.f.f.3.ip6.int" in {
|
||
|
type master;
|
||
|
file "3.f.f.e.1.2.0.0.3.0.1.2.c.0.0.0";
|
||
|
};
|
||
|
|
||
|
zone "0.0.0.c.2.1.0.3.0.0.2.1.e.f.f.3.ip6.arpa" in {
|
||
|
type master;
|
||
|
file "3.f.f.e.1.2.0.0.3.0.1.2.c.0.0.0.arpa";
|
||
|
};
|
||
|
|
||
|
EOF
|
||
|
|
||
|
named -f -d 999 -c $t/named.conf &
|
||
|
|
||
|
echo $0: started named pid $!
|
||
|
for i in 1 2 3 4 5; do
|
||
|
test -r $t/named.pid && break
|
||
|
sleep 1;
|
||
|
done
|
||
|
|
||
|
test -r $t/named.pid || {
|
||
|
echo $0: cannot start named >&2 ;
|
||
|
if fgrep -q -i -e SELINUX=enforcing /etc/selinux/config 2>&/dev/null ; then
|
||
|
echo $0: perhaps you have to disable SELinux protection for named
|
||
|
fi
|
||
|
exit 77
|
||
|
}
|
||
|
|
||
|
function kill_named
|
||
|
{
|
||
|
kill `cat $t/named.pid`
|
||
|
rm $t/named.conf $t/resolv.conf $t/error.conf $t/named.pid
|
||
|
rmdir $t
|
||
|
}
|
||
|
trap kill_named EXIT
|
||
|
|
||
|
# export SOFIA_DEBUG=9
|
||
|
|
||
|
$VALGRIND ./test_sresolv "$@" - $t/resolv.conf $t/error.conf || exit 1
|
||
|
|
||
|
exit 0
|