1*d83a80eeSchristosWhen adding a new configuration option to NSD, several files need to be 2*d83a80eeSchristostouched. This file is an enumeration of files that need to be edited. 3*d83a80eeSchristosSuppose we are going to add a configuration option 'dummy:' that can take 4*d83a80eeSchristosa string. We need to update the following files: 5*d83a80eeSchristos 6*d83a80eeSchristos 1. configlexer.lex 7*d83a80eeSchristos 2. configparser.y 8*d83a80eeSchristos 3. options.h 9*d83a80eeSchristos 4. options.c 10*d83a80eeSchristos 5. nsd.conf.sample.in 11*d83a80eeSchristos 6. nsd.conf.5.in 12*d83a80eeSchristos 7. nsd-checkconf.c 13*d83a80eeSchristos 8. tpkg/checkconf.tpkg 14*d83a80eeSchristos 15*d83a80eeSchristos1. Update configlexer.lex 16*d83a80eeSchristos 17*d83a80eeSchristosMake sure that zonec understands the new option by adding the following 18*d83a80eeSchristosline into configlexer.lex 19*d83a80eeSchristos 20*d83a80eeSchristos dummy{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_DUMMY;} 21*d83a80eeSchristos 22*d83a80eeSchristos2. Update configparser.y 23*d83a80eeSchristos 24*d83a80eeSchristosMake sure that zonec can parse the new option by adding VAR_DUMMY to the set 25*d83a80eeSchristosof tokens: 26*d83a80eeSchristos 27*d83a80eeSchristos %token VAR_DUMMY 28*d83a80eeSchristos 29*d83a80eeSchristosUpdate the grammar. For example, if it a server option, extend content_server: 30*d83a80eeSchristos 31*d83a80eeSchristos content_server: server_ip_address | ... 32*d83a80eeSchristos server_hide_version | server_dummy; 33*d83a80eeSchristos 34*d83a80eeSchristosAnd write down the dummy rule: 35*d83a80eeSchristos 36*d83a80eeSchristos server_dummy: VAR_DUMMY STRING 37*d83a80eeSchristos { 38*d83a80eeSchristos OUTYY(("P(server_dummy:%s)\n", $2)); 39*d83a80eeSchristos cfg_parser->opt->dummy = 40*d83a80eeSchristos region_strdup(cfg_parser->opt->region, $2); 41*d83a80eeSchristos } 42*d83a80eeSchristos ; 43*d83a80eeSchristos 44*d83a80eeSchristos3. Update options.h 45*d83a80eeSchristos 46*d83a80eeSchristosMake sure that there is storage for the dummy option. In struct nsd_options, 47*d83a80eeSchristosadd: 48*d83a80eeSchristos 49*d83a80eeSchristos const char* dummy; 50*d83a80eeSchristos 51*d83a80eeSchristos4. Update options.c 52*d83a80eeSchristos 53*d83a80eeSchristosSet a default dummy string. In the function nsd_options_create(), add: 54*d83a80eeSchristos 55*d83a80eeSchristos opt->dummy = "dummy"; 56*d83a80eeSchristos 57*d83a80eeSchristos5. Update nsd.conf.sample.in 58*d83a80eeSchristos 59*d83a80eeSchristosAdd a reference in the sample configuration file: 60*d83a80eeSchristos 61*d83a80eeSchristos # This option does nothing. 62*d83a80eeSchristos # dummy: "dummy" 63*d83a80eeSchristos 64*d83a80eeSchristos6. Update nsd.conf.5.in 65*d83a80eeSchristos 66*d83a80eeSchristosUpdate the nsd.conf manpage: 67*d83a80eeSchristos 68*d83a80eeSchristos .TP 69*d83a80eeSchristos .B dummy:\fR <filename> 70*d83a80eeSchristos Does nothing. 71*d83a80eeSchristos 72*d83a80eeSchristos7. Update nsd-checkconf.c 73*d83a80eeSchristos 74*d83a80eeSchristosMake the checkconf tool aware of the new option. In config_print_zone(), add: 75*d83a80eeSchristos 76*d83a80eeSchristos SERV_GET_STR(dummy, o); 77*d83a80eeSchristos 78*d83a80eeSchristosand in config_test_print_server(), add: 79*d83a80eeSchristos 80*d83a80eeSchristos print_string_var("dummy:", opt->dummy); 81*d83a80eeSchristos 82*d83a80eeSchristos8. Update tpkg/checkconf.tpkg 83*d83a80eeSchristos 84*d83a80eeSchristosMake the test aware of the new option. Extract checkconf.tpkg: 85*d83a80eeSchristos 86*d83a80eeSchristos $ cd tpkg; 87*d83a80eeSchristos $ tpkg extract checkconf.tpkg 88*d83a80eeSchristos $ cd checkconf.dir 89*d83a80eeSchristos 90*d83a80eeSchristosAnd add to the various checkconf.check[1-9] files: 91*d83a80eeSchristos 92*d83a80eeSchristos dummy: "dummy" 93*d83a80eeSchristos 94*d83a80eeSchristosGo back to the tpkg directory and create the new test: 95*d83a80eeSchristos 96*d83a80eeSchristos $ cd .. 97*d83a80eeSchristos $ tpkg create checkconf.tpkg 98*d83a80eeSchristos 99*d83a80eeSchristos9. Update other files 100*d83a80eeSchristos 101*d83a80eeSchristosYou might need to edit other files too: 102*d83a80eeSchristos 103*d83a80eeSchristos- If the new option requires to be enabled at build time, you need to add 104*d83a80eeSchristos stuff to configure.ac and Makefile.in. 105*d83a80eeSchristos 106*d83a80eeSchristos- Update documentation files, like doc/README, doc/RELNOTES, doc/Changelog. 107*d83a80eeSchristos 108*d83a80eeSchristos- Obviously, the source code files need to be edited to implement the new 109*d83a80eeSchristos functionality. 110*d83a80eeSchristos 111*d83a80eeSchristos 112