Index: vpnc-script =================================================================== --- vpnc-script +++ vpnc-script 2007-07-23 18:27:31.000000000 +0200 @@ -32,7 +32,10 @@ esac DEFAULT_ROUTE_FILE=/var/run/vpnc/defaultroute -RESOLV_CONF_BACKUP=/var/run/vpnc/resolv.conf-backup + +# Import Mandriva Linux configuration for resolv.conf update +. /etc/sysconfig/network-scripts/network-functions +DEVICE=$TUNDEV # some systems, eg. Darwin & FreeBSD, prune /var/run on boot if ! [ -d "/var/run/vpnc" ]; then @@ -212,122 +215,25 @@ fi write_resolvconf() { - grep '^#@VPNC_GENERATED@' /etc/resolv.conf > /dev/null 2>&1 || cp -- /etc/resolv.conf "$RESOLV_CONF_BACKUP" - NEW_RESOLVCONF="#@VPNC_GENERATED@ -- this file is generated by vpnc -# and will be overwritten by vpnc -# as long as the above mark is intact" - - # Don't step on INTERNAL_IP4_DNS value, use a temporary variable - INTERNAL_IP4_DNS_TEMP="$INTERNAL_IP4_DNS" - exec 6< /etc/resolv.conf - while read LINE <&6 ; do - case "$LINE" in - nameserver*) - if [ -n "$INTERNAL_IP4_DNS_TEMP" ]; then - read ONE_NAMESERVER INTERNAL_IP4_DNS_TEMP <<-EOF - $INTERNAL_IP4_DNS_TEMP -EOF - LINE="nameserver $ONE_NAMESERVER" - else - LINE="" - fi - ;; - domain*|search*) - if [ -n "$CISCO_DEF_DOMAIN" ]; then - LINE="$LINE $CISCO_DEF_DOMAIN" - CISCO_DEF_DOMAIN="" - fi - ;; - esac - NEW_RESOLVCONF="$NEW_RESOLVCONF -$LINE" - done - exec 6<&- - - for i in $INTERNAL_IP4_DNS_TEMP ; do - NEW_RESOLVCONF="$NEW_RESOLVCONF -nameserver $i" - done + local d + local ns if [ -n "$CISCO_DEF_DOMAIN" ]; then - NEW_RESOLVCONF="$NEW_RESOLVCONF -search $CISCO_DEF_DOMAIN" + d="search $CISCO_DEF_DOMAIN" fi - echo "$NEW_RESOLVCONF" > /etc/resolv.conf - if [ "$OS" = "Darwin" ]; then - case "`uname -r`" in - # Skip for pre-10.4 systems - 4.*|5.*|6.*|7.*) - ;; - # 10.4 and later require use of scutil for DNS to work properly - *) - scutil >/dev/null 2>&1 <<-EOF - open - d.init - d.add ServerAddresses * $INTERNAL_IP4_DNS - set State:/Network/Service/$TUNDEV/DNS - get State:/Network/Global/IPv4 - d.remove PrimaryService - d.remove PrimaryInterface - d.add Addresses * $INTERNAL_IP4_ADDRESS - d.add SubnetMasks * 255.255.255.255 - d.add InterfaceName $TUNDEV - set State:/Network/Service/$TUNDEV/IPv4 - close - EOF - if [ -n "$CISCO_DEF_DOMAIN" ]; then - scutil >/dev/null 2>&1 <<-EOF - open - get State:/Network/Service/$TUNDEV/DNS - d.add DomainName $CISCO_DEF_DOMAIN - d.add SearchDomains * $CISCO_DEF_DOMAIN - d.add SupplementalMatchDomains * $CISCO_DEF_DOMAIN - set State:/Network/Service/$TUNDEV/DNS - close - EOF - fi - # Uncomment the following if/fi pair to use multiple - # DNS matching when available. When multiple DNS matching - # is present, anything reading the /etc/resolv.conf file - # directly will probably not work as intended. - #if [ -z "$CISCO_DEF_DOMAIN" ]; then - # Cannot use multiple DNS matching without a domain - scutil >/dev/null 2>&1 <<-EOF - open - get State:/Network/Service/$TUNDEV/IPv4 - d.add OverridePrimary # 1 - set State:/Network/Service/$TUNDEV/IPv4 - close - EOF - #fi - ;; - esac + if [ -n "$INTERNAL_IP4_DNS" ]; then + for nameserver in "$INTERNAL_IP4_DNS"; do + ns="$ns"$'\n'"nameserver $nameserver" + done fi -} -reset_resolvconf() { - if [ ! -e "$RESOLV_CONF_BACKUP" ]; then - return + if [ -n "$d" -o -n "$ns" ]; then + change_resolv_conf "$d" "$ns" fi - grep '^#@VPNC_GENERATED@' /etc/resolv.conf > /dev/null 2>&1 && cat "$RESOLV_CONF_BACKUP" > /etc/resolv.conf - rm -f -- "$RESOLV_CONF_BACKUP" +} - if [ "$OS" = "Darwin" ]; then - case "`uname -r`" in - # Skip for pre-10.4 systems - 4.*|5.*|6.*|7.*) - ;; - # 10.4 and later require use of scutil for DNS to work properly - *) - scutil >/dev/null 2>&1 <<-EOF - open - remove State:/Network/Service/$TUNDEV/IPv4 - remove State:/Network/Service/$TUNDEV/DNS - close - EOF - ;; - esac - fi +reset_resolvconf() { + clear_resolv_conf } do_connect() {