Deleted Added
full compact
21,24d20
< #ifdef PUBKEY
< # include "ntp_crypto.h"
< #endif /* PUBKEY */
<
44a41,42
> #include <netdb.h>
>
54d51
<
56,91d52
< * We understand the following configuration entries and defaults.
< *
< * peer [ addr ] [ version 3 ] [ key 0 ] [ minpoll 6 ] [ maxpoll 10 ]
< * server [ addr ] [ version 3 ] [ key 0 ] [ minpoll 6 ] [ maxpoll 10 ]
< * broadcast [ addr ] [ version 3 ] [ key 0 ] [ ttl 1 ]
< * broadcastclient
< * multicastclient [ 224.0.1.1 ]
< * manycastclient [ addr ] [ version 3 ] [ key 0 ] [ minpoll 6 ] [ maxpoll 10 ]
< * manycastserver [ 224.0.1.1 ]
< * broadcastdelay 0.0102
< * restrict [ addr ] [ mask 255.255.255.0 ] ignore|noserve|notrust|noquery
< * driftfile file_name
< * keys file_name
< * publickey file_name
< * privatekey file_name
< * statsdir /var/NTP/
< * filegen peerstats [ file peerstats ] [ type day ] [ link ]
< * clientlimit [ n ]
< * clientperiod [ 3600 ]
< * trustedkey [ key ]
< * requestkey [ key]
< * controlkey [ key ]
< * trap [ addr ]
< * fudge [ addr ] [ stratum ] [ refid ] ...
< * pidfile [ ]
< * setvar [ ]
< * logfile logfile
< * logconfig [+|-|=][{sync|sys|peer|clock}{{,all}{info|statistics|events|status}}]...
< * enable auth|bclient|pll|kernel|monitor|stats|calibrate
< * disable auth|bclient|pll|kernel|monitor|stats|calibrate
< * phone ...
< * pps device [assert|clear] [hardpps]
< * priority high|normal
< */
<
< /*
103d63
< { "authenticate", CONFIG_AUTHENTICATE },
108,110c68,69
< { "clientlimit", CONFIG_CLIENTLIMIT },
< { "clientperiod", CONFIG_CLIENTPERIOD },
< #ifdef PUBKEY
---
> { "calldelay", CONFIG_CDELAY},
> #ifdef OPENSSL
112c71
< #endif /* PUBKEY */
---
> #endif /* OPENSSL */
121d79
< #ifdef PUBKEY
123d80
< #endif /* PUBKEY */
132c89
< { "pps", CONFIG_PPS },
---
> { "discard", CONFIG_DISCARD },
139a97
> { "tick", CONFIG_ADJ },
140a99
> { "tos", CONFIG_TOS },
142a102
> { "ttl", CONFIG_TTL },
159,161d118
< #ifdef PUBKEY
< { "publickey", CONF_MOD_PUBLICKEY },
< #endif /* PUBKEY */
211d167
<
255c211
< * "pps" modifier keywords
---
> * "discard" modifier keywords
257,260c213,216
< static struct keyword pps_keywords[] = {
< { "assert", CONF_PPS_ASSERT },
< { "clear", CONF_PPS_CLEAR },
< { "hardpps", CONF_PPS_HARDPPS },
---
> static struct keyword discard_keywords[] = {
> { "average", CONF_DISCARD_AVERAGE },
> { "minimum", CONF_DISCARD_MINIMUM },
> { "monitor", CONF_DISCARD_MONITOR },
272d227
< { "minpoll", CONF_CLOCK_MINPOLL },
274a230
> { "freq", CONF_CLOCK_FREQ },
278d233
< #ifdef PUBKEY
279a235,247
> * "tos" modifier keywords
> */
> static struct keyword tos_keywords[] = {
> { "minclock", CONF_TOS_MINCLOCK },
> { "minsane", CONF_TOS_MINSANE },
> { "floor", CONF_TOS_FLOOR },
> { "ceiling", CONF_TOS_CEILING },
> { "cohort", CONF_TOS_COHORT },
> { "", CONFIG_UNKNOWN }
> };
>
> #ifdef OPENSSL
> /*
283,284c251,254
< { "dh", CONF_CRYPTO_DH },
< { "flags", CONF_CRYPTO_FLAGS },
---
> { "cert", CONF_CRYPTO_CERT },
> { "gqpar", CONF_CRYPTO_GQPAR },
> { "host", CONF_CRYPTO_RSA },
> { "iffpar", CONF_CRYPTO_IFFPAR },
286,287c256,259
< { "privatekey", CONF_CRYPTO_PRIVATEKEY },
< { "publickey", CONF_CRYPTO_PUBLICKEY },
---
> { "mvpar", CONF_CRYPTO_MVPAR },
> { "pw", CONF_CRYPTO_PW },
> { "randfile", CONF_CRYPTO_RAND },
> { "sign", CONF_CRYPTO_SIGN },
290c262
< #endif /* PUBKEY */
---
> #endif /* OPENSSL */
292a265,274
> * Address type selection, IPv4 or IPv4.
> * Used on various lines.
> */
> static struct keyword addr_type[] = {
> { "-4", CONF_ADDR_IPV4 },
> { "-6", CONF_ADDR_IPV6 },
> { "", CONFIG_UNKNOWN }
> };
>
> /*
347a330
> int call_resolver = 1; /* ntp-genkeys sets this to 0, for example */
360a344
> char *keysdir = NTP_KEYSDIR; /* crypto keys directory */
362,363d345
< int pps_assert;
< int pps_hardpps;
406,407c388,389
< static int matchkey P((char *, struct keyword *));
< static int getnetnum P((const char *, struct sockaddr_in *, int));
---
> static int matchkey P((char *, struct keyword *, int));
> static int getnetnum P((const char *, struct sockaddr_storage *, int));
412c394
< #if !defined(VMS)
---
> #if !defined(VMS) && !defined(SYS_WINNT)
492a475
> int istart;
504,505c487,488
< struct sockaddr_in peeraddr;
< struct sockaddr_in maskaddr;
---
> struct sockaddr_storage peeraddr;
> struct sockaddr_storage maskaddr;
511c494
< int ntokens;
---
> int ntokens = 0;
630c613,626
< if (!getnetnum(tokens[1], &peeraddr, 0)) {
---
> istart = 1;
> memset((char *)&peeraddr, 0, sizeof(peeraddr));
> switch (matchkey(tokens[istart], addr_type, 0)) {
> case CONF_ADDR_IPV4:
> peeraddr.ss_family = AF_INET;
> istart++;
> break;
> case CONF_ADDR_IPV6:
> peeraddr.ss_family = AF_INET6;
> istart++;
> break;
> }
>
> if (!getnetnum(tokens[istart], &peeraddr, 0)) {
642c638
< ntoa(&peeraddr));
---
> stoa(&peeraddr));
650,651c646,648
< if (((tok == CONFIG_SERVER) ||
< (tok == CONFIG_PEER)) &&
---
> if (peeraddr.ss_family == AF_INET) {
> if (((tok == CONFIG_SERVER) ||
> (tok == CONFIG_PEER)) &&
653c650
< !ISREFCLOCKADR(&peeraddr) &&
---
> !ISREFCLOCKADR(&peeraddr) &&
655,659c652,664
< IN_CLASSD(ntohl(peeraddr.sin_addr.s_addr))) {
< msyslog(LOG_ERR,
< "attempt to configure invalid address %s",
< ntoa(&peeraddr));
< break;
---
> IN_CLASSD(ntohl(((struct sockaddr_in*)&peeraddr)->sin_addr.s_addr))) {
> msyslog(LOG_ERR,
> "attempt to configure invalid address %s",
> stoa(&peeraddr));
> break;
> }
> if ((tok == CONFIG_MANYCASTCLIENT) &&
> !IN_CLASSD(ntohl(((struct sockaddr_in*)&peeraddr)->sin_addr.s_addr))) {
> msyslog(LOG_ERR,
> "attempt to configure invalid address %s",
> stoa(&peeraddr));
> break;
> }
661,666c666,684
< if ((tok == CONFIG_MANYCASTCLIENT) &&
< !IN_CLASSD(ntohl(peeraddr.sin_addr.s_addr))) {
< msyslog(LOG_ERR,
< "attempt to configure invalid address %s",
< ntoa(&peeraddr));
< break;
---
> else if(peeraddr.ss_family == AF_INET6) {
> if (((tok == CONFIG_SERVER) ||
> (tok == CONFIG_PEER)) &&
> #ifdef REFCLOCK
> !ISREFCLOCKADR(&peeraddr) &&
> #endif
> IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6*)&peeraddr)->sin6_addr)) {
> msyslog(LOG_ERR,
> "attempt to configure in valid address %s",
> stoa(&peeraddr));
> break;
> }
> if ((tok == CONFIG_MANYCASTCLIENT) &&
> !IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6*)&peeraddr)->sin6_addr)) {
> msyslog(LOG_ERR,
> "attempt to configure in valid address %s",
> stoa(&peeraddr));
> break;
> }
674c692
< peerkeystr = "*";
---
> peerkeystr = (u_char *)"*";
677,678c695,697
< for (i = 2; i < ntokens; i++)
< switch (matchkey(tokens[i], mod_keywords)) {
---
> istart++;
> for (i = istart; i < ntokens; i++)
> switch (matchkey(tokens[i], mod_keywords, 1)) {
755c774
< #ifdef AUTOKEY
---
> #ifdef OPENSSL
759a779
> #endif /* OPENSSL */
761,775d780
< #ifdef PUBKEY
< case CONF_MOD_PUBLICKEY:
< if (i >= ntokens - 1) {
< msyslog(LOG_ERR,
< "Public key file name required");
< errflg = 1;
< break;
< }
< peerflags |= FLAG_SKEY |
< FLAG_AUTHENABLE;
< peerkeystr = tokens[++i];
< break;
< #endif /* PUBKEY */
< #endif /* AUTOKEY */
<
778,781c783,786
< msyslog(LOG_ERR,
< "ttl: argument required");
< errflg = 1;
< break;
---
> msyslog(LOG_ERR,
> "ttl: argument required");
> errflg = 1;
> break;
783a789,793
> if (ttl >= MAX_TTL) {
> msyslog(LOG_ERR,
> "ttl: invalid argument");
> errflg = 1;
> }
788,791c798,801
< msyslog(LOG_ERR,
< "mode: argument required");
< errflg = 1;
< break;
---
> msyslog(LOG_ERR,
> "mode: argument required");
> errflg = 1;
> break;
801c811,812
< msyslog(LOG_ERR, "config error: minpoll > maxpoll");
---
> msyslog(LOG_ERR,
> "config error: minpoll > maxpoll");
805,807c816,819
< if (peer_config(&peeraddr, any_interface, hmode,
< peerversion, minpoll, maxpoll, peerflags,
< ttl, peerkey, peerkeystr) == 0) {
---
> if (peer_config(&peeraddr,
> ANY_INTERFACE_CHOOSE(&peeraddr), hmode,
> peerversion, minpoll, maxpoll, peerflags,
> ttl, peerkey, peerkeystr) == 0) {
810c822
< ntoa(&peeraddr));
---
> stoa(&peeraddr));
811a824,826
> if (tok == CONFIG_MANYCASTCLIENT)
> proto_config(PROTO_MULTICAST_ADD,
> 0, 0., &peeraddr);
913c928
< proto_config(PROTO_BROADCLIENT, 1, 0.);
---
> proto_config(PROTO_BROADCLIENT, 1, 0., NULL);
915c930
<
---
>
919c934,957
< for (i = 1; i < ntokens; i++) {
---
> istart = 1;
> memset((char *)&peeraddr, 0, sizeof(peeraddr));
> switch (matchkey(tokens[istart],
> addr_type, 0)) {
> case CONF_ADDR_IPV4:
> peeraddr.ss_family = AF_INET;
> istart++;
> break;
> case CONF_ADDR_IPV6:
> peeraddr.ss_family = AF_INET6;
> istart++;
> break;
> }
> /*
> * Abuse maskaddr to store the prefered ip
> * version.
> */
> memset((char *)&maskaddr, 0, sizeof(maskaddr));
> maskaddr.ss_family = peeraddr.ss_family;
>
> for (i = istart; i < ntokens; i++) {
> memset((char *)&peeraddr, 0,
> sizeof(peeraddr));
> peeraddr.ss_family = maskaddr.ss_family;
922c960
< peeraddr.sin_addr.s_addr, 0.);
---
> 0, 0., &peeraddr);
926c964
< htonl(INADDR_NTP), 0.);
---
> 0, 0., NULL);
933,934c971
< case CONFIG_AUTHENTICATE:
< errflg = 0;
---
> case CONFIG_KEYS:
936,943c973
< if (STREQ(tokens[1], "yes"))
< proto_config(PROTO_AUTHENTICATE, 1, 0.);
< else if (STREQ(tokens[1], "no"))
< proto_config(PROTO_AUTHENTICATE, 0, 0.);
< else
< errflg++;
< } else {
< errflg++;
---
> getauthkeys(tokens[1]);
945,948d974
<
< if (errflg)
< msyslog(LOG_ERR,
< "should be `authenticate yes|no'");
951,953c977,981
< case CONFIG_KEYS:
< if (ntokens >= 2) {
< getauthkeys(tokens[1]);
---
> case CONFIG_KEYSDIR:
> if (ntokens < 2) {
> msyslog(LOG_ERR,
> "Keys directory name required");
> break;
954a983,984
> keysdir = emalloc(strlen(tokens[1]) + 1);
> strcpy(keysdir, tokens[1]);
962,963c992
< temp = matchkey(tokens[i++],
< tinker_keywords);
---
> temp = matchkey(tokens[i++], tinker_keywords, 1);
971a1001
>
988,991d1017
< case CONF_CLOCK_MINPOLL:
< loop_config(LOOP_MINPOLL, ftemp);
< break;
<
998a1025,1028
>
> case CONF_CLOCK_FREQ:
> loop_config(LOOP_FREQ, ftemp);
> break;
1003c1033,1111
< #ifdef AUTOKEY
---
> case CONFIG_TOS:
> for (i = 1; i < ntokens; i++) {
> int temp;
> double ftemp;
>
> temp = matchkey(tokens[i++], tos_keywords, 1);
> if (i > ntokens - 1) {
> msyslog(LOG_ERR,
> "tinker: missing argument");
> errflg++;
> break;
> }
> sscanf(tokens[i], "%lf", &ftemp);
> switch(temp) {
>
> case CONF_TOS_MINCLOCK:
> proto_config(PROTO_MINCLOCK, 0, ftemp, NULL);
> break;
>
> case CONF_TOS_MINSANE:
> proto_config(PROTO_MINSANE, 0, ftemp, NULL);
> break;
>
> case CONF_TOS_FLOOR:
> proto_config(PROTO_FLOOR, 0, ftemp, NULL);
> break;
>
> case CONF_TOS_CEILING:
> proto_config(PROTO_CEILING, 0, ftemp, NULL);
> break;
>
> case CONF_TOS_COHORT:
> proto_config(PROTO_COHORT, 0, ftemp, NULL);
> break;
> }
> }
> break;
>
> case CONFIG_TTL:
> for (i = 1; i < ntokens && i < MAX_TTL; i++) {
> sys_ttl[i - 1] = (u_char) atoi(tokens[i]);
> sys_ttlmax = i - 1;
> }
> break;
>
> case CONFIG_DISCARD:
> for (i = 1; i < ntokens; i++) {
> int temp;
>
> temp = matchkey(tokens[i++],
> discard_keywords, 1);
> if (i > ntokens - 1) {
> msyslog(LOG_ERR,
> "discard: missing argument");
> errflg++;
> break;
> }
> switch(temp) {
> case CONF_DISCARD_AVERAGE:
> res_avg_interval = atoi(tokens[i++]);
> break;
>
> case CONF_DISCARD_MINIMUM:
> res_min_interval = atoi(tokens[i++]);
> break;
>
> case CONF_DISCARD_MONITOR:
> mon_age = atoi(tokens[i++]);
> break;
>
> default:
> msyslog(LOG_ERR,
> "discard: unknown keyword");
> break;
> }
> }
> break;
>
> #ifdef OPENSSL
1006c1114
< sys_revoke = 1 << max(atoi(tokens[1]), 10);
---
> sys_revoke = (u_char) max(atoi(tokens[1]), KEY_REVOKE);
1014,1023d1121
< #ifdef PUBKEY
< case CONFIG_KEYSDIR:
< if (ntokens < 2) {
< msyslog(LOG_ERR,
< "Keys directory name required");
< break;
< }
< crypto_config(CRYPTO_CONF_KEYS, tokens[1]);
< break;
<
1026c1124
< crypto_config(CRYPTO_CONF_FLAGS , "0");
---
> crypto_config(CRYPTO_CONF_NONE, NULL);
1032c1130,1131
< temp = matchkey(tokens[i++], crypto_keywords);
---
> temp = matchkey(tokens[i++],
> crypto_keywords, 1);
1040,1041c1139,1142
< case CONF_CRYPTO_FLAGS:
< crypto_config(CRYPTO_CONF_FLAGS, tokens[i]);
---
>
> case CONF_CRYPTO_CERT:
> crypto_config(CRYPTO_CONF_CERT,
> tokens[i]);
1044,1045c1145,1147
< case CONF_CRYPTO_LEAP:
< crypto_config(CRYPTO_CONF_LEAP, tokens[i]);
---
> case CONF_CRYPTO_RSA:
> crypto_config(CRYPTO_CONF_PRIV,
> tokens[i]);
1048,1049c1150,1152
< case CONF_CRYPTO_DH:
< crypto_config(CRYPTO_CONF_DH, tokens[i]);
---
> case CONF_CRYPTO_IFFPAR:
> crypto_config(CRYPTO_CONF_IFFPAR,
> tokens[i]);
1052,1053c1155,1157
< case CONF_CRYPTO_PRIVATEKEY:
< crypto_config(CRYPTO_CONF_PRIV, tokens[i]);
---
> case CONF_CRYPTO_GQPAR:
> crypto_config(CRYPTO_CONF_GQPAR,
> tokens[i]);
1056,1057c1160,1162
< case CONF_CRYPTO_PUBLICKEY:
< crypto_config(CRYPTO_CONF_PUBL, tokens[i]);
---
> case CONF_CRYPTO_MVPAR:
> crypto_config(CRYPTO_CONF_MVPAR,
> tokens[i]);
1060,1061c1165,1167
< case CONF_CRYPTO_CERT:
< crypto_config(CRYPTO_CONF_CERT, tokens[i]);
---
> case CONF_CRYPTO_LEAP:
> crypto_config(CRYPTO_CONF_LEAP,
> tokens[i]);
1063a1170,1184
> case CONF_CRYPTO_PW:
> crypto_config(CRYPTO_CONF_PW,
> tokens[i]);
> break;
>
> case CONF_CRYPTO_RAND:
> crypto_config(CRYPTO_CONF_RAND,
> tokens[i]);
> break;
>
> case CONF_CRYPTO_SIGN:
> crypto_config(CRYPTO_CONF_SIGN,
> tokens[i]);
> break;
>
1065c1186,1187
< msyslog(LOG_ERR, "crypto: unknown keyword");
---
> msyslog(LOG_ERR,
> "crypto: unknown keyword");
1070,1071c1192
< #endif /* PUBKEY */
< #endif /* AUTOKEY */
---
> #endif /* OPENSSL */
1078,1081c1199,1210
< if (STREQ(tokens[1], "default"))
< peeraddr.sin_addr.s_addr = htonl(INADDR_ANY);
< else if (!getnetnum(tokens[1], &peeraddr, 1))
< break;
---
> istart = 1;
> memset((char *)&peeraddr, 0, sizeof(peeraddr));
> switch (matchkey(tokens[istart], addr_type, 0)) {
> case CONF_ADDR_IPV4:
> peeraddr.ss_family = AF_INET;
> istart++;
> break;
> case CONF_ADDR_IPV6:
> peeraddr.ss_family = AF_INET6;
> istart++;
> break;
> }
1083a1213,1222
> * Assume default means an IPv4 address, except
> * if forced by a -4 or -6.
> */
> if (STREQ(tokens[istart], "default")) {
> if (peeraddr.ss_family == 0)
> peeraddr.ss_family = AF_INET;
> } else if (!getnetnum(tokens[istart], &peeraddr, 1))
> break;
>
> /*
1089,1091c1228,1231
< maskaddr.sin_addr.s_addr = ~(u_int32)0;
< for (i = 2; i < ntokens; i++) {
< switch (matchkey(tokens[i], res_keywords)) {
---
> SET_HOSTMASK(&maskaddr, peeraddr.ss_family);
> istart++;
> for (i = istart; i < ntokens; i++) {
> switch (matchkey(tokens[i], res_keywords, 1)) {
1157,1158c1297,1298
< if (SRCADR(&peeraddr) == htonl(INADDR_ANY))
< maskaddr.sin_addr.s_addr = 0;
---
> if (SOCKNUL(&peeraddr))
> ANYSOCK(&maskaddr);
1173c1313
< proto_config(PROTO_BROADDELAY, 0, tmp);
---
> proto_config(PROTO_BROADDELAY, 0, tmp, NULL);
1177a1318,1329
> case CONFIG_CDELAY:
> if (ntokens >= 2) {
> u_long ui;
>
> if (sscanf(tokens[1], "%ld", &ui) != 1)
> msyslog(LOG_ERR,
> "illegal value - line ignored");
> else
> proto_config(PROTO_CALLDELAY, ui, 0, NULL);
> }
> break;
>
1235c1387,1400
< if (!getnetnum(tokens[1], &peeraddr, 1))
---
> istart = 1;
> memset((char *)&peeraddr, 0, sizeof(peeraddr));
> switch (matchkey(tokens[istart], addr_type, 0)) {
> case CONF_ADDR_IPV4:
> peeraddr.ss_family = AF_INET;
> istart++;
> break;
> case CONF_ADDR_IPV6:
> peeraddr.ss_family = AF_INET6;
> istart++;
> break;
> }
>
> if (!getnetnum(tokens[istart], &peeraddr, 1))
1244,1245c1409,1411
< for (i = 2; i < ntokens-1; i++)
< switch (matchkey(tokens[i], trap_keywords)) {
---
> istart++;
> for (i = istart; i < ntokens-1; i++)
> switch (matchkey(tokens[i], trap_keywords, 1)) {
1270a1437,1439
> memset((char *)&maskaddr, 0,
> sizeof(maskaddr));
> maskaddr.ss_family = peeraddr.ss_family;
1281c1450
< ntoa(&maskaddr));
---
> stoa(&maskaddr));
1293c1462
< peeraddr.sin_port = htons( (u_short) peerversion);
---
> ((struct sockaddr_in6*)&peeraddr)->sin6_port = htons( (u_short) peerversion);
1295c1464
< peeraddr.sin_port = htons(TRAPPORT);
---
> ((struct sockaddr_in6*)&peeraddr)->sin6_port = htons(TRAPPORT);
1297c1466
< localaddr = any_interface;
---
> localaddr = ANY_INTERFACE_CHOOSE(&peeraddr);
1302c1471
< ntoa(&peeraddr));
---
> stoa(&peeraddr));
1311a1481
> memset((char *)&peeraddr, 0, sizeof(peeraddr));
1318c1488
< ntoa(&peeraddr));
---
> stoa(&peeraddr));
1327c1497
< fudge_keywords)) {
---
> fudge_keywords, 1)) {
1333c1503
< ntoa(&peeraddr));
---
> stoa(&peeraddr));
1345c1515
< ntoa(&peeraddr));
---
> stoa(&peeraddr));
1358c1528
< ntoa(&peeraddr));
---
> stoa(&peeraddr));
1382c1552
< ntoa(&peeraddr));
---
> stoa(&peeraddr));
1478c1648,1649
< switch (matchkey(tokens[i], filegen_keywords)) {
---
> switch (matchkey(tokens[i],
> filegen_keywords, 1)) {
1497c1668,1669
< peerkey = matchkey(tokens[++i], fgen_types);
---
> peerkey = matchkey(tokens[++i],
> fgen_types, 1);
1535c1707
< RW |
---
> (u_short) (RW |
1540c1712
< : 0));
---
> : 0)));
1544,1586d1715
< case CONFIG_CLIENTLIMIT:
< if (ntokens < 2) {
< msyslog(LOG_ERR,
< "no value for clientlimit command - line ignored");
< } else {
< u_long ui;
<
< if (!atouint(tokens[1], &ui) || !ui) {
< msyslog(LOG_ERR,
< "illegal value for clientlimit command - line ignored");
< } else {
< char bp[80];
<
< #ifdef DEBUG
< if (debug)
< sprintf(bp, "client_limit=%lu", ui);
< #endif
< set_sys_var(bp, strlen(bp)+1, RO);
< client_limit = ui;
< }
< }
< break;
<
< case CONFIG_CLIENTPERIOD:
< if (ntokens < 2) {
< msyslog(LOG_ERR,
< "no value for clientperiod command - line ignored");
< } else {
< u_long ui;
<
< if (!atouint(tokens[1], &ui) || ui < 64) {
< msyslog(LOG_ERR,
< "illegal value for clientperiod command - line ignored");
< } else {
< char bp[80];
<
< sprintf(bp, "client_limit_period=%ld", ui);
< set_sys_var(bp, strlen(bp)+1, RO);
< client_limit_period = ui;
< }
< }
< break;
<
1591c1720
< flag = matchkey(tokens[i], flags_keywords);
---
> flag = matchkey(tokens[i], flags_keywords, 1);
1599c1728
< proto_config(flag, 1, 0.);
---
> proto_config(flag, 1, 0., NULL);
1607c1736
< flag = matchkey(tokens[i], flags_keywords);
---
> flag = matchkey(tokens[i], flags_keywords, 1);
1615c1744
< proto_config(flag, 0, 0.);
---
> proto_config(flag, 0, 0., NULL);
1627,1635c1756,1757
< case CONFIG_PPS:
< if (ntokens < 2) {
< msyslog(LOG_ERR,
< "pps missing device name");
< break;
< }
< (void)strncpy(pps_device, tokens[1], MAXPPS);
< for (i = 2; i < ntokens; i++) {
< int flag;
---
> case CONFIG_ADJ: {
> double ftemp;
1637,1656c1759,1760
< flag = matchkey(tokens[i], pps_keywords);
< switch(flag) {
< case CONF_PPS_ASSERT:
< pps_assert = 0;
< break;
< case CONF_PPS_CLEAR:
< pps_assert = 1;
< break;
< case CONF_PPS_HARDPPS:
< pps_hardpps = 1;
< break;
< default:
< msyslog(LOG_ERR,
< "pps unknown flag %s",
< tokens[i]);
< errflg = 1;
< break;
< }
< if(errflg)
< break;
---
> sscanf(tokens[1], "%lf", &ftemp);
> proto_config(PROTO_ADJ, 0, ftemp, NULL);
1658a1763
>
1683c1788
< rankey[i] = RANDOM & 0xff;
---
> rankey[i] = (char) (RANDOM & 0xff);
1700,1703c1805,1810
< /*
< * Need name resolution
< */
< do_resolve_internal();
---
> if (call_resolver) {
> /*
> * Need name resolution
> */
> do_resolve_internal();
> }
1804c1911
< if (! (val_list[index] = (char*)malloc(strlen(value+1))))
---
> if (! (val_list[index] = (char*)malloc(strlen(value)+1)))
1924c2031
< ntok = matchkey(tokenlist[0], keywords);
---
> ntok = matchkey(tokenlist[0], keywords, 1);
1938c2045,2046
< register struct keyword *keys
---
> register struct keyword *keys,
> int complain
1943,1945c2051,2054
< msyslog(LOG_ERR,
< "configure: keyword \"%s\" unknown, line ignored",
< word);
---
> if (complain)
> msyslog(LOG_ERR,
> "configure: keyword \"%s\" unknown, line ignored",
> word);
1961c2070
< struct sockaddr_in *addr,
---
> struct sockaddr_storage *addr,
1965,1970c2074,2075
< register const char *cp;
< register char *bp;
< register int i;
< register int temp;
< char buf[80]; /* will core dump on really stupid stuff */
< u_int32 netnum;
---
> struct addrinfo hints;
> struct addrinfo *ptr;
1972,1980c2077,2082
< /* XXX ELIMINATE replace with decodenetnum */
< cp = num;
< netnum = 0;
< for (i = 0; i < 4; i++) {
< bp = buf;
< while (isdigit((int)*cp))
< *bp++ = *cp++;
< if (bp == buf)
< break;
---
> /* Get host address. Looking for UDP datagram connection */
> memset(&hints, 0, sizeof (hints));
> if (addr->ss_family == AF_INET || addr->ss_family == AF_INET6)
> hints.ai_family = addr->ss_family;
> else
> hints.ai_family = AF_UNSPEC;
1982,1993c2084
< if (i < 3) {
< if (*cp++ != '.')
< break;
< } else if (*cp != '\0')
< break;
<
< *bp = '\0';
< temp = atoi(buf);
< if (temp > 255)
< break;
< netnum <<= 8;
< netnum += temp;
---
> hints.ai_socktype = SOCK_DGRAM;
1996,1997c2087
< printf("getnetnum %s step %d buf %s temp %d netnum %lu\n",
< num, i, buf, temp, (u_long)netnum);
---
> printf("getaddrinfo %s\n", num);
1999,2001c2089
< }
<
< if (i < 4) {
---
> if (getaddrinfo(num, "ntp", &hints, &ptr)!=0) {
2004c2092
< "getnetnum: \"%s\" invalid host number, line ignored",
---
> "getaddrinfo: \"%s\" invalid host address, line ignored",
2009,2010c2097,2100
< "getnetnum: \"%s\" invalid host number, line ignored\n",
< num);
---
> "getaddrinfo: \"%s\" invalid host address%s.\n",
> num, (complain)
> ? ", line ignored"
> : "");
2015,2021c2105
< /*
< * make up socket address. Clear it out for neatness.
< */
< memset((void *)addr, 0, sizeof(struct sockaddr_in));
< addr->sin_family = AF_INET;
< addr->sin_port = htons(NTP_PORT);
< addr->sin_addr.s_addr = htonl(netnum);
---
> memcpy(addr, ptr->ai_addr, ptr->ai_addrlen);
2024,2025c2108,2109
< printf("getnetnum given %s, got %s (%lx)\n",
< num, ntoa(addr), (u_long)netnum);
---
> printf("getnetnum given %s, got %s \n",
> num, stoa(addr));
2026a2111
> freeaddrinfo(ptr);
2031c2116
< #if !defined(VMS)
---
> #if !defined(VMS) && !defined(SYS_WINNT)
2075,2076c2160
< DWORD len;
< if(!(len = GetTempPath((DWORD)MAX_PATH, (LPTSTR)res_file))) {
---
> if(!(GetTempPath((DWORD)MAX_PATH, (LPTSTR)res_file))) {
2214c2298
< kill_asyncio();
---
> kill_asyncio(0);
2269,2271c2353,2355
< if (!(ResolverThreadHandle = CreateThread(
< NULL, /* no security attributes */
< 0, /* use default stack size */
---
> ResolverThreadHandle = CreateThread(
> NULL, /* no security attributes */
> 0, /* use default stack size */
2273,2275c2357,2360
< NULL, /* argument to thread function */
< 0, /* use default creation flags */
< &dwThreadId))) { /* returns the thread identifier */
---
> NULL, /* argument to thread function */
> 0, /* use default creation flags */
> &dwThreadId); /* returns the thread identifier */
> if (ResolverThreadHandle == NULL) {