Package: radvd
Version: 1:1.0-2.0
Severity: normal
Tags: patch

radvd currently emits RDNSS options reversed from the order in which they
appear in the /etc/radvd.conf file.  This is important because the order of
the options affects the choice of primary, secondary, etc DNS server.
Note that multiple DNS servers can either be transmitted as a single option
(if the lifetime and other parameters match) or as multiple separate options.
DNS servers in a single option are ordered correctly, but the order of multiple
options is reversed.

The attached patch corrects the problem by fixing the bison grammar so that
the RDNSS option list is created in the correct forwards order.  For good
measure the same fix is applied to the parsing of route and prefix options,
even though the order of these options shouldn't matter.
 --scott

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)

Kernel: Linux 2.6.21-1-686 (SMP w/2 CPU cores)
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)
Shell: /bin/sh linked to /bin/bash

Versions of packages radvd depends on:
ii  adduser                       3.103      Add and remove users and groups
ii  libc6                         2.5-11     GNU C Library: Shared libraries

radvd recommends no packages.

-- no debconf information
diff -ruHp X/radvd-1.0/gram.y radvd-1.0/gram.y
--- X/radvd-1.0/gram.y  2006-10-09 02:20:59.000000000 -0400
+++ radvd-1.0/gram.y    2007-06-20 16:44:21.000000000 -0400
@@ -326,15 +326,11 @@ ifaceval  : T_MinRtrAdvInterval NUMBER ';
                }
                ;
                
-prefixlist     : prefixdef
+prefixlist     : prefixdef optional_prefixlist
                {
+                       $1->next = $2;
                        $$ = $1;
                }
-               | prefixlist prefixdef
-               {
-                       $2->next = $1;
-                       $$ = $2;
-               }
                ;
 
 prefixdef      : prefixhead '{' optional_prefixplist '}' ';'
@@ -427,15 +423,11 @@ prefixparms       : T_AdvOnLink SWITCH ';'
                }
                ;
 
-routelist      : routedef
+routelist      : routedef optional_routelist
                {
+                       $1->next = $2;
                        $$ = $1;
                }
-               | routelist routedef
-               {
-                       $2->next = $1;
-                       $$ = $2;
-               }
                ;
 
 routedef       : routehead '{' optional_routeplist '}' ';'
@@ -489,15 +481,11 @@ routeparms        : T_AdvRoutePreference SIGNED
                }
                ;
                
-rdnsslist      : rdnssdef
+rdnsslist      : rdnssdef optional_rdnsslist
                {
+                       $1->next = $2;
                        $$ = $1;
                }
-               | rdnsslist rdnssdef
-               {
-                       $2->next = $1;
-                       $$ = $2;
-               }
                ;
                
 rdnssdef       : rdnsshead '{' optional_rdnssplist '}' ';'

Reply via email to