When adding a new configuration option to NSD, several files need to be
touched. This file is an enumeration of files that need to be edited.
Suppose we are going to add a configuration option 'dummy:' that can take
a string. We need to update the following files:

       1. configlexer.lex
       2. configparser.y
       3. options.h
       4. options.c
       5. nsd.conf.sample.in
       6. nsd.conf.5.in
       7. nsd-checkconf.c
       8. tpkg/checkconf.tpkg

1. Update configlexer.lex

Make sure that zonec understands the new option by adding the following
line into configlexer.lex

       dummy{COLON}  { LEXOUT(("v(%s) ", yytext)); return VAR_DUMMY;}

2. Update configparser.y

Make sure that zonec can parse the new option by adding VAR_DUMMY to the set
of tokens:

       %token VAR_DUMMY

Update the grammar. For example, if it a server option, extend content_server:

       content_server: server_ip_address | ...
               server_hide_version | server_dummy;

And write down the dummy rule:

       server_dummy: VAR_DUMMY STRING
       {
               OUTYY(("P(server_dummy:%s)\n", $2));
               cfg_parser->opt->dummy =
                       region_strdup(cfg_parser->opt->region, $2);
       }
       ;

3. Update options.h

Make sure that there is storage for the dummy option. In struct nsd_options,
add:

       const char* dummy;

4. Update options.c

Set a default dummy string. In the function nsd_options_create(), add:

       opt->dummy = "dummy";

5. Update nsd.conf.sample.in

Add a reference in the sample configuration file:

       # This option does nothing.
       # dummy: "dummy"

6. Update nsd.conf.5.in

Update the nsd.conf manpage:

       .TP
       .B dummy:\fR <filename>
       Does nothing.

7. Update nsd-checkconf.c

Make the checkconf tool aware of the new option. In config_print_zone(), add:

       SERV_GET_STR(dummy, o);

and in config_test_print_server(), add:

       print_string_var("dummy:", opt->dummy);

8. Update tpkg/checkconf.tpkg

Make the test aware of the new option. Extract checkconf.tpkg:

       $ cd tpkg;
       $ tpkg extract checkconf.tpkg
       $ cd checkconf.dir

And add to the various checkconf.check[1-9] files:

       dummy: "dummy"

Go back to the tpkg directory and create the new test:

       $ cd ..
       $ tpkg create checkconf.tpkg

9. Update other files

You might need to edit other files too:

- If the new option requires to be enabled at build time, you need to add
 stuff to configure.ac and Makefile.in.

- Update documentation files, like doc/README, doc/RELNOTES, doc/Changelog.

- Obviously, the source code files need to be edited to implement the new
 functionality.