]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 890] the crypto command seems to be required now\n[Bug 891] 'restrict' config...
authorHarlan Stenn <stenn@ntp.org>
Wed, 19 Sep 2007 08:05:50 +0000 (04:05 -0400)
committerHarlan Stenn <stenn@ntp.org>
Wed, 19 Sep 2007 08:05:50 +0000 (04:05 -0400)
bk: 46f0d85e5STUqr6XwFipEtPzpmQydw

ChangeLog
ntpd/ntp_config.c
ntpd/ntp_crypto.c
ntpd/ntp_parser.c
ntpd/ntp_parser.y
ntpd/ntp_restrict.c

index 285ce55c408d0d357306e382817d77970ac9392e..871677815557d10e72d5d8dda66c3cc306530d63 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+* [Bug 891] 'restrict' config file keyword does not work (partial fix).
+* [Bug 890] the crypto command seems to be required now.
+* [Bug 915] ntpd cores during processing of x509 certificates.
+* Crypto lint cleanup from Dave Mills.
 * [Bug 897] Check RAND_status() - we may not need a .rnd file.
 * Crypto cleanup from Dave Mills.
 * [Bug 911] Fix error message in cmd_args.c.
index 792c8ac3affa1f0cf10587e2152220b1d73381ec..620a0adef8635969925725947a6550325c06309d 100644 (file)
@@ -132,7 +132,11 @@ int curr_include_level;                    /* The current include level */
 struct FILE_INFO *fp[MAXINCLUDELEVEL+1];
 FILE *res_fp;
 struct config_tree my_config;          /* Root of the configuration tree */
+#if 0
 short default_ai_family = AF_UNSPEC;   /* Default either IPv4 or IPv6 */
+#else
+short default_ai_family = AF_INET;     /* [Bug 891]: FIX ME */
+#endif
 char   *sys_phone[MAXPHONE] = {NULL};  /* ACTS phone numbers */
 char   *keysdir = NTP_KEYSDIR; /* crypto keys directory */
 #if defined(HAVE_SCHED_SETSCHEDULER)
@@ -180,6 +184,9 @@ int old_config_style = 1;    /* A boolean flag, which when set,
                               * format with a newline at the end of
                               * every command is being used
                               */
+#ifdef OPENSSL
+int    cryptosw;               /* crypto command called */
+#endif
 
 extern int sys_maxclock;
 extern char *stats_drift_file; /* name of the driftfile */
@@ -983,7 +990,8 @@ config_auth(void)
                keysdir = my_config.auth.keysdir;
 
 #ifdef OPENSSL
-       crypto_setup();
+       if (cryptosw)
+               crypto_setup();
 #endif /* OPENSSL */
  
        /* Keys Command */
index 2c26cddbc1e9365b705018feb74b0d122d4791bc..0c29364446831bd4ac8e596c8d82f601cf1ea0c6 100644 (file)
@@ -645,7 +645,8 @@ crypto_recv(
                         */
                        if (peer->pkey == NULL) {
                                ptr = (u_char *)xinfo->cert.ptr;
-                               cert = d2i_X509(NULL, &ptr,
+                               cert = d2i_X509(NULL,
+                                   (const u_char **)&ptr,
                                    ntohl(xinfo->cert.vallen));
                                peer->pkey = X509_get_pubkey(cert);
                                X509_free(cert);
@@ -1686,7 +1687,8 @@ crypto_encrypt(
         */
        len = ntohl(ep->vallen);
        ptr = (u_char *)ep->pkt;
-       pkey = d2i_PublicKey(EVP_PKEY_RSA, NULL, &ptr, len);
+       pkey = d2i_PublicKey(EVP_PKEY_RSA, NULL, (const u_char **)&ptr,
+           len);
        if (pkey == NULL) {
                msyslog(LOG_ERR, "crypto_encrypt: %s",
                    ERR_error_string(ERR_get_error(), NULL));
@@ -1703,8 +1705,9 @@ crypto_encrypt(
        len = EVP_PKEY_size(pkey);
        vp->vallen = htonl(len);
        vp->ptr = emalloc(len);
+       ptr = vp->ptr;
        temp32 = htonl(*cookie);
-       if (!RSA_public_encrypt(4, (u_char *)&temp32, vp->ptr,
+       if (!RSA_public_encrypt(4, (u_char *)&temp32, ptr,
            pkey->pkey.rsa, RSA_PKCS1_OAEP_PADDING)) {
                msyslog(LOG_ERR, "crypto_encrypt: %s",
                    ERR_error_string(ERR_get_error(), NULL));
@@ -3089,7 +3092,7 @@ cert_sign(
                return (XEVNT_TSP);
 
        ptr = (u_char *)ep->pkt;
-       if ((req = d2i_X509(NULL, (u_char **)&ptr,
+       if ((req = d2i_X509(NULL, (const u_char **)&ptr,
                    ntohl(ep->vallen))) == NULL) {
                msyslog(LOG_ERR, "cert_sign: %s",
                    ERR_error_string(ERR_get_error(), NULL));
@@ -3195,7 +3198,8 @@ cert_valid(
                return (XEVNT_OK);
 
        ptr = (u_char *)cinf->cert.ptr;
-       cert = d2i_X509(NULL, &ptr, ntohl(cinf->cert.vallen));
+       cert = d2i_X509(NULL, (const u_char **)&ptr,
+           ntohl(cinf->cert.vallen));
        if (cert == NULL || !X509_verify(cert, pkey))
                return (XEVNT_VFY);
 
@@ -3379,20 +3383,12 @@ cert_parse(
        const char *ptr;
        int     temp, cnt, i;
 
-#if 0
-u_char *pta;
-
-pta = asn1cert;
-for (i = 0; i < len; i++)
-printf("%02x:", 0xff & *pta++);
-printf("\n%x %ld\n", asn1cert, len);
-#endif
-
        /*
         * Decode ASN.1 objects and construct certificate structure.
         */
        uptr = asn1cert;
-       if ((cert = d2i_X509(NULL, (u_char **)&uptr, len)) == NULL) {
+       if ((cert = d2i_X509(NULL, (const u_char **)&uptr, len)) ==
+           NULL) {
                msyslog(LOG_ERR, "cert_parse: %s",
                    ERR_error_string(ERR_get_error(), NULL));
                return (NULL);
@@ -3664,7 +3660,7 @@ crypto_key(
        pkp->link = pkinfo;
        pkinfo = pkp;
        pkp->pkey = pkey;
-       pkp->name = emalloc(sizeof(cp) + 1);
+       pkp->name = emalloc(strlen(cp) + 1);
        pkp->fstamp = fstamp;
        strcpy(pkp->name, cp);
 
@@ -3875,8 +3871,8 @@ crypto_setup(void)
                        printf(
                            "crypto_setup: OpenSSL version %lx random seed file %s bytes read %d\n",
                            SSLeay(), filename, bytes);
-       }
 #endif
+       }
 
        /*
         * Initialize structures.
index 757ada7db381d9d46e1216330e59251896cbaa99..08fb365ee22588069297c9cf6347f1b6a569dfdd 100644 (file)
   #define YYERROR_VERBOSE
   void yyerror (char *msg);
   extern int input_from_file;  /* 0=input from ntpq>config command buffer */
+  extern int cryptosw;
 
-#line 48 "ntp_parser.y"
+#line 49 "ntp_parser.y"
 #ifndef YYSTYPE
 typedef union {
     char   *String;
@@ -369,29 +370,29 @@ static const short yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
 static const short yyrline[] =
 {
-       0,   280,   284,   285,   290,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   320,   326,   335,
-     336,   337,   338,   339,   343,   344,   345,   361,   362,   366,
-     367,   372,   373,   374,   375,   376,   377,   378,   379,   380,
-     381,   382,   383,   384,   394,   396,   398,   400,   411,   413,
-     415,   421,   423,   425,   427,   432,   433,   437,   439,   441,
-     443,   445,   447,   449,   451,   453,   455,   465,   470,   471,
-     475,   477,   479,   481,   483,   485,   487,   489,   491,   493,
-     495,   505,   507,   509,   517,   518,   522,   524,   526,   528,
-     530,   532,   537,   538,   542,   543,   544,   545,   546,   547,
-     551,   552,   553,   554,   555,   556,   557,   566,   568,   573,
-     578,   586,   587,   591,   592,   593,   594,   595,   596,   597,
-     598,   599,   600,   601,   602,   606,   607,   611,   612,   613,
-     621,   626,   627,   631,   633,   635,   637,   639,   641,   643,
-     645,   654,   656,   661,   662,   666,   667,   668,   669,   670,
-     671,   673,   681,   685,   686,   690,   691,   692,   693,   694,
-     695,   696,   704,   720,   726,   728,   730,   732,   734,   737,
-     739,   741,   744,   746,   748,   750,   752,   756,   758,   761,
-     766,   768,   774,   775,   779,   780,   785,   786,   790,   791,
-     808,   809,   810,   819,   820,   824,   825,   829,   830,   834,
-     843,   844,   848,   849,   857,   872,   876,   877,   881,   882,
-     886,   887,   891,   896,   900,   904,   905,   909,   910,   914,
-     919,   920,   924,   926,   928,   930,   932
+       0,   281,   285,   286,   291,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   321,   327,   336,
+     337,   338,   339,   340,   344,   345,   346,   362,   363,   367,
+     368,   373,   374,   375,   376,   377,   378,   379,   380,   381,
+     382,   383,   384,   385,   395,   397,   399,   401,   412,   414,
+     416,   423,   425,   427,   429,   434,   435,   439,   441,   443,
+     445,   447,   449,   451,   453,   455,   457,   467,   472,   473,
+     477,   479,   481,   483,   485,   487,   489,   491,   493,   495,
+     497,   507,   509,   511,   519,   520,   524,   526,   528,   530,
+     532,   534,   539,   540,   544,   545,   546,   547,   548,   549,
+     553,   554,   555,   556,   557,   558,   559,   568,   570,   575,
+     580,   588,   589,   593,   594,   595,   596,   597,   598,   599,
+     600,   601,   602,   603,   604,   608,   609,   613,   614,   615,
+     623,   628,   629,   633,   635,   637,   639,   641,   643,   645,
+     647,   656,   658,   663,   664,   668,   669,   670,   671,   672,
+     673,   675,   683,   687,   688,   692,   693,   694,   695,   696,
+     697,   698,   706,   722,   728,   730,   732,   734,   736,   739,
+     741,   743,   746,   748,   750,   752,   754,   758,   760,   763,
+     768,   770,   776,   777,   781,   782,   787,   788,   792,   793,
+     810,   811,   812,   821,   822,   826,   827,   831,   832,   836,
+     845,   846,   850,   851,   859,   874,   878,   879,   883,   884,
+     888,   889,   893,   898,   902,   906,   907,   911,   912,   916,
+     921,   922,   926,   928,   930,   932,   934
 };
 #endif
 
@@ -1432,7 +1433,7 @@ yyreduce:
   switch (yyn) {
 
 case 4:
-#line 291 "ntp_parser.y"
+#line 292 "ntp_parser.y"
 {
                                        if (input_from_file == 1) {
                        msyslog(LOG_INFO, "parse error %s line %d ignored\n",
@@ -1443,7 +1444,7 @@ case 4:
                 }
     break;
 case 17:
-#line 321 "ntp_parser.y"
+#line 322 "ntp_parser.y"
 {
                         struct peer_node *my_node =  create_peer_node(yyvsp[-2].Integer, yyvsp[-1].Address_node, yyvsp[0].Queue);
                         if (my_node)
@@ -1451,7 +1452,7 @@ case 17:
                     }
     break;
 case 18:
-#line 327 "ntp_parser.y"
+#line 328 "ntp_parser.y"
 {
                         struct peer_node *my_node = create_peer_node(yyvsp[-1].Integer, yyvsp[0].Address_node, NULL);
                         if (my_node)
@@ -1459,35 +1460,35 @@ case 18:
                     }
     break;
 case 19:
-#line 335 "ntp_parser.y"
+#line 336 "ntp_parser.y"
 { yyval.Integer = T_Server; }
     break;
 case 20:
-#line 336 "ntp_parser.y"
+#line 337 "ntp_parser.y"
 { yyval.Integer = T_Pool; }
     break;
 case 21:
-#line 337 "ntp_parser.y"
+#line 338 "ntp_parser.y"
 { yyval.Integer = T_Peer; }
     break;
 case 22:
-#line 338 "ntp_parser.y"
+#line 339 "ntp_parser.y"
 { yyval.Integer = T_Broadcast; }
     break;
 case 23:
-#line 339 "ntp_parser.y"
+#line 340 "ntp_parser.y"
 { yyval.Integer = T_Manycastclient; }
     break;
 case 24:
-#line 343 "ntp_parser.y"
+#line 344 "ntp_parser.y"
 { yyval.Address_node = yyvsp[0].Address_node; }
     break;
 case 25:
-#line 344 "ntp_parser.y"
+#line 345 "ntp_parser.y"
 { yyval.Address_node = create_address_node(yyvsp[0].String, default_ai_family); }
     break;
 case 26:
-#line 346 "ntp_parser.y"
+#line 347 "ntp_parser.y"
 {
                         if (yyvsp[-1].Integer == -4)
                             yyval.Address_node = create_address_node(yyvsp[0].String, AF_INET);
@@ -1500,563 +1501,564 @@ case 26:
                     }
     break;
 case 27:
-#line 361 "ntp_parser.y"
+#line 362 "ntp_parser.y"
 { yyval.Address_node = create_address_node(yyvsp[0].String, AF_INET); }
     break;
 case 28:
-#line 362 "ntp_parser.y"
+#line 363 "ntp_parser.y"
 { yyval.Address_node = create_address_node(yyvsp[0].String, AF_INET6); }
     break;
 case 29:
-#line 366 "ntp_parser.y"
+#line 367 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Attr_val); }
     break;
 case 30:
-#line 367 "ntp_parser.y"
+#line 368 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Attr_val); }
     break;
 case 31:
-#line 372 "ntp_parser.y"
+#line 373 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, FLAG_SKEY | FLAG_AUTHENABLE); }
     break;
 case 32:
-#line 373 "ntp_parser.y"
+#line 374 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, FLAG_BURST); }
     break;
 case 33:
-#line 374 "ntp_parser.y"
+#line 375 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, FLAG_IBURST); }
     break;
 case 34:
-#line 375 "ntp_parser.y"
+#line 376 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Key, yyvsp[0].Integer); }
     break;
 case 35:
-#line 376 "ntp_parser.y"
+#line 377 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Minpoll, yyvsp[0].Integer); }
     break;
 case 36:
-#line 377 "ntp_parser.y"
+#line 378 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Maxpoll, yyvsp[0].Integer); }
     break;
 case 37:
-#line 378 "ntp_parser.y"
+#line 379 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, FLAG_NOSELECT);}
     break;
 case 38:
-#line 379 "ntp_parser.y"
+#line 380 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, FLAG_PREEMPT); }
     break;
 case 39:
-#line 380 "ntp_parser.y"
+#line 381 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, FLAG_PREFER); }
     break;
 case 40:
-#line 381 "ntp_parser.y"
+#line 382 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, FLAG_TRUE); }
     break;
 case 41:
-#line 382 "ntp_parser.y"
+#line 383 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Ttl, yyvsp[0].Integer); }
     break;
 case 42:
-#line 383 "ntp_parser.y"
+#line 384 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Mode, yyvsp[0].Integer); }
     break;
 case 43:
-#line 384 "ntp_parser.y"
+#line 385 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Version, yyvsp[0].Integer); }
     break;
 case 44:
-#line 395 "ntp_parser.y"
+#line 396 "ntp_parser.y"
 { my_config.broadcastclient = SIMPLE; }
     break;
 case 45:
-#line 397 "ntp_parser.y"
+#line 398 "ntp_parser.y"
 { my_config.broadcastclient = NOVOLLEY;  }
     break;
 case 46:
-#line 399 "ntp_parser.y"
+#line 400 "ntp_parser.y"
 { append_queue(my_config.manycastserver, yyvsp[0].Queue);  }
     break;
 case 47:
-#line 401 "ntp_parser.y"
+#line 402 "ntp_parser.y"
 { append_queue(my_config.multicastclient, yyvsp[0].Queue);  }
     break;
 case 48:
-#line 412 "ntp_parser.y"
+#line 413 "ntp_parser.y"
 { my_config.auth.autokey = yyvsp[0].Integer;  }
     break;
 case 49:
-#line 414 "ntp_parser.y"
+#line 415 "ntp_parser.y"
 { my_config.auth.control_key = yyvsp[0].Integer;  }
     break;
 case 50:
-#line 416 "ntp_parser.y"
+#line 417 "ntp_parser.y"
 { if (my_config.auth.crypto_cmd_list != NULL)
                                        append_queue(my_config.auth.crypto_cmd_list, yyvsp[0].Queue);
                                else
                                        my_config.auth.crypto_cmd_list = yyvsp[0].Queue;
+                       cryptosw++;
                        }
     break;
 case 51:
-#line 422 "ntp_parser.y"
+#line 424 "ntp_parser.y"
 { my_config.auth.keys = yyvsp[0].String;  }
     break;
 case 52:
-#line 424 "ntp_parser.y"
+#line 426 "ntp_parser.y"
 { my_config.auth.keysdir = yyvsp[0].String;  }
     break;
 case 53:
-#line 426 "ntp_parser.y"
+#line 428 "ntp_parser.y"
 { my_config.auth.requested_key = yyvsp[0].Integer;  }
     break;
 case 54:
-#line 428 "ntp_parser.y"
+#line 430 "ntp_parser.y"
 { my_config.auth.trusted_key_list = yyvsp[0].Queue;  }
     break;
 case 55:
-#line 432 "ntp_parser.y"
+#line 434 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Attr_val); }
     break;
 case 56:
-#line 433 "ntp_parser.y"
+#line 435 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Attr_val); }
     break;
 case 57:
-#line 438 "ntp_parser.y"
+#line 440 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(CRYPTO_CONF_CERT, yyvsp[0].String); }
     break;
 case 58:
-#line 440 "ntp_parser.y"
+#line 442 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(CRYPTO_CONF_GQPAR, yyvsp[0].String); }
     break;
 case 59:
-#line 442 "ntp_parser.y"
+#line 444 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(CRYPTO_CONF_PRIV, yyvsp[0].String); }
     break;
 case 60:
-#line 444 "ntp_parser.y"
+#line 446 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(CRYPTO_CONF_IDENT, yyvsp[0].String); }
     break;
 case 61:
-#line 446 "ntp_parser.y"
+#line 448 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(CRYPTO_CONF_IFFPAR, yyvsp[0].String); }
     break;
 case 62:
-#line 448 "ntp_parser.y"
+#line 450 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(CRYPTO_CONF_MVPAR, yyvsp[0].String); }
     break;
 case 63:
-#line 450 "ntp_parser.y"
+#line 452 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(CRYPTO_CONF_PW, yyvsp[0].String); }
     break;
 case 64:
-#line 452 "ntp_parser.y"
+#line 454 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(CRYPTO_CONF_RAND, yyvsp[0].String); }
     break;
 case 65:
-#line 454 "ntp_parser.y"
+#line 456 "ntp_parser.y"
 { my_config.auth.revoke = yyvsp[0].Integer;  }
     break;
 case 66:
-#line 456 "ntp_parser.y"
+#line 458 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(CRYPTO_CONF_SIGN, yyvsp[0].String); }
     break;
 case 67:
-#line 466 "ntp_parser.y"
+#line 468 "ntp_parser.y"
 { append_queue(my_config.orphan_cmds,yyvsp[0].Queue);  }
     break;
 case 68:
-#line 470 "ntp_parser.y"
+#line 472 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Attr_val); }
     break;
 case 69:
-#line 471 "ntp_parser.y"
+#line 473 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Attr_val); }
     break;
 case 70:
-#line 476 "ntp_parser.y"
+#line 478 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_CEILING, (double)yyvsp[0].Integer); }
     break;
 case 71:
-#line 478 "ntp_parser.y"
+#line 480 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_FLOOR, (double)yyvsp[0].Integer); }
     break;
 case 72:
-#line 480 "ntp_parser.y"
+#line 482 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_COHORT, (double)yyvsp[0].Integer); }
     break;
 case 73:
-#line 482 "ntp_parser.y"
+#line 484 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_ORPHAN, (double)yyvsp[0].Integer); }
     break;
 case 74:
-#line 484 "ntp_parser.y"
+#line 486 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_MINDISP, yyvsp[0].Double); }
     break;
 case 75:
-#line 486 "ntp_parser.y"
+#line 488 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_MAXDIST, yyvsp[0].Double); }
     break;
 case 76:
-#line 488 "ntp_parser.y"
+#line 490 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_MINCLOCK, yyvsp[0].Double); }
     break;
 case 77:
-#line 490 "ntp_parser.y"
+#line 492 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_MAXCLOCK, yyvsp[0].Double); }
     break;
 case 78:
-#line 492 "ntp_parser.y"
+#line 494 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_MINSANE, (double)yyvsp[0].Integer); }
     break;
 case 79:
-#line 494 "ntp_parser.y"
+#line 496 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_BEACON, (double)yyvsp[0].Integer); }
     break;
 case 80:
-#line 496 "ntp_parser.y"
+#line 498 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(PROTO_MAXHOP, (double)yyvsp[0].Integer); }
     break;
 case 81:
-#line 506 "ntp_parser.y"
+#line 508 "ntp_parser.y"
 { append_queue(my_config.stats_list, yyvsp[0].Queue);  }
     break;
 case 82:
-#line 508 "ntp_parser.y"
+#line 510 "ntp_parser.y"
 { my_config.stats_dir = yyvsp[0].String;  }
     break;
 case 83:
-#line 510 "ntp_parser.y"
+#line 512 "ntp_parser.y"
 {
                         enqueue(my_config.filegen_opts,
                                 create_filegen_node(yyvsp[-1].VoidPtr, yyvsp[0].Queue));
                     }
     break;
 case 84:
-#line 517 "ntp_parser.y"
+#line 519 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].VoidPtr); }
     break;
 case 85:
-#line 518 "ntp_parser.y"
+#line 520 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].VoidPtr); }
     break;
 case 86:
-#line 523 "ntp_parser.y"
+#line 525 "ntp_parser.y"
 { yyval.VoidPtr = create_pval("clockstats"); }
     break;
 case 87:
-#line 525 "ntp_parser.y"
+#line 527 "ntp_parser.y"
 { yyval.VoidPtr = create_pval("cryptostats"); }
     break;
 case 88:
-#line 527 "ntp_parser.y"
+#line 529 "ntp_parser.y"
 { yyval.VoidPtr = create_pval("loopstats"); }
     break;
 case 89:
-#line 529 "ntp_parser.y"
+#line 531 "ntp_parser.y"
 { yyval.VoidPtr = create_pval("peerstats"); }
     break;
 case 90:
-#line 531 "ntp_parser.y"
+#line 533 "ntp_parser.y"
 { yyval.VoidPtr = create_pval("rawstats"); }
     break;
 case 91:
-#line 533 "ntp_parser.y"
+#line 535 "ntp_parser.y"
 { yyval.VoidPtr = create_pval("sysstats"); }
     break;
 case 92:
-#line 537 "ntp_parser.y"
+#line 539 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Attr_val); }
     break;
 case 93:
-#line 538 "ntp_parser.y"
+#line 540 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Attr_val); }
     break;
 case 94:
-#line 542 "ntp_parser.y"
+#line 544 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(T_File, yyvsp[0].String); }
     break;
 case 95:
-#line 543 "ntp_parser.y"
+#line 545 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Type, yyvsp[0].Integer); }
     break;
 case 96:
-#line 544 "ntp_parser.y"
+#line 546 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, T_Link); }
     break;
 case 97:
-#line 545 "ntp_parser.y"
+#line 547 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, T_Nolink); }
     break;
 case 98:
-#line 546 "ntp_parser.y"
+#line 548 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, T_Enable); }
     break;
 case 99:
-#line 547 "ntp_parser.y"
+#line 549 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, T_Disable); }
     break;
 case 100:
-#line 551 "ntp_parser.y"
+#line 553 "ntp_parser.y"
 { yyval.Integer = FILEGEN_NONE; }
     break;
 case 101:
-#line 552 "ntp_parser.y"
+#line 554 "ntp_parser.y"
 { yyval.Integer = FILEGEN_PID; }
     break;
 case 102:
-#line 553 "ntp_parser.y"
+#line 555 "ntp_parser.y"
 { yyval.Integer = FILEGEN_DAY; }
     break;
 case 103:
-#line 554 "ntp_parser.y"
+#line 556 "ntp_parser.y"
 { yyval.Integer = FILEGEN_WEEK; }
     break;
 case 104:
-#line 555 "ntp_parser.y"
+#line 557 "ntp_parser.y"
 { yyval.Integer = FILEGEN_MONTH; }
     break;
 case 105:
-#line 556 "ntp_parser.y"
+#line 558 "ntp_parser.y"
 { yyval.Integer = FILEGEN_YEAR; }
     break;
 case 106:
-#line 557 "ntp_parser.y"
+#line 559 "ntp_parser.y"
 { yyval.Integer = FILEGEN_AGE; }
     break;
 case 107:
-#line 567 "ntp_parser.y"
+#line 569 "ntp_parser.y"
 {   append_queue(my_config.discard_opts, yyvsp[0].Queue); }
     break;
 case 108:
-#line 569 "ntp_parser.y"
+#line 571 "ntp_parser.y"
 {
                         enqueue(my_config.restrict_opts,
                                 create_restrict_node(yyvsp[-1].Address_node, NULL, yyvsp[0].Queue, ip_file->line_no));
                     }
     break;
 case 109:
-#line 574 "ntp_parser.y"
+#line 576 "ntp_parser.y"
 {
                         enqueue(my_config.restrict_opts,
                                 create_restrict_node(NULL, NULL, yyvsp[0].Queue, ip_file->line_no));
                     }
     break;
 case 110:
-#line 579 "ntp_parser.y"
+#line 581 "ntp_parser.y"
 {
                         enqueue(my_config.restrict_opts,
                                 create_restrict_node(yyvsp[-3].Address_node, yyvsp[-1].Address_node, yyvsp[0].Queue, ip_file->line_no));
                     }
     break;
 case 111:
-#line 586 "ntp_parser.y"
+#line 588 "ntp_parser.y"
 { yyval.Queue = create_queue(); }
     break;
 case 112:
-#line 587 "ntp_parser.y"
+#line 589 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].VoidPtr); }
     break;
 case 113:
-#line 591 "ntp_parser.y"
+#line 593 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_IGNORE); }
     break;
 case 114:
-#line 592 "ntp_parser.y"
+#line 594 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_DEMOBILIZE); }
     break;
 case 115:
-#line 593 "ntp_parser.y"
+#line 595 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_LIMITED); }
     break;
 case 116:
-#line 594 "ntp_parser.y"
+#line 596 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_LPTRAP); }
     break;
 case 117:
-#line 595 "ntp_parser.y"
+#line 597 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_NOMODIFY); }
     break;
 case 118:
-#line 596 "ntp_parser.y"
+#line 598 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_NOPEER); }
     break;
 case 119:
-#line 597 "ntp_parser.y"
+#line 599 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_NOQUERY); }
     break;
 case 120:
-#line 598 "ntp_parser.y"
+#line 600 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_DONTSERVE); }
     break;
 case 121:
-#line 599 "ntp_parser.y"
+#line 601 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_NOTRAP); }
     break;
 case 122:
-#line 600 "ntp_parser.y"
+#line 602 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_DONTTRUST); }
     break;
 case 123:
-#line 601 "ntp_parser.y"
+#line 603 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RESM_NTPONLY); }
     break;
 case 124:
-#line 602 "ntp_parser.y"
+#line 604 "ntp_parser.y"
 { yyval.VoidPtr = create_ival(RES_VERSION); }
     break;
 case 125:
-#line 606 "ntp_parser.y"
+#line 608 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Attr_val); }
     break;
 case 126:
-#line 607 "ntp_parser.y"
+#line 609 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Attr_val); }
     break;
 case 127:
-#line 611 "ntp_parser.y"
+#line 613 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Average, yyvsp[0].Integer); }
     break;
 case 128:
-#line 612 "ntp_parser.y"
+#line 614 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Minimum, yyvsp[0].Integer); }
     break;
 case 129:
-#line 613 "ntp_parser.y"
+#line 615 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Monitor, yyvsp[0].Integer); }
     break;
 case 130:
-#line 622 "ntp_parser.y"
+#line 624 "ntp_parser.y"
 { enqueue(my_config.fudge, create_addr_opts_node(yyvsp[-1].Address_node, yyvsp[0].Queue));  }
     break;
 case 131:
-#line 626 "ntp_parser.y"
+#line 628 "ntp_parser.y"
 { enqueue(yyvsp[-1].Queue, yyvsp[0].Attr_val); }
     break;
 case 132:
-#line 627 "ntp_parser.y"
+#line 629 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Attr_val); }
     break;
 case 133:
-#line 632 "ntp_parser.y"
+#line 634 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(CLK_HAVETIME1, yyvsp[0].Double); }
     break;
 case 134:
-#line 634 "ntp_parser.y"
+#line 636 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(CLK_HAVETIME2, yyvsp[0].Double); }
     break;
 case 135:
-#line 636 "ntp_parser.y"
+#line 638 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(CLK_HAVEVAL1,  yyvsp[0].Integer); }
     break;
 case 136:
-#line 638 "ntp_parser.y"
+#line 640 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(CLK_HAVEVAL2,  yyvsp[0].String); }
     break;
 case 137:
-#line 640 "ntp_parser.y"
+#line 642 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(CLK_HAVEFLAG1, yyvsp[0].Integer); }
     break;
 case 138:
-#line 642 "ntp_parser.y"
+#line 644 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(CLK_HAVEFLAG2, yyvsp[0].Integer); }
     break;
 case 139:
-#line 644 "ntp_parser.y"
+#line 646 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(CLK_HAVEFLAG3, yyvsp[0].Integer); }
     break;
 case 140:
-#line 646 "ntp_parser.y"
+#line 648 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(CLK_HAVEFLAG4, yyvsp[0].Integer); }
     break;
 case 141:
-#line 655 "ntp_parser.y"
+#line 657 "ntp_parser.y"
 { append_queue(my_config.enable_opts,yyvsp[0].Queue);  }
     break;
 case 142:
-#line 657 "ntp_parser.y"
+#line 659 "ntp_parser.y"
 { append_queue(my_config.disable_opts,yyvsp[0].Queue);  }
     break;
 case 143:
-#line 661 "ntp_parser.y"
+#line 663 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Attr_val); }
     break;
 case 144:
-#line 662 "ntp_parser.y"
+#line 664 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Attr_val); }
     break;
 case 145:
-#line 666 "ntp_parser.y"
+#line 668 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, PROTO_AUTHENTICATE); }
     break;
 case 146:
-#line 667 "ntp_parser.y"
+#line 669 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, PROTO_BROADCLIENT); }
     break;
 case 147:
-#line 668 "ntp_parser.y"
+#line 670 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, PROTO_CAL); }
     break;
 case 148:
-#line 669 "ntp_parser.y"
+#line 671 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, PROTO_KERNEL); }
     break;
 case 149:
-#line 670 "ntp_parser.y"
+#line 672 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, PROTO_MONITOR); }
     break;
 case 150:
-#line 671 "ntp_parser.y"
+#line 673 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, PROTO_NTP); }
     break;
 case 151:
-#line 673 "ntp_parser.y"
+#line 675 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Flag, PROTO_FILEGEN); }
     break;
 case 152:
-#line 681 "ntp_parser.y"
+#line 683 "ntp_parser.y"
 { append_queue(my_config.tinker, yyvsp[0].Queue);  }
     break;
 case 153:
-#line 685 "ntp_parser.y"
+#line 687 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Attr_val); }
     break;
 case 154:
-#line 686 "ntp_parser.y"
+#line 688 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Attr_val); }
     break;
 case 155:
-#line 690 "ntp_parser.y"
+#line 692 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(LOOP_ALLAN, yyvsp[0].Double); }
     break;
 case 156:
-#line 691 "ntp_parser.y"
+#line 693 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(LOOP_PHI, yyvsp[0].Double); }
     break;
 case 157:
-#line 692 "ntp_parser.y"
+#line 694 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(LOOP_FREQ, yyvsp[0].Double); }
     break;
 case 158:
-#line 693 "ntp_parser.y"
+#line 695 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(LOOP_HUFFPUFF, yyvsp[0].Double); }
     break;
 case 159:
-#line 694 "ntp_parser.y"
+#line 696 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(LOOP_PANIC, yyvsp[0].Double); }
     break;
 case 160:
-#line 695 "ntp_parser.y"
+#line 697 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(LOOP_MAX, yyvsp[0].Double); }
     break;
 case 161:
-#line 696 "ntp_parser.y"
+#line 698 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(LOOP_MINSTEP, yyvsp[0].Double); }
     break;
 case 162:
-#line 705 "ntp_parser.y"
+#line 707 "ntp_parser.y"
 {
                     if (curr_include_level >= MAXINCLUDELEVEL) {
                         fprintf(stderr, "getconfig: Maximum include file level exceeded.\n");
@@ -2074,116 +2076,116 @@ case 162:
                 }
     break;
 case 163:
-#line 721 "ntp_parser.y"
+#line 723 "ntp_parser.y"
 {
                     while (curr_include_level != -1)
                         FCLOSE(fp[curr_include_level--]);
                 }
     break;
 case 164:
-#line 727 "ntp_parser.y"
+#line 729 "ntp_parser.y"
 { enqueue(my_config.vars, create_attr_dval(T_Broadcastdelay, yyvsp[0].Double));  }
     break;
 case 165:
-#line 729 "ntp_parser.y"
+#line 731 "ntp_parser.y"
 { enqueue(my_config.vars, create_attr_ival(T_Calldelay, yyvsp[0].Integer));  }
     break;
 case 166:
-#line 731 "ntp_parser.y"
+#line 733 "ntp_parser.y"
 { enqueue(my_config.vars, create_attr_dval(T_Tick, yyvsp[0].Double));  }
     break;
 case 167:
-#line 733 "ntp_parser.y"
+#line 735 "ntp_parser.y"
 { /* Null action, possibly all null parms */ }
     break;
 case 168:
-#line 735 "ntp_parser.y"
+#line 737 "ntp_parser.y"
 { enqueue(my_config.vars, create_attr_sval(T_Leapfile, yyvsp[0].String)); }
     break;
 case 169:
-#line 738 "ntp_parser.y"
+#line 740 "ntp_parser.y"
 { enqueue(my_config.vars, create_attr_sval(T_Pidfile, yyvsp[0].String));  }
     break;
 case 170:
-#line 740 "ntp_parser.y"
+#line 742 "ntp_parser.y"
 { enqueue(my_config.vars, create_attr_sval(T_Logfile, yyvsp[0].String));  }
     break;
 case 171:
-#line 742 "ntp_parser.y"
+#line 744 "ntp_parser.y"
 { enqueue(my_config.vars, create_attr_ival(T_Automax, yyvsp[0].Integer));  }
     break;
 case 172:
-#line 745 "ntp_parser.y"
+#line 747 "ntp_parser.y"
 { append_queue(my_config.logconfig, yyvsp[0].Queue);  }
     break;
 case 173:
-#line 747 "ntp_parser.y"
+#line 749 "ntp_parser.y"
 { append_queue(my_config.phone, yyvsp[0].Queue);  }
     break;
 case 174:
-#line 749 "ntp_parser.y"
+#line 751 "ntp_parser.y"
 { enqueue(my_config.setvar, yyvsp[0].Set_var);  }
     break;
 case 175:
-#line 751 "ntp_parser.y"
+#line 753 "ntp_parser.y"
 { enqueue(my_config.trap, create_addr_opts_node(yyvsp[-1].Address_node, yyvsp[0].Queue));  }
     break;
 case 176:
-#line 753 "ntp_parser.y"
+#line 755 "ntp_parser.y"
 { append_queue(my_config.ttl, yyvsp[0].Queue); }
     break;
 case 177:
-#line 757 "ntp_parser.y"
+#line 759 "ntp_parser.y"
 { enqueue(my_config.vars, create_attr_sval(T_Driftfile, yyvsp[0].String)); }
     break;
 case 178:
-#line 759 "ntp_parser.y"
+#line 761 "ntp_parser.y"
 { enqueue(my_config.vars, create_attr_dval(T_WanderThreshold, yyvsp[0].Double));
                  enqueue(my_config.vars, create_attr_sval(T_Driftfile, yyvsp[-1].String)); }
     break;
 case 179:
-#line 761 "ntp_parser.y"
+#line 763 "ntp_parser.y"
 { /* Null driftfile,  indicated by null string "\0" */
                  enqueue(my_config.vars, create_attr_sval(T_Driftfile, "\0")); }
     break;
 case 180:
-#line 767 "ntp_parser.y"
+#line 769 "ntp_parser.y"
 { yyval.Set_var = create_setvar_node(yyvsp[-3].String, yyvsp[-1].String, DEF); }
     break;
 case 181:
-#line 769 "ntp_parser.y"
+#line 771 "ntp_parser.y"
 { yyval.Set_var = create_setvar_node(yyvsp[-2].String, yyvsp[0].String, 0); }
     break;
 case 182:
-#line 774 "ntp_parser.y"
+#line 776 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Attr_val); }
     break;
 case 183:
-#line 775 "ntp_parser.y"
+#line 777 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Attr_val); }
     break;
 case 184:
-#line 779 "ntp_parser.y"
+#line 781 "ntp_parser.y"
 { yyval.Attr_val = create_attr_ival(T_Port, yyvsp[0].Integer); }
     break;
 case 185:
-#line 780 "ntp_parser.y"
+#line 782 "ntp_parser.y"
 { yyval.Attr_val = create_attr_pval(T_Interface, yyvsp[0].Address_node); }
     break;
 case 186:
-#line 785 "ntp_parser.y"
+#line 787 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Attr_val); }
     break;
 case 187:
-#line 786 "ntp_parser.y"
+#line 788 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Attr_val); }
     break;
 case 188:
-#line 790 "ntp_parser.y"
+#line 792 "ntp_parser.y"
 { yyval.Attr_val = create_attr_sval(yyvsp[-1].Integer, yyvsp[0].String); }
     break;
 case 189:
-#line 792 "ntp_parser.y"
+#line 794 "ntp_parser.y"
 {
                     /* YUCK!! This is needed because '+' and '-' are not special characters
                      * while '=' is.
@@ -2199,43 +2201,43 @@ case 189:
                 }
     break;
 case 190:
-#line 808 "ntp_parser.y"
+#line 810 "ntp_parser.y"
 { yyval.Integer = '+'; }
     break;
 case 191:
-#line 809 "ntp_parser.y"
+#line 811 "ntp_parser.y"
 { yyval.Integer = '-'; }
     break;
 case 192:
-#line 810 "ntp_parser.y"
+#line 812 "ntp_parser.y"
 { yyval.Integer = '='; }
     break;
 case 193:
-#line 819 "ntp_parser.y"
+#line 821 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, create_ival(yyvsp[0].Integer)); }
     break;
 case 194:
-#line 820 "ntp_parser.y"
+#line 822 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(create_ival(yyvsp[0].Integer)); }
     break;
 case 195:
-#line 824 "ntp_parser.y"
+#line 826 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, create_pval(yyvsp[0].String)); }
     break;
 case 196:
-#line 825 "ntp_parser.y"
+#line 827 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(create_pval(yyvsp[0].String)); }
     break;
 case 197:
-#line 829 "ntp_parser.y"
+#line 831 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Address_node); }
     break;
 case 198:
-#line 830 "ntp_parser.y"
+#line 832 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Address_node); }
     break;
 case 199:
-#line 835 "ntp_parser.y"
+#line 837 "ntp_parser.y"
 {
                     if (yyvsp[0].Integer != 0 && yyvsp[0].Integer != 1) {
                         yyerror("Integer value is not boolean (0 or 1). Assuming 1");
@@ -2246,23 +2248,23 @@ case 199:
                 }
     break;
 case 200:
-#line 843 "ntp_parser.y"
+#line 845 "ntp_parser.y"
 { yyval.Integer = 1; }
     break;
 case 201:
-#line 844 "ntp_parser.y"
+#line 846 "ntp_parser.y"
 { yyval.Integer = 0; }
     break;
 case 202:
-#line 848 "ntp_parser.y"
+#line 850 "ntp_parser.y"
 { yyval.Double = (double)yyvsp[0].Integer; }
     break;
 case 203:
-#line 849 "ntp_parser.y"
+#line 851 "ntp_parser.y"
 { yyval.Double = yyvsp[0].Double; }
     break;
 case 204:
-#line 858 "ntp_parser.y"
+#line 860 "ntp_parser.y"
 {
                  my_config.sim_details = create_sim_node(yyvsp[-2].Queue, yyvsp[-1].Queue);
 
@@ -2271,91 +2273,91 @@ case 204:
              }
     break;
 case 205:
-#line 872 "ntp_parser.y"
+#line 874 "ntp_parser.y"
 { old_config_style = 0; }
     break;
 case 206:
-#line 876 "ntp_parser.y"
+#line 878 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-2].Queue, yyvsp[-1].Attr_val); }
     break;
 case 207:
-#line 877 "ntp_parser.y"
+#line 879 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[-1].Attr_val); }
     break;
 case 208:
-#line 881 "ntp_parser.y"
+#line 883 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(T_Beep_Delay, yyvsp[0].Double); }
     break;
 case 209:
-#line 882 "ntp_parser.y"
+#line 884 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(T_Sim_Duration, yyvsp[0].Double); }
     break;
 case 210:
-#line 886 "ntp_parser.y"
+#line 888 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Sim_server); }
     break;
 case 211:
-#line 887 "ntp_parser.y"
+#line 889 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Sim_server); }
     break;
 case 212:
-#line 892 "ntp_parser.y"
+#line 894 "ntp_parser.y"
 { yyval.Sim_server = create_sim_server(yyvsp[-4].Address_node, yyvsp[-2].Double, yyvsp[-1].Queue); }
     break;
 case 213:
-#line 896 "ntp_parser.y"
+#line 898 "ntp_parser.y"
 { yyval.Double = yyvsp[-1].Double; }
     break;
 case 214:
-#line 900 "ntp_parser.y"
+#line 902 "ntp_parser.y"
 { yyval.Address_node = yyvsp[0].Address_node; }
     break;
 case 215:
-#line 904 "ntp_parser.y"
+#line 906 "ntp_parser.y"
 { yyval.Address_node = yyvsp[0].Address_node; }
     break;
 case 216:
-#line 905 "ntp_parser.y"
+#line 907 "ntp_parser.y"
 { yyval.Address_node = create_address_node(yyvsp[0].String, T_String); }
     break;
 case 217:
-#line 909 "ntp_parser.y"
+#line 911 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-1].Queue, yyvsp[0].Sim_script); }
     break;
 case 218:
-#line 910 "ntp_parser.y"
+#line 912 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[0].Sim_script); }
     break;
 case 219:
-#line 915 "ntp_parser.y"
+#line 917 "ntp_parser.y"
 { yyval.Sim_script = create_sim_script_info(yyvsp[-3].Double, yyvsp[-1].Queue); }
     break;
 case 220:
-#line 919 "ntp_parser.y"
+#line 921 "ntp_parser.y"
 { yyval.Queue = enqueue(yyvsp[-2].Queue, yyvsp[-1].Attr_val); }
     break;
 case 221:
-#line 920 "ntp_parser.y"
+#line 922 "ntp_parser.y"
 { yyval.Queue = enqueue_in_new_queue(yyvsp[-1].Attr_val); }
     break;
 case 222:
-#line 925 "ntp_parser.y"
+#line 927 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(T_Freq_Offset, yyvsp[0].Double); }
     break;
 case 223:
-#line 927 "ntp_parser.y"
+#line 929 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(T_Wander, yyvsp[0].Double); }
     break;
 case 224:
-#line 929 "ntp_parser.y"
+#line 931 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(T_Jitter, yyvsp[0].Double); }
     break;
 case 225:
-#line 931 "ntp_parser.y"
+#line 933 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(T_Prop_Delay, yyvsp[0].Double); }
     break;
 case 226:
-#line 933 "ntp_parser.y"
+#line 935 "ntp_parser.y"
 { yyval.Attr_val = create_attr_dval(T_Proc_Delay, yyvsp[0].Double); }
     break;
 }
@@ -2591,7 +2593,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 937 "ntp_parser.y"
+#line 939 "ntp_parser.y"
 
 
 /* KEYWORDS
index e839415ab575b53a850dd545798f0b5e69aef984..28b52ddd084ceeb14e0330a2a88ae1ec926321da 100644 (file)
@@ -43,6 +43,7 @@
   #define YYERROR_VERBOSE
   void yyerror (char *msg);
   extern int input_from_file;  /* 0=input from ntpq>config command buffer */
+  extern int cryptosw;
 %}
 
 %union {
@@ -417,6 +418,7 @@ authentication_command
                                        append_queue(my_config.auth.crypto_cmd_list, $2);
                                else
                                        my_config.auth.crypto_cmd_list = $2;
+                       cryptosw++;
                        }
        |       T_Keys T_String
                     { my_config.auth.keys = $2;  }
index c4a0ae7e444edb02de2ac31e405e017e958a7a26..dbbb75d7c30bc43518e9eb428102b67e5a6108db 100644 (file)
@@ -312,6 +312,12 @@ hack_restrict(
        memset(&mask6, 0, sizeof(struct in6_addr)); 
 
        if (resaddr->ss_family == AF_INET) {
+#ifdef DEBUG
+        if (debug)
+               printf("restrict: addr %08x mask %08x mflags %08x flags %08x\n",
+                   SRCADR(resaddr), SRCADR(resmask), mflags, flags);
+#endif
+
                /*
                 * Get address and mask in host byte order
                 */
@@ -405,7 +411,6 @@ hack_restrict(
         * points to the entry prior to where this one should go in
         * the sort.
         */
-
        /*
         * Switch based on operation
         */