How did it end up looking?
Just a reminder really, since I use this already/anyway. :)


2012/7/27 Kenneth R Westerback <[email protected]>:
> I like this on first read. In fact I thought this already existed.
> I'll actually look more closely at the code tomorrow.
>
> .... Ken
>
> On Thu, Jul 26, 2012 at 10:09:28PM -0400, Ted Unangst wrote:
>> I have a system with two network interfaces (em0 and em1), running dhcp
>> on both. Both dhcp servers provide me with a nameserver, but only one
>> of them works (I can't fix this).  There is a config file for dhclient
>> I can use, but it only supports the supersede keyword.  I don't want
>> to statically configure a nameserver override for em1, because the
>> whole point is that the good nameserver on em0 can change.  I just
>> want to say "pretend this option did not arrive."
>>
>> Diff below adds a little support for an ignore keyword.  Like
>> supersede, except don't actually use the supplied value.
>>
>> Index: clparse.c
>> ===================================================================
>> RCS file: /cvs/src/sbin/dhclient/clparse.c,v
>> retrieving revision 1.38
>> diff -u -p -r1.38 clparse.c
>> --- clparse.c 10 Dec 2011 17:15:27 -0000      1.38
>> +++ clparse.c 27 Jul 2012 01:59:10 -0000
>> @@ -170,6 +170,11 @@ parse_client_statement(FILE *cfile)
>>               if (code != -1)
>>                       config->default_actions[code] = ACTION_SUPERSEDE;
>>               return;
>> +     case TOK_IGNORE:
>> +             code = parse_option_decl(cfile, &config->defaults[0]);
>> +             if (code != -1)
>> +                     config->default_actions[code] = ACTION_IGNORE;
>> +             return;
>>       case TOK_APPEND:
>>               code = parse_option_decl(cfile, &config->defaults[0]);
>>               if (code != -1)
>> Index: conflex.c
>> ===================================================================
>> RCS file: /cvs/src/sbin/dhclient/conflex.c,v
>> retrieving revision 1.14
>> diff -u -p -r1.14 conflex.c
>> --- conflex.c 10 Dec 2011 17:36:40 -0000      1.14
>> +++ conflex.c 27 Jul 2012 01:15:19 -0000
>> @@ -337,6 +337,7 @@ static const struct keywords {
>>       { "filename",                           TOK_FILENAME },
>>       { "fixed-address",                      TOK_FIXED_ADDR },
>>       { "hardware",                           TOK_HARDWARE },
>> +     { "ignore",                             TOK_IGNORE },
>>       { "initial-interval",                   TOK_INITIAL_INTERVAL },
>>       { "interface",                          TOK_INTERFACE },
>>       { "lease",                              TOK_LEASE },
>> Index: dhclient.c
>> ===================================================================
>> RCS file: /cvs/src/sbin/dhclient/dhclient.c,v
>> retrieving revision 1.146
>> diff -u -p -r1.146 dhclient.c
>> --- dhclient.c        9 Jul 2012 16:21:21 -0000       1.146
>> +++ dhclient.c        27 Jul 2012 01:59:35 -0000
>> @@ -1535,6 +1535,9 @@ priv_script_write_params(char *prefix, s
>>               if (config->defaults[i].len) {
>>                       if (lease->options[i].len) {
>>                               switch (config->default_actions[i]) {
>> +                             case ACTION_IGNORE:
>> +                                     /* handled below */
>> +                                     break;
>>                               case ACTION_DEFAULT:
>>                                       dp = lease->options[i].data;
>>                                       len = lease->options[i].len;
>> @@ -1588,6 +1591,9 @@ supersede:
>>                       len = lease->options[i].len;
>>                       dp = lease->options[i].data;
>>               } else {
>> +                     len = 0;
>> +             }
>> +             if (len && config->default_actions[i] == ACTION_IGNORE) {
>>                       len = 0;
>>               }
>>               if (len) {
>> Index: dhclient.conf.5
>> ===================================================================
>> RCS file: /cvs/src/sbin/dhclient/dhclient.conf.5,v
>> retrieving revision 1.21
>> diff -u -p -r1.21 dhclient.conf.5
>> --- dhclient.conf.5   9 Apr 2011 19:53:00 -0000       1.21
>> +++ dhclient.conf.5   27 Jul 2012 02:05:28 -0000
>> @@ -244,6 +244,14 @@ in the
>>  .Ic supersede
>>  statement.
>>  .It Xo
>> +.Ic ignore No { Op Ar option declaration
>> +.Oo , Ar ... option declaration Oc }
>> +.Xc
>> +If for some set of options the client should always ignore the
>> +value supplied by the server, these values can be defined in the
>> +.Ic ignore
>> +statement.
>> +.It Xo
>>  .Ic prepend No { Op Ar option declaration
>>  .Oo , Ar ... option declaration Oc }
>>  .Xc
>> Index: dhcpd.h
>> ===================================================================
>> RCS file: /cvs/src/sbin/dhclient/dhcpd.h,v
>> retrieving revision 1.76
>> diff -u -p -r1.76 dhcpd.h
>> --- dhcpd.h   9 Jul 2012 16:21:21 -0000       1.76
>> +++ dhcpd.h   27 Jul 2012 01:18:18 -0000
>> @@ -130,6 +130,7 @@ struct client_config {
>>       struct option_data      defaults[256];
>>       enum {
>>               ACTION_DEFAULT,
>> +             ACTION_IGNORE,
>>               ACTION_SUPERSEDE,
>>               ACTION_PREPEND,
>>               ACTION_APPEND
>> Index: dhctoken.h
>> ===================================================================
>> RCS file: /cvs/src/sbin/dhclient/dhctoken.h,v
>> retrieving revision 1.5
>> diff -u -p -r1.5 dhctoken.h
>> --- dhctoken.h        15 May 2006 08:10:57 -0000      1.5
>> +++ dhctoken.h        27 Jul 2012 01:15:54 -0000
>> @@ -79,6 +79,7 @@
>>  #define TOK_REJECT           292
>>  #define TOK_FDDI             293
>>  #define TOK_LINK_TIMEOUT     294
>> +#define TOK_IGNORE           295
>>
>>  #define is_identifier(x)     ((x) >= TOK_FIRST_TOKEN &&      \
>>                                (x) != TOK_STRING &&   \

Reply via email to