ntp_config.c (106163) | ntp_config.c (132451) |
---|---|
1/* 2 * ntp_config.c - read and apply configuration information 3 */ 4#ifdef HAVE_CONFIG_H 5# include <config.h> 6#endif 7 8#ifdef HAVE_NETINFO --- 4 unchanged lines hidden (view full) --- 13#include "ntp_io.h" 14#include "ntp_unixtime.h" 15#include "ntp_refclock.h" 16#include "ntp_filegen.h" 17#include "ntp_stdlib.h" 18#include "ntp_config.h" 19#include "ntp_cmdargs.h" 20 | 1/* 2 * ntp_config.c - read and apply configuration information 3 */ 4#ifdef HAVE_CONFIG_H 5# include <config.h> 6#endif 7 8#ifdef HAVE_NETINFO --- 4 unchanged lines hidden (view full) --- 13#include "ntp_io.h" 14#include "ntp_unixtime.h" 15#include "ntp_refclock.h" 16#include "ntp_filegen.h" 17#include "ntp_stdlib.h" 18#include "ntp_config.h" 19#include "ntp_cmdargs.h" 20 |
21#ifdef PUBKEY 22# include "ntp_crypto.h" 23#endif /* PUBKEY */ 24 | |
25#include <stdio.h> 26#include <ctype.h> 27#ifdef HAVE_SYS_PARAM_H 28#include <sys/param.h> 29#endif 30#include <signal.h> 31#ifndef SIGCHLD 32# define SIGCHLD SIGCLD --- 4 unchanged lines hidden (view full) --- 37# endif 38#endif /* VMS */ 39 40#ifdef SYS_WINNT 41# include <io.h> 42extern HANDLE ResolverThreadHandle; 43#endif /* SYS_WINNT */ 44 | 21#include <stdio.h> 22#include <ctype.h> 23#ifdef HAVE_SYS_PARAM_H 24#include <sys/param.h> 25#endif 26#include <signal.h> 27#ifndef SIGCHLD 28# define SIGCHLD SIGCLD --- 4 unchanged lines hidden (view full) --- 33# endif 34#endif /* VMS */ 35 36#ifdef SYS_WINNT 37# include <io.h> 38extern HANDLE ResolverThreadHandle; 39#endif /* SYS_WINNT */ 40 |
41#include <netdb.h> 42 |
|
45extern int priority_done; 46 47/* 48 * These routines are used to read the configuration file at 49 * startup time. An entry in the file must fit on a single line. 50 * Entries are processed as multiple tokens separated by white space 51 * Lines are considered terminated when a '#' is encountered. Blank 52 * lines are ignored. 53 */ | 43extern int priority_done; 44 45/* 46 * These routines are used to read the configuration file at 47 * startup time. An entry in the file must fit on a single line. 48 * Entries are processed as multiple tokens separated by white space 49 * Lines are considered terminated when a '#' is encountered. Blank 50 * lines are ignored. 51 */ |
54 | |
55/* | 52/* |
56 * We understand the following configuration entries and defaults. 57 * 58 * peer [ addr ] [ version 3 ] [ key 0 ] [ minpoll 6 ] [ maxpoll 10 ] 59 * server [ addr ] [ version 3 ] [ key 0 ] [ minpoll 6 ] [ maxpoll 10 ] 60 * broadcast [ addr ] [ version 3 ] [ key 0 ] [ ttl 1 ] 61 * broadcastclient 62 * multicastclient [ 224.0.1.1 ] 63 * manycastclient [ addr ] [ version 3 ] [ key 0 ] [ minpoll 6 ] [ maxpoll 10 ] 64 * manycastserver [ 224.0.1.1 ] 65 * broadcastdelay 0.0102 66 * restrict [ addr ] [ mask 255.255.255.0 ] ignore|noserve|notrust|noquery 67 * driftfile file_name 68 * keys file_name 69 * publickey file_name 70 * privatekey file_name 71 * statsdir /var/NTP/ 72 * filegen peerstats [ file peerstats ] [ type day ] [ link ] 73 * clientlimit [ n ] 74 * clientperiod [ 3600 ] 75 * trustedkey [ key ] 76 * requestkey [ key] 77 * controlkey [ key ] 78 * trap [ addr ] 79 * fudge [ addr ] [ stratum ] [ refid ] ... 80 * pidfile [ ] 81 * setvar [ ] 82 * logfile logfile 83 * logconfig [+|-|=][{sync|sys|peer|clock}{{,all}{info|statistics|events|status}}]... 84 * enable auth|bclient|pll|kernel|monitor|stats|calibrate 85 * disable auth|bclient|pll|kernel|monitor|stats|calibrate 86 * phone ... 87 * pps device [assert|clear] [hardpps] 88 * priority high|normal 89 */ 90 91/* | |
92 * Translation table - keywords to function index 93 */ 94struct keyword { 95 const char *text; 96 int keytype; 97}; 98 99/* 100 * Command keywords 101 */ 102static struct keyword keywords[] = { | 53 * Translation table - keywords to function index 54 */ 55struct keyword { 56 const char *text; 57 int keytype; 58}; 59 60/* 61 * Command keywords 62 */ 63static struct keyword keywords[] = { |
103 { "authenticate", CONFIG_AUTHENTICATE }, | |
104 { "automax", CONFIG_AUTOMAX }, 105 { "broadcast", CONFIG_BROADCAST }, 106 { "broadcastclient", CONFIG_BROADCASTCLIENT }, 107 { "broadcastdelay", CONFIG_BDELAY }, | 64 { "automax", CONFIG_AUTOMAX }, 65 { "broadcast", CONFIG_BROADCAST }, 66 { "broadcastclient", CONFIG_BROADCASTCLIENT }, 67 { "broadcastdelay", CONFIG_BDELAY }, |
108 { "clientlimit", CONFIG_CLIENTLIMIT }, 109 { "clientperiod", CONFIG_CLIENTPERIOD }, 110#ifdef PUBKEY | 68 { "calldelay", CONFIG_CDELAY}, 69#ifdef OPENSSL |
111 { "crypto", CONFIG_CRYPTO }, | 70 { "crypto", CONFIG_CRYPTO }, |
112#endif /* PUBKEY */ | 71#endif /* OPENSSL */ |
113 { "controlkey", CONFIG_CONTROLKEY }, 114 { "disable", CONFIG_DISABLE }, 115 { "driftfile", CONFIG_DRIFTFILE }, 116 { "enable", CONFIG_ENABLE }, 117 { "filegen", CONFIG_FILEGEN }, 118 { "fudge", CONFIG_FUDGE }, 119 { "includefile", CONFIG_INCLUDEFILE }, 120 { "keys", CONFIG_KEYS }, | 72 { "controlkey", CONFIG_CONTROLKEY }, 73 { "disable", CONFIG_DISABLE }, 74 { "driftfile", CONFIG_DRIFTFILE }, 75 { "enable", CONFIG_ENABLE }, 76 { "filegen", CONFIG_FILEGEN }, 77 { "fudge", CONFIG_FUDGE }, 78 { "includefile", CONFIG_INCLUDEFILE }, 79 { "keys", CONFIG_KEYS }, |
121#ifdef PUBKEY | |
122 { "keysdir", CONFIG_KEYSDIR }, | 80 { "keysdir", CONFIG_KEYSDIR }, |
123#endif /* PUBKEY */ | |
124 { "logconfig", CONFIG_LOGCONFIG }, 125 { "logfile", CONFIG_LOGFILE }, 126 { "manycastclient", CONFIG_MANYCASTCLIENT }, 127 { "manycastserver", CONFIG_MANYCASTSERVER }, 128 { "multicastclient", CONFIG_MULTICASTCLIENT }, 129 { "peer", CONFIG_PEER }, 130 { "phone", CONFIG_PHONE }, 131 { "pidfile", CONFIG_PIDFILE }, | 81 { "logconfig", CONFIG_LOGCONFIG }, 82 { "logfile", CONFIG_LOGFILE }, 83 { "manycastclient", CONFIG_MANYCASTCLIENT }, 84 { "manycastserver", CONFIG_MANYCASTSERVER }, 85 { "multicastclient", CONFIG_MULTICASTCLIENT }, 86 { "peer", CONFIG_PEER }, 87 { "phone", CONFIG_PHONE }, 88 { "pidfile", CONFIG_PIDFILE }, |
132 { "pps", CONFIG_PPS }, | 89 { "discard", CONFIG_DISCARD }, |
133 { "requestkey", CONFIG_REQUESTKEY }, 134 { "restrict", CONFIG_RESTRICT }, 135 { "revoke", CONFIG_REVOKE }, 136 { "server", CONFIG_SERVER }, 137 { "setvar", CONFIG_SETVAR }, 138 { "statistics", CONFIG_STATISTICS }, 139 { "statsdir", CONFIG_STATSDIR }, | 90 { "requestkey", CONFIG_REQUESTKEY }, 91 { "restrict", CONFIG_RESTRICT }, 92 { "revoke", CONFIG_REVOKE }, 93 { "server", CONFIG_SERVER }, 94 { "setvar", CONFIG_SETVAR }, 95 { "statistics", CONFIG_STATISTICS }, 96 { "statsdir", CONFIG_STATSDIR }, |
97 { "tick", CONFIG_ADJ }, |
|
140 { "tinker", CONFIG_TINKER }, | 98 { "tinker", CONFIG_TINKER }, |
99 { "tos", CONFIG_TOS }, |
|
141 { "trap", CONFIG_TRAP }, 142 { "trustedkey", CONFIG_TRUSTEDKEY }, | 100 { "trap", CONFIG_TRAP }, 101 { "trustedkey", CONFIG_TRUSTEDKEY }, |
102 { "ttl", CONFIG_TTL }, |
|
143 { "", CONFIG_UNKNOWN } 144}; 145 146/* 147 * "peer", "server", "broadcast" modifier keywords 148 */ 149static struct keyword mod_keywords[] = { 150 { "autokey", CONF_MOD_SKEY }, 151 { "burst", CONF_MOD_BURST }, 152 { "iburst", CONF_MOD_IBURST }, 153 { "key", CONF_MOD_KEY }, 154 { "maxpoll", CONF_MOD_MAXPOLL }, 155 { "minpoll", CONF_MOD_MINPOLL }, 156 { "mode", CONF_MOD_MODE }, /* refclocks */ 157 { "noselect", CONF_MOD_NOSELECT }, 158 { "prefer", CONF_MOD_PREFER }, | 103 { "", CONFIG_UNKNOWN } 104}; 105 106/* 107 * "peer", "server", "broadcast" modifier keywords 108 */ 109static struct keyword mod_keywords[] = { 110 { "autokey", CONF_MOD_SKEY }, 111 { "burst", CONF_MOD_BURST }, 112 { "iburst", CONF_MOD_IBURST }, 113 { "key", CONF_MOD_KEY }, 114 { "maxpoll", CONF_MOD_MAXPOLL }, 115 { "minpoll", CONF_MOD_MINPOLL }, 116 { "mode", CONF_MOD_MODE }, /* refclocks */ 117 { "noselect", CONF_MOD_NOSELECT }, 118 { "prefer", CONF_MOD_PREFER }, |
159#ifdef PUBKEY 160 { "publickey", CONF_MOD_PUBLICKEY }, 161#endif /* PUBKEY */ | |
162 { "ttl", CONF_MOD_TTL }, /* NTP peers */ 163 { "version", CONF_MOD_VERSION }, 164 { "", CONFIG_UNKNOWN } 165}; 166 167/* 168 * "restrict" modifier keywords 169 */ --- 33 unchanged lines hidden (view full) --- 203 { "flag4", CONF_FDG_FLAG4 }, 204 { "refid", CONF_FDG_REFID }, 205 { "stratum", CONF_FDG_STRATUM }, 206 { "time1", CONF_FDG_TIME1 }, 207 { "time2", CONF_FDG_TIME2 }, 208 { "", CONFIG_UNKNOWN } 209}; 210 | 119 { "ttl", CONF_MOD_TTL }, /* NTP peers */ 120 { "version", CONF_MOD_VERSION }, 121 { "", CONFIG_UNKNOWN } 122}; 123 124/* 125 * "restrict" modifier keywords 126 */ --- 33 unchanged lines hidden (view full) --- 160 { "flag4", CONF_FDG_FLAG4 }, 161 { "refid", CONF_FDG_REFID }, 162 { "stratum", CONF_FDG_STRATUM }, 163 { "time1", CONF_FDG_TIME1 }, 164 { "time2", CONF_FDG_TIME2 }, 165 { "", CONFIG_UNKNOWN } 166}; 167 |
211 | |
212/* 213 * "filegen" modifier keywords 214 */ 215static struct keyword filegen_keywords[] = { 216 { "disable", CONF_FGEN_FLAG_DISABLE }, 217 { "enable", CONF_FGEN_FLAG_ENABLE }, 218 { "file", CONF_FGEN_FILE }, 219 { "link", CONF_FGEN_FLAG_LINK }, --- 27 unchanged lines hidden (view full) --- 247 { "monitor", PROTO_MONITOR }, 248 { "ntp", PROTO_NTP }, 249 { "pps", PROTO_PPS }, 250 { "stats", PROTO_FILEGEN }, 251 { "", CONFIG_UNKNOWN } 252}; 253 254/* | 168/* 169 * "filegen" modifier keywords 170 */ 171static struct keyword filegen_keywords[] = { 172 { "disable", CONF_FGEN_FLAG_DISABLE }, 173 { "enable", CONF_FGEN_FLAG_ENABLE }, 174 { "file", CONF_FGEN_FILE }, 175 { "link", CONF_FGEN_FLAG_LINK }, --- 27 unchanged lines hidden (view full) --- 203 { "monitor", PROTO_MONITOR }, 204 { "ntp", PROTO_NTP }, 205 { "pps", PROTO_PPS }, 206 { "stats", PROTO_FILEGEN }, 207 { "", CONFIG_UNKNOWN } 208}; 209 210/* |
255 * "pps" modifier keywords | 211 * "discard" modifier keywords |
256 */ | 212 */ |
257static struct keyword pps_keywords[] = { 258 { "assert", CONF_PPS_ASSERT }, 259 { "clear", CONF_PPS_CLEAR }, 260 { "hardpps", CONF_PPS_HARDPPS }, | 213static struct keyword discard_keywords[] = { 214 { "average", CONF_DISCARD_AVERAGE }, 215 { "minimum", CONF_DISCARD_MINIMUM }, 216 { "monitor", CONF_DISCARD_MONITOR }, |
261 { "", CONFIG_UNKNOWN } 262}; 263 264/* 265 * "tinker" modifier keywords 266 */ 267static struct keyword tinker_keywords[] = { 268 { "step", CONF_CLOCK_MAX }, 269 { "panic", CONF_CLOCK_PANIC }, 270 { "dispersion", CONF_CLOCK_PHI }, 271 { "stepout", CONF_CLOCK_MINSTEP }, | 217 { "", CONFIG_UNKNOWN } 218}; 219 220/* 221 * "tinker" modifier keywords 222 */ 223static struct keyword tinker_keywords[] = { 224 { "step", CONF_CLOCK_MAX }, 225 { "panic", CONF_CLOCK_PANIC }, 226 { "dispersion", CONF_CLOCK_PHI }, 227 { "stepout", CONF_CLOCK_MINSTEP }, |
272 { "minpoll", CONF_CLOCK_MINPOLL }, | |
273 { "allan", CONF_CLOCK_ALLAN }, 274 { "huffpuff", CONF_CLOCK_HUFFPUFF }, | 228 { "allan", CONF_CLOCK_ALLAN }, 229 { "huffpuff", CONF_CLOCK_HUFFPUFF }, |
230 { "freq", CONF_CLOCK_FREQ }, |
|
275 { "", CONFIG_UNKNOWN } 276}; 277 | 231 { "", CONFIG_UNKNOWN } 232}; 233 |
278#ifdef PUBKEY | |
279/* | 234/* |
235 * "tos" modifier keywords 236 */ 237static struct keyword tos_keywords[] = { 238 { "minclock", CONF_TOS_MINCLOCK }, 239 { "minsane", CONF_TOS_MINSANE }, 240 { "floor", CONF_TOS_FLOOR }, 241 { "ceiling", CONF_TOS_CEILING }, 242 { "cohort", CONF_TOS_COHORT }, 243 { "", CONFIG_UNKNOWN } 244}; 245 246#ifdef OPENSSL 247/* |
|
280 * "crypto" modifier keywords 281 */ 282static struct keyword crypto_keywords[] = { | 248 * "crypto" modifier keywords 249 */ 250static struct keyword crypto_keywords[] = { |
283 { "dh", CONF_CRYPTO_DH }, 284 { "flags", CONF_CRYPTO_FLAGS }, | 251 { "cert", CONF_CRYPTO_CERT }, 252 { "gqpar", CONF_CRYPTO_GQPAR }, 253 { "host", CONF_CRYPTO_RSA }, 254 { "iffpar", CONF_CRYPTO_IFFPAR }, |
285 { "leap", CONF_CRYPTO_LEAP }, | 255 { "leap", CONF_CRYPTO_LEAP }, |
286 { "privatekey", CONF_CRYPTO_PRIVATEKEY }, 287 { "publickey", CONF_CRYPTO_PUBLICKEY }, | 256 { "mvpar", CONF_CRYPTO_MVPAR }, 257 { "pw", CONF_CRYPTO_PW }, 258 { "randfile", CONF_CRYPTO_RAND }, 259 { "sign", CONF_CRYPTO_SIGN }, |
288 { "", CONFIG_UNKNOWN } 289}; | 260 { "", CONFIG_UNKNOWN } 261}; |
290#endif /* PUBKEY */ | 262#endif /* OPENSSL */ |
291 292/* | 263 264/* |
265 * Address type selection, IPv4 or IPv4. 266 * Used on various lines. 267 */ 268static struct keyword addr_type[] = { 269 { "-4", CONF_ADDR_IPV4 }, 270 { "-6", CONF_ADDR_IPV6 }, 271 { "", CONFIG_UNKNOWN } 272}; 273 274/* |
|
293 * "logconfig" building blocks 294 */ 295struct masks { 296 const char *name; 297 unsigned long mask; 298}; 299 300static struct masks logcfg_class[] = { --- 39 unchanged lines hidden (view full) --- 340#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) 341 342#define KEY_TYPE_MD5 4 343 344/* 345 * File descriptor used by the resolver save routines, and temporary file 346 * name. 347 */ | 275 * "logconfig" building blocks 276 */ 277struct masks { 278 const char *name; 279 unsigned long mask; 280}; 281 282static struct masks logcfg_class[] = { --- 39 unchanged lines hidden (view full) --- 322#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) 323 324#define KEY_TYPE_MD5 4 325 326/* 327 * File descriptor used by the resolver save routines, and temporary file 328 * name. 329 */ |
330int call_resolver = 1; /* ntp-genkeys sets this to 0, for example */ |
|
348static FILE *res_fp; 349#ifndef SYS_WINNT 350static char res_file[20]; /* enough for /tmp/ntpXXXXXX\0 */ 351#define RES_TEMPFILE "/tmp/ntpXXXXXX" 352#else 353static char res_file[MAX_PATH]; 354#endif /* SYS_WINNT */ 355 356/* 357 * Definitions of things either imported from or exported to outside 358 */ 359char const *progname; 360char sys_phone[MAXPHONE][MAXDIAL]; /* ACTS phone numbers */ | 331static FILE *res_fp; 332#ifndef SYS_WINNT 333static char res_file[20]; /* enough for /tmp/ntpXXXXXX\0 */ 334#define RES_TEMPFILE "/tmp/ntpXXXXXX" 335#else 336static char res_file[MAX_PATH]; 337#endif /* SYS_WINNT */ 338 339/* 340 * Definitions of things either imported from or exported to outside 341 */ 342char const *progname; 343char sys_phone[MAXPHONE][MAXDIAL]; /* ACTS phone numbers */ |
344char *keysdir = NTP_KEYSDIR; /* crypto keys directory */ |
|
361char pps_device[MAXPPS + 1]; /* PPS device name */ | 345char pps_device[MAXPPS + 1]; /* PPS device name */ |
362int pps_assert; 363int pps_hardpps; | |
364#if defined(HAVE_SCHED_SETSCHEDULER) 365int config_priority_override = 0; 366int config_priority; 367#endif 368 369const char *config_file; 370#ifdef HAVE_NETINFO 371 struct netinfo_config_state *config_netinfo = NULL; --- 26 unchanged lines hidden (view full) --- 398static unsigned long get_match P((char *, struct masks *)); 399static unsigned long get_logmask P((char *)); 400#ifdef HAVE_NETINFO 401static struct netinfo_config_state *get_netinfo_config P((void)); 402static void free_netinfo_config P((struct netinfo_config_state *)); 403static int gettokens_netinfo P((struct netinfo_config_state *, char **, int *)); 404#endif 405static int gettokens P((FILE *, char *, char **, int *)); | 346#if defined(HAVE_SCHED_SETSCHEDULER) 347int config_priority_override = 0; 348int config_priority; 349#endif 350 351const char *config_file; 352#ifdef HAVE_NETINFO 353 struct netinfo_config_state *config_netinfo = NULL; --- 26 unchanged lines hidden (view full) --- 380static unsigned long get_match P((char *, struct masks *)); 381static unsigned long get_logmask P((char *)); 382#ifdef HAVE_NETINFO 383static struct netinfo_config_state *get_netinfo_config P((void)); 384static void free_netinfo_config P((struct netinfo_config_state *)); 385static int gettokens_netinfo P((struct netinfo_config_state *, char **, int *)); 386#endif 387static int gettokens P((FILE *, char *, char **, int *)); |
406static int matchkey P((char *, struct keyword *)); 407static int getnetnum P((const char *, struct sockaddr_in *, int)); | 388static int matchkey P((char *, struct keyword *, int)); 389static int getnetnum P((const char *, struct sockaddr_storage *, int)); |
408static void save_resolve P((char *, int, int, int, int, u_int, int, 409 keyid_t, u_char *)); 410static void do_resolve_internal P((void)); 411static void abort_resolve P((void)); | 390static void save_resolve P((char *, int, int, int, int, u_int, int, 391 keyid_t, u_char *)); 392static void do_resolve_internal P((void)); 393static void abort_resolve P((void)); |
412#if !defined(VMS) | 394#if !defined(VMS) && !defined(SYS_WINNT) |
413static RETSIGTYPE catchchild P((int)); 414#endif /* VMS */ 415 416/* 417 * get_pfxmatch - find value for prefixmatch 418 * and update char * accordingly 419 */ 420static unsigned long --- 64 unchanged lines hidden (view full) --- 485getconfig( 486 int argc, 487 char *argv[] 488 ) 489{ 490 register int i; 491 int c; 492 int errflg; | 395static RETSIGTYPE catchchild P((int)); 396#endif /* VMS */ 397 398/* 399 * get_pfxmatch - find value for prefixmatch 400 * and update char * accordingly 401 */ 402static unsigned long --- 64 unchanged lines hidden (view full) --- 467getconfig( 468 int argc, 469 char *argv[] 470 ) 471{ 472 register int i; 473 int c; 474 int errflg; |
475 int istart; |
|
493 int peerversion; 494 int minpoll; 495 int maxpoll; 496 int ttl; 497 long stratum; 498 unsigned long ul; 499 keyid_t peerkey; 500 u_char *peerkeystr; 501 u_long fudgeflag; 502 u_int peerflags; 503 int hmode; | 476 int peerversion; 477 int minpoll; 478 int maxpoll; 479 int ttl; 480 long stratum; 481 unsigned long ul; 482 keyid_t peerkey; 483 u_char *peerkeystr; 484 u_long fudgeflag; 485 u_int peerflags; 486 int hmode; |
504 struct sockaddr_in peeraddr; 505 struct sockaddr_in maskaddr; | 487 struct sockaddr_storage peeraddr; 488 struct sockaddr_storage maskaddr; |
506 FILE *fp[MAXINCLUDELEVEL+1]; 507 FILE *includefile; 508 int includelevel = 0; 509 char line[MAXLINE]; 510 char *(tokens[MAXTOKENS]); | 489 FILE *fp[MAXINCLUDELEVEL+1]; 490 FILE *includefile; 491 int includelevel = 0; 492 char line[MAXLINE]; 493 char *(tokens[MAXTOKENS]); |
511 int ntokens; | 494 int ntokens = 0; |
512 int tok = CONFIG_UNKNOWN; 513 struct interface *localaddr; 514 struct refclockstat clock_stat; 515 FILEGEN *filegen; 516 517 /* 518 * Initialize, initialize 519 */ --- 102 unchanged lines hidden (view full) --- 622 623 if (ntokens < 2) { 624 msyslog(LOG_ERR, 625 "No address for %s, line ignored", 626 tokens[0]); 627 break; 628 } 629 | 495 int tok = CONFIG_UNKNOWN; 496 struct interface *localaddr; 497 struct refclockstat clock_stat; 498 FILEGEN *filegen; 499 500 /* 501 * Initialize, initialize 502 */ --- 102 unchanged lines hidden (view full) --- 605 606 if (ntokens < 2) { 607 msyslog(LOG_ERR, 608 "No address for %s, line ignored", 609 tokens[0]); 610 break; 611 } 612 |
630 if (!getnetnum(tokens[1], &peeraddr, 0)) { | 613 istart = 1; 614 memset((char *)&peeraddr, 0, sizeof(peeraddr)); 615 switch (matchkey(tokens[istart], addr_type, 0)) { 616 case CONF_ADDR_IPV4: 617 peeraddr.ss_family = AF_INET; 618 istart++; 619 break; 620 case CONF_ADDR_IPV6: 621 peeraddr.ss_family = AF_INET6; 622 istart++; 623 break; 624 } 625 626 if (!getnetnum(tokens[istart], &peeraddr, 0)) { |
631 errflg = -1; 632 } else { 633 errflg = 0; 634 635 if ( 636#ifdef REFCLOCK 637 !ISREFCLOCKADR(&peeraddr) && 638#endif 639 ISBADADR(&peeraddr)) { 640 msyslog(LOG_ERR, 641 "attempt to configure invalid address %s", | 627 errflg = -1; 628 } else { 629 errflg = 0; 630 631 if ( 632#ifdef REFCLOCK 633 !ISREFCLOCKADR(&peeraddr) && 634#endif 635 ISBADADR(&peeraddr)) { 636 msyslog(LOG_ERR, 637 "attempt to configure invalid address %s", |
642 ntoa(&peeraddr)); | 638 stoa(&peeraddr)); |
643 break; 644 } 645 /* 646 * Shouldn't be able to specify multicast 647 * address for server/peer! 648 * and unicast address for manycastclient! 649 */ | 639 break; 640 } 641 /* 642 * Shouldn't be able to specify multicast 643 * address for server/peer! 644 * and unicast address for manycastclient! 645 */ |
650 if (((tok == CONFIG_SERVER) || 651 (tok == CONFIG_PEER)) && | 646 if (peeraddr.ss_family == AF_INET) { 647 if (((tok == CONFIG_SERVER) || 648 (tok == CONFIG_PEER)) && |
652#ifdef REFCLOCK | 649#ifdef REFCLOCK |
653 !ISREFCLOCKADR(&peeraddr) && | 650 !ISREFCLOCKADR(&peeraddr) && |
654#endif | 651#endif |
655 IN_CLASSD(ntohl(peeraddr.sin_addr.s_addr))) { 656 msyslog(LOG_ERR, 657 "attempt to configure invalid address %s", 658 ntoa(&peeraddr)); 659 break; | 652 IN_CLASSD(ntohl(((struct sockaddr_in*)&peeraddr)->sin_addr.s_addr))) { 653 msyslog(LOG_ERR, 654 "attempt to configure invalid address %s", 655 stoa(&peeraddr)); 656 break; 657 } 658 if ((tok == CONFIG_MANYCASTCLIENT) && 659 !IN_CLASSD(ntohl(((struct sockaddr_in*)&peeraddr)->sin_addr.s_addr))) { 660 msyslog(LOG_ERR, 661 "attempt to configure invalid address %s", 662 stoa(&peeraddr)); 663 break; 664 } |
660 } | 665 } |
661 if ((tok == CONFIG_MANYCASTCLIENT) && 662 !IN_CLASSD(ntohl(peeraddr.sin_addr.s_addr))) { 663 msyslog(LOG_ERR, 664 "attempt to configure invalid address %s", 665 ntoa(&peeraddr)); 666 break; | 666 else if(peeraddr.ss_family == AF_INET6) { 667 if (((tok == CONFIG_SERVER) || 668 (tok == CONFIG_PEER)) && 669#ifdef REFCLOCK 670 !ISREFCLOCKADR(&peeraddr) && 671#endif 672 IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6*)&peeraddr)->sin6_addr)) { 673 msyslog(LOG_ERR, 674 "attempt to configure in valid address %s", 675 stoa(&peeraddr)); 676 break; 677 } 678 if ((tok == CONFIG_MANYCASTCLIENT) && 679 !IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6*)&peeraddr)->sin6_addr)) { 680 msyslog(LOG_ERR, 681 "attempt to configure in valid address %s", 682 stoa(&peeraddr)); 683 break; 684 } |
667 } 668 } 669 670 peerversion = NTP_VERSION; 671 minpoll = NTP_MINDPOLL; 672 maxpoll = NTP_MAXDPOLL; 673 peerkey = 0; | 685 } 686 } 687 688 peerversion = NTP_VERSION; 689 minpoll = NTP_MINDPOLL; 690 maxpoll = NTP_MAXDPOLL; 691 peerkey = 0; |
674 peerkeystr = "*"; | 692 peerkeystr = (u_char *)"*"; |
675 peerflags = 0; 676 ttl = 0; | 693 peerflags = 0; 694 ttl = 0; |
677 for (i = 2; i < ntokens; i++) 678 switch (matchkey(tokens[i], mod_keywords)) { | 695 istart++; 696 for (i = istart; i < ntokens; i++) 697 switch (matchkey(tokens[i], mod_keywords, 1)) { |
679 case CONF_MOD_VERSION: 680 if (i >= ntokens-1) { 681 msyslog(LOG_ERR, 682 "peer/server version requires an argument"); 683 errflg = 1; 684 break; 685 } 686 peerversion = atoi(tokens[++i]); --- 60 unchanged lines hidden (view full) --- 747 748 case CONF_MOD_BURST: 749 peerflags |= FLAG_BURST; 750 break; 751 752 case CONF_MOD_IBURST: 753 peerflags |= FLAG_IBURST; 754 break; | 698 case CONF_MOD_VERSION: 699 if (i >= ntokens-1) { 700 msyslog(LOG_ERR, 701 "peer/server version requires an argument"); 702 errflg = 1; 703 break; 704 } 705 peerversion = atoi(tokens[++i]); --- 60 unchanged lines hidden (view full) --- 766 767 case CONF_MOD_BURST: 768 peerflags |= FLAG_BURST; 769 break; 770 771 case CONF_MOD_IBURST: 772 peerflags |= FLAG_IBURST; 773 break; |
755#ifdef AUTOKEY | 774#ifdef OPENSSL |
756 case CONF_MOD_SKEY: 757 peerflags |= FLAG_SKEY | 758 FLAG_AUTHENABLE; 759 break; | 775 case CONF_MOD_SKEY: 776 peerflags |= FLAG_SKEY | 777 FLAG_AUTHENABLE; 778 break; |
779#endif /* OPENSSL */ |
|
760 | 780 |
761#ifdef PUBKEY 762 case CONF_MOD_PUBLICKEY: 763 if (i >= ntokens - 1) { 764 msyslog(LOG_ERR, 765 "Public key file name required"); 766 errflg = 1; 767 break; 768 } 769 peerflags |= FLAG_SKEY | 770 FLAG_AUTHENABLE; 771 peerkeystr = tokens[++i]; 772 break; 773#endif /* PUBKEY */ 774#endif /* AUTOKEY */ 775 | |
776 case CONF_MOD_TTL: 777 if (i >= ntokens-1) { | 781 case CONF_MOD_TTL: 782 if (i >= ntokens-1) { |
778 msyslog(LOG_ERR, 779 "ttl: argument required"); 780 errflg = 1; 781 break; | 783 msyslog(LOG_ERR, 784 "ttl: argument required"); 785 errflg = 1; 786 break; |
782 } 783 ttl = atoi(tokens[++i]); | 787 } 788 ttl = atoi(tokens[++i]); |
789 if (ttl >= MAX_TTL) { 790 msyslog(LOG_ERR, 791 "ttl: invalid argument"); 792 errflg = 1; 793 } |
|
784 break; 785 786 case CONF_MOD_MODE: 787 if (i >= ntokens-1) { | 794 break; 795 796 case CONF_MOD_MODE: 797 if (i >= ntokens-1) { |
788 msyslog(LOG_ERR, 789 "mode: argument required"); 790 errflg = 1; 791 break; | 798 msyslog(LOG_ERR, 799 "mode: argument required"); 800 errflg = 1; 801 break; |
792 } 793 ttl = atoi(tokens[++i]); 794 break; 795 796 case CONFIG_UNKNOWN: 797 errflg = 1; 798 break; 799 } 800 if (minpoll > maxpoll) { | 802 } 803 ttl = atoi(tokens[++i]); 804 break; 805 806 case CONFIG_UNKNOWN: 807 errflg = 1; 808 break; 809 } 810 if (minpoll > maxpoll) { |
801 msyslog(LOG_ERR, "config error: minpoll > maxpoll"); | 811 msyslog(LOG_ERR, 812 "config error: minpoll > maxpoll"); |
802 errflg = 1; 803 } 804 if (errflg == 0) { | 813 errflg = 1; 814 } 815 if (errflg == 0) { |
805 if (peer_config(&peeraddr, any_interface, hmode, 806 peerversion, minpoll, maxpoll, peerflags, 807 ttl, peerkey, peerkeystr) == 0) { | 816 if (peer_config(&peeraddr, 817 ANY_INTERFACE_CHOOSE(&peeraddr), hmode, 818 peerversion, minpoll, maxpoll, peerflags, 819 ttl, peerkey, peerkeystr) == 0) { |
808 msyslog(LOG_ERR, 809 "configuration of %s failed", | 820 msyslog(LOG_ERR, 821 "configuration of %s failed", |
810 ntoa(&peeraddr)); | 822 stoa(&peeraddr)); |
811 } | 823 } |
824 if (tok == CONFIG_MANYCASTCLIENT) 825 proto_config(PROTO_MULTICAST_ADD, 826 0, 0., &peeraddr); |
|
812 813 } else if (errflg == -1) { 814 save_resolve(tokens[1], hmode, peerversion, 815 minpoll, maxpoll, peerflags, ttl, 816 peerkey, peerkeystr); 817 } 818 break; 819 --- 85 unchanged lines hidden (view full) --- 905#ifdef DEBUG 906 if (debug) 907 printf("ntp_syslogmask = 0x%08lx (%s)\n", ntp_syslogmask, tokens[i]); 908#endif 909 } 910 break; 911 912 case CONFIG_BROADCASTCLIENT: | 827 828 } else if (errflg == -1) { 829 save_resolve(tokens[1], hmode, peerversion, 830 minpoll, maxpoll, peerflags, ttl, 831 peerkey, peerkeystr); 832 } 833 break; 834 --- 85 unchanged lines hidden (view full) --- 920#ifdef DEBUG 921 if (debug) 922 printf("ntp_syslogmask = 0x%08lx (%s)\n", ntp_syslogmask, tokens[i]); 923#endif 924 } 925 break; 926 927 case CONFIG_BROADCASTCLIENT: |
913 proto_config(PROTO_BROADCLIENT, 1, 0.); | 928 proto_config(PROTO_BROADCLIENT, 1, 0., NULL); |
914 break; | 929 break; |
915 | 930 |
916 case CONFIG_MULTICASTCLIENT: 917 case CONFIG_MANYCASTSERVER: 918 if (ntokens > 1) { | 931 case CONFIG_MULTICASTCLIENT: 932 case CONFIG_MANYCASTSERVER: 933 if (ntokens > 1) { |
919 for (i = 1; i < ntokens; i++) { | 934 istart = 1; 935 memset((char *)&peeraddr, 0, sizeof(peeraddr)); 936 switch (matchkey(tokens[istart], 937 addr_type, 0)) { 938 case CONF_ADDR_IPV4: 939 peeraddr.ss_family = AF_INET; 940 istart++; 941 break; 942 case CONF_ADDR_IPV6: 943 peeraddr.ss_family = AF_INET6; 944 istart++; 945 break; 946 } 947 /* 948 * Abuse maskaddr to store the prefered ip 949 * version. 950 */ 951 memset((char *)&maskaddr, 0, sizeof(maskaddr)); 952 maskaddr.ss_family = peeraddr.ss_family; 953 954 for (i = istart; i < ntokens; i++) { 955 memset((char *)&peeraddr, 0, 956 sizeof(peeraddr)); 957 peeraddr.ss_family = maskaddr.ss_family; |
920 if (getnetnum(tokens[i], &peeraddr, 1)) 921 proto_config(PROTO_MULTICAST_ADD, | 958 if (getnetnum(tokens[i], &peeraddr, 1)) 959 proto_config(PROTO_MULTICAST_ADD, |
922 peeraddr.sin_addr.s_addr, 0.); | 960 0, 0., &peeraddr); |
923 } 924 } else 925 proto_config(PROTO_MULTICAST_ADD, | 961 } 962 } else 963 proto_config(PROTO_MULTICAST_ADD, |
926 htonl(INADDR_NTP), 0.); | 964 0, 0., NULL); |
927 if (tok == CONFIG_MULTICASTCLIENT) 928 sys_bclient = 1; 929 else if (tok == CONFIG_MANYCASTSERVER) 930 sys_manycastserver = 1; 931 break; 932 | 965 if (tok == CONFIG_MULTICASTCLIENT) 966 sys_bclient = 1; 967 else if (tok == CONFIG_MANYCASTSERVER) 968 sys_manycastserver = 1; 969 break; 970 |
933 case CONFIG_AUTHENTICATE: 934 errflg = 0; | 971 case CONFIG_KEYS: |
935 if (ntokens >= 2) { | 972 if (ntokens >= 2) { |
936 if (STREQ(tokens[1], "yes")) 937 proto_config(PROTO_AUTHENTICATE, 1, 0.); 938 else if (STREQ(tokens[1], "no")) 939 proto_config(PROTO_AUTHENTICATE, 0, 0.); 940 else 941 errflg++; 942 } else { 943 errflg++; | 973 getauthkeys(tokens[1]); |
944 } | 974 } |
945 946 if (errflg) 947 msyslog(LOG_ERR, 948 "should be `authenticate yes|no'"); | |
949 break; 950 | 975 break; 976 |
951 case CONFIG_KEYS: 952 if (ntokens >= 2) { 953 getauthkeys(tokens[1]); | 977 case CONFIG_KEYSDIR: 978 if (ntokens < 2) { 979 msyslog(LOG_ERR, 980 "Keys directory name required"); 981 break; |
954 } | 982 } |
983 keysdir = emalloc(strlen(tokens[1]) + 1); 984 strcpy(keysdir, tokens[1]); |
|
955 break; 956 957 case CONFIG_TINKER: 958 for (i = 1; i < ntokens; i++) { 959 int temp; 960 double ftemp; 961 | 985 break; 986 987 case CONFIG_TINKER: 988 for (i = 1; i < ntokens; i++) { 989 int temp; 990 double ftemp; 991 |
962 temp = matchkey(tokens[i++], 963 tinker_keywords); | 992 temp = matchkey(tokens[i++], tinker_keywords, 1); |
964 if (i > ntokens - 1) { 965 msyslog(LOG_ERR, 966 "tinker: missing argument"); 967 errflg++; 968 break; 969 } 970 sscanf(tokens[i], "%lf", &ftemp); 971 switch(temp) { | 993 if (i > ntokens - 1) { 994 msyslog(LOG_ERR, 995 "tinker: missing argument"); 996 errflg++; 997 break; 998 } 999 sscanf(tokens[i], "%lf", &ftemp); 1000 switch(temp) { |
1001 |
|
972 case CONF_CLOCK_MAX: 973 loop_config(LOOP_MAX, ftemp); 974 break; 975 976 case CONF_CLOCK_PANIC: 977 loop_config(LOOP_PANIC, ftemp); 978 break; 979 980 case CONF_CLOCK_PHI: 981 loop_config(LOOP_PHI, ftemp); 982 break; 983 984 case CONF_CLOCK_MINSTEP: 985 loop_config(LOOP_MINSTEP, ftemp); 986 break; 987 | 1002 case CONF_CLOCK_MAX: 1003 loop_config(LOOP_MAX, ftemp); 1004 break; 1005 1006 case CONF_CLOCK_PANIC: 1007 loop_config(LOOP_PANIC, ftemp); 1008 break; 1009 1010 case CONF_CLOCK_PHI: 1011 loop_config(LOOP_PHI, ftemp); 1012 break; 1013 1014 case CONF_CLOCK_MINSTEP: 1015 loop_config(LOOP_MINSTEP, ftemp); 1016 break; 1017 |
988 case CONF_CLOCK_MINPOLL: 989 loop_config(LOOP_MINPOLL, ftemp); 990 break; 991 | |
992 case CONF_CLOCK_ALLAN: 993 loop_config(LOOP_ALLAN, ftemp); 994 break; 995 996 case CONF_CLOCK_HUFFPUFF: 997 loop_config(LOOP_HUFFPUFF, ftemp); 998 break; | 1018 case CONF_CLOCK_ALLAN: 1019 loop_config(LOOP_ALLAN, ftemp); 1020 break; 1021 1022 case CONF_CLOCK_HUFFPUFF: 1023 loop_config(LOOP_HUFFPUFF, ftemp); 1024 break; |
1025 1026 case CONF_CLOCK_FREQ: 1027 loop_config(LOOP_FREQ, ftemp); 1028 break; |
|
999 } 1000 } 1001 break; 1002 | 1029 } 1030 } 1031 break; 1032 |
1003#ifdef AUTOKEY | 1033 case CONFIG_TOS: 1034 for (i = 1; i < ntokens; i++) { 1035 int temp; 1036 double ftemp; 1037 1038 temp = matchkey(tokens[i++], tos_keywords, 1); 1039 if (i > ntokens - 1) { 1040 msyslog(LOG_ERR, 1041 "tinker: missing argument"); 1042 errflg++; 1043 break; 1044 } 1045 sscanf(tokens[i], "%lf", &ftemp); 1046 switch(temp) { 1047 1048 case CONF_TOS_MINCLOCK: 1049 proto_config(PROTO_MINCLOCK, 0, ftemp, NULL); 1050 break; 1051 1052 case CONF_TOS_MINSANE: 1053 proto_config(PROTO_MINSANE, 0, ftemp, NULL); 1054 break; 1055 1056 case CONF_TOS_FLOOR: 1057 proto_config(PROTO_FLOOR, 0, ftemp, NULL); 1058 break; 1059 1060 case CONF_TOS_CEILING: 1061 proto_config(PROTO_CEILING, 0, ftemp, NULL); 1062 break; 1063 1064 case CONF_TOS_COHORT: 1065 proto_config(PROTO_COHORT, 0, ftemp, NULL); 1066 break; 1067 } 1068 } 1069 break; 1070 1071 case CONFIG_TTL: 1072 for (i = 1; i < ntokens && i < MAX_TTL; i++) { 1073 sys_ttl[i - 1] = (u_char) atoi(tokens[i]); 1074 sys_ttlmax = i - 1; 1075 } 1076 break; 1077 1078 case CONFIG_DISCARD: 1079 for (i = 1; i < ntokens; i++) { 1080 int temp; 1081 1082 temp = matchkey(tokens[i++], 1083 discard_keywords, 1); 1084 if (i > ntokens - 1) { 1085 msyslog(LOG_ERR, 1086 "discard: missing argument"); 1087 errflg++; 1088 break; 1089 } 1090 switch(temp) { 1091 case CONF_DISCARD_AVERAGE: 1092 res_avg_interval = atoi(tokens[i++]); 1093 break; 1094 1095 case CONF_DISCARD_MINIMUM: 1096 res_min_interval = atoi(tokens[i++]); 1097 break; 1098 1099 case CONF_DISCARD_MONITOR: 1100 mon_age = atoi(tokens[i++]); 1101 break; 1102 1103 default: 1104 msyslog(LOG_ERR, 1105 "discard: unknown keyword"); 1106 break; 1107 } 1108 } 1109 break; 1110 1111#ifdef OPENSSL |
1004 case CONFIG_REVOKE: 1005 if (ntokens >= 2) | 1112 case CONFIG_REVOKE: 1113 if (ntokens >= 2) |
1006 sys_revoke = 1 << max(atoi(tokens[1]), 10); | 1114 sys_revoke = (u_char) max(atoi(tokens[1]), KEY_REVOKE); |
1007 break; 1008 1009 case CONFIG_AUTOMAX: 1010 if (ntokens >= 2) 1011 sys_automax = 1 << max(atoi(tokens[1]), 10); 1012 break; 1013 | 1115 break; 1116 1117 case CONFIG_AUTOMAX: 1118 if (ntokens >= 2) 1119 sys_automax = 1 << max(atoi(tokens[1]), 10); 1120 break; 1121 |
1014#ifdef PUBKEY 1015 case CONFIG_KEYSDIR: 1016 if (ntokens < 2) { 1017 msyslog(LOG_ERR, 1018 "Keys directory name required"); 1019 break; 1020 } 1021 crypto_config(CRYPTO_CONF_KEYS, tokens[1]); 1022 break; 1023 | |
1024 case CONFIG_CRYPTO: 1025 if (ntokens == 1) { | 1122 case CONFIG_CRYPTO: 1123 if (ntokens == 1) { |
1026 crypto_config(CRYPTO_CONF_FLAGS , "0"); | 1124 crypto_config(CRYPTO_CONF_NONE, NULL); |
1027 break; 1028 } 1029 for (i = 1; i < ntokens; i++) { 1030 int temp; 1031 | 1125 break; 1126 } 1127 for (i = 1; i < ntokens; i++) { 1128 int temp; 1129 |
1032 temp = matchkey(tokens[i++], crypto_keywords); | 1130 temp = matchkey(tokens[i++], 1131 crypto_keywords, 1); |
1033 if (i > ntokens - 1) { 1034 msyslog(LOG_ERR, 1035 "crypto: missing argument"); 1036 errflg++; 1037 break; 1038 } 1039 switch(temp) { | 1132 if (i > ntokens - 1) { 1133 msyslog(LOG_ERR, 1134 "crypto: missing argument"); 1135 errflg++; 1136 break; 1137 } 1138 switch(temp) { |
1040 case CONF_CRYPTO_FLAGS: 1041 crypto_config(CRYPTO_CONF_FLAGS, tokens[i]); | 1139 1140 case CONF_CRYPTO_CERT: 1141 crypto_config(CRYPTO_CONF_CERT, 1142 tokens[i]); |
1042 break; 1043 | 1143 break; 1144 |
1044 case CONF_CRYPTO_LEAP: 1045 crypto_config(CRYPTO_CONF_LEAP, tokens[i]); | 1145 case CONF_CRYPTO_RSA: 1146 crypto_config(CRYPTO_CONF_PRIV, 1147 tokens[i]); |
1046 break; 1047 | 1148 break; 1149 |
1048 case CONF_CRYPTO_DH: 1049 crypto_config(CRYPTO_CONF_DH, tokens[i]); | 1150 case CONF_CRYPTO_IFFPAR: 1151 crypto_config(CRYPTO_CONF_IFFPAR, 1152 tokens[i]); |
1050 break; 1051 | 1153 break; 1154 |
1052 case CONF_CRYPTO_PRIVATEKEY: 1053 crypto_config(CRYPTO_CONF_PRIV, tokens[i]); | 1155 case CONF_CRYPTO_GQPAR: 1156 crypto_config(CRYPTO_CONF_GQPAR, 1157 tokens[i]); |
1054 break; 1055 | 1158 break; 1159 |
1056 case CONF_CRYPTO_PUBLICKEY: 1057 crypto_config(CRYPTO_CONF_PUBL, tokens[i]); | 1160 case CONF_CRYPTO_MVPAR: 1161 crypto_config(CRYPTO_CONF_MVPAR, 1162 tokens[i]); |
1058 break; 1059 | 1163 break; 1164 |
1060 case CONF_CRYPTO_CERT: 1061 crypto_config(CRYPTO_CONF_CERT, tokens[i]); | 1165 case CONF_CRYPTO_LEAP: 1166 crypto_config(CRYPTO_CONF_LEAP, 1167 tokens[i]); |
1062 break; 1063 | 1168 break; 1169 |
1170 case CONF_CRYPTO_PW: 1171 crypto_config(CRYPTO_CONF_PW, 1172 tokens[i]); 1173 break; 1174 1175 case CONF_CRYPTO_RAND: 1176 crypto_config(CRYPTO_CONF_RAND, 1177 tokens[i]); 1178 break; 1179 1180 case CONF_CRYPTO_SIGN: 1181 crypto_config(CRYPTO_CONF_SIGN, 1182 tokens[i]); 1183 break; 1184 |
|
1064 default: | 1185 default: |
1065 msyslog(LOG_ERR, "crypto: unknown keyword"); | 1186 msyslog(LOG_ERR, 1187 "crypto: unknown keyword"); |
1066 break; 1067 } 1068 } 1069 break; | 1188 break; 1189 } 1190 } 1191 break; |
1070#endif /* PUBKEY */ 1071#endif /* AUTOKEY */ | 1192#endif /* OPENSSL */ |
1072 1073 case CONFIG_RESTRICT: 1074 if (ntokens < 2) { 1075 msyslog(LOG_ERR, "restrict requires an address"); 1076 break; 1077 } | 1193 1194 case CONFIG_RESTRICT: 1195 if (ntokens < 2) { 1196 msyslog(LOG_ERR, "restrict requires an address"); 1197 break; 1198 } |
1078 if (STREQ(tokens[1], "default")) 1079 peeraddr.sin_addr.s_addr = htonl(INADDR_ANY); 1080 else if (!getnetnum(tokens[1], &peeraddr, 1)) 1081 break; | 1199 istart = 1; 1200 memset((char *)&peeraddr, 0, sizeof(peeraddr)); 1201 switch (matchkey(tokens[istart], addr_type, 0)) { 1202 case CONF_ADDR_IPV4: 1203 peeraddr.ss_family = AF_INET; 1204 istart++; 1205 break; 1206 case CONF_ADDR_IPV6: 1207 peeraddr.ss_family = AF_INET6; 1208 istart++; 1209 break; 1210 } |
1082 1083 /* | 1211 1212 /* |
1213 * Assume default means an IPv4 address, except 1214 * if forced by a -4 or -6. 1215 */ 1216 if (STREQ(tokens[istart], "default")) { 1217 if (peeraddr.ss_family == 0) 1218 peeraddr.ss_family = AF_INET; 1219 } else if (!getnetnum(tokens[istart], &peeraddr, 1)) 1220 break; 1221 1222 /* |
|
1084 * Use peerversion as flags, peerkey as mflags. Ick. 1085 */ 1086 peerversion = 0; 1087 peerkey = 0; 1088 errflg = 0; | 1223 * Use peerversion as flags, peerkey as mflags. Ick. 1224 */ 1225 peerversion = 0; 1226 peerkey = 0; 1227 errflg = 0; |
1089 maskaddr.sin_addr.s_addr = ~(u_int32)0; 1090 for (i = 2; i < ntokens; i++) { 1091 switch (matchkey(tokens[i], res_keywords)) { | 1228 SET_HOSTMASK(&maskaddr, peeraddr.ss_family); 1229 istart++; 1230 for (i = istart; i < ntokens; i++) { 1231 switch (matchkey(tokens[i], res_keywords, 1)) { |
1092 case CONF_RES_MASK: 1093 if (i >= ntokens-1) { 1094 msyslog(LOG_ERR, 1095 "mask keyword needs argument"); 1096 errflg++; 1097 break; 1098 } 1099 i++; --- 49 unchanged lines hidden (view full) --- 1149 peerversion |= RES_LIMITED; 1150 break; 1151 1152 case CONFIG_UNKNOWN: 1153 errflg++; 1154 break; 1155 } 1156 } | 1232 case CONF_RES_MASK: 1233 if (i >= ntokens-1) { 1234 msyslog(LOG_ERR, 1235 "mask keyword needs argument"); 1236 errflg++; 1237 break; 1238 } 1239 i++; --- 49 unchanged lines hidden (view full) --- 1289 peerversion |= RES_LIMITED; 1290 break; 1291 1292 case CONFIG_UNKNOWN: 1293 errflg++; 1294 break; 1295 } 1296 } |
1157 if (SRCADR(&peeraddr) == htonl(INADDR_ANY)) 1158 maskaddr.sin_addr.s_addr = 0; | 1297 if (SOCKNUL(&peeraddr)) 1298 ANYSOCK(&maskaddr); |
1159 if (!errflg) 1160 hack_restrict(RESTRICT_FLAGS, &peeraddr, &maskaddr, 1161 (int)peerkey, peerversion); 1162 break; 1163 1164 case CONFIG_BDELAY: 1165 if (ntokens >= 2) { 1166 double tmp; 1167 1168 if (sscanf(tokens[1], "%lf", &tmp) != 1) { 1169 msyslog(LOG_ERR, 1170 "broadcastdelay value %s undecodable", 1171 tokens[1]); 1172 } else { | 1299 if (!errflg) 1300 hack_restrict(RESTRICT_FLAGS, &peeraddr, &maskaddr, 1301 (int)peerkey, peerversion); 1302 break; 1303 1304 case CONFIG_BDELAY: 1305 if (ntokens >= 2) { 1306 double tmp; 1307 1308 if (sscanf(tokens[1], "%lf", &tmp) != 1) { 1309 msyslog(LOG_ERR, 1310 "broadcastdelay value %s undecodable", 1311 tokens[1]); 1312 } else { |
1173 proto_config(PROTO_BROADDELAY, 0, tmp); | 1313 proto_config(PROTO_BROADDELAY, 0, tmp, NULL); |
1174 } 1175 } 1176 break; 1177 | 1314 } 1315 } 1316 break; 1317 |
1318 case CONFIG_CDELAY: 1319 if (ntokens >= 2) { 1320 u_long ui; 1321 1322 if (sscanf(tokens[1], "%ld", &ui) != 1) 1323 msyslog(LOG_ERR, 1324 "illegal value - line ignored"); 1325 else 1326 proto_config(PROTO_CALLDELAY, ui, 0, NULL); 1327 } 1328 break; 1329 |
|
1178 case CONFIG_TRUSTEDKEY: 1179 for (i = 1; i < ntokens; i++) { 1180 keyid_t tkey; 1181 1182 tkey = atol(tokens[i]); 1183 if (tkey == 0) { 1184 msyslog(LOG_ERR, 1185 "trusted key %s unlikely", --- 41 unchanged lines hidden (view full) --- 1227 break; 1228 1229 case CONFIG_TRAP: 1230 if (ntokens < 2) { 1231 msyslog(LOG_ERR, 1232 "no address for trap command, line ignored"); 1233 break; 1234 } | 1330 case CONFIG_TRUSTEDKEY: 1331 for (i = 1; i < ntokens; i++) { 1332 keyid_t tkey; 1333 1334 tkey = atol(tokens[i]); 1335 if (tkey == 0) { 1336 msyslog(LOG_ERR, 1337 "trusted key %s unlikely", --- 41 unchanged lines hidden (view full) --- 1379 break; 1380 1381 case CONFIG_TRAP: 1382 if (ntokens < 2) { 1383 msyslog(LOG_ERR, 1384 "no address for trap command, line ignored"); 1385 break; 1386 } |
1235 if (!getnetnum(tokens[1], &peeraddr, 1)) | 1387 istart = 1; 1388 memset((char *)&peeraddr, 0, sizeof(peeraddr)); 1389 switch (matchkey(tokens[istart], addr_type, 0)) { 1390 case CONF_ADDR_IPV4: 1391 peeraddr.ss_family = AF_INET; 1392 istart++; 1393 break; 1394 case CONF_ADDR_IPV6: 1395 peeraddr.ss_family = AF_INET6; 1396 istart++; 1397 break; 1398 } 1399 1400 if (!getnetnum(tokens[istart], &peeraddr, 1)) |
1236 break; 1237 1238 /* 1239 * Use peerversion for port number. Barf. 1240 */ 1241 errflg = 0; 1242 peerversion = 0; 1243 localaddr = 0; | 1401 break; 1402 1403 /* 1404 * Use peerversion for port number. Barf. 1405 */ 1406 errflg = 0; 1407 peerversion = 0; 1408 localaddr = 0; |
1244 for (i = 2; i < ntokens-1; i++) 1245 switch (matchkey(tokens[i], trap_keywords)) { | 1409 istart++; 1410 for (i = istart; i < ntokens-1; i++) 1411 switch (matchkey(tokens[i], trap_keywords, 1)) { |
1246 case CONF_TRAP_PORT: 1247 if (i >= ntokens-1) { 1248 msyslog(LOG_ERR, 1249 "trap port requires an argument"); 1250 errflg = 1; 1251 break; 1252 } 1253 peerversion = atoi(tokens[++i]); --- 9 unchanged lines hidden (view full) --- 1263 case CONF_TRAP_INTERFACE: 1264 if (i >= ntokens-1) { 1265 msyslog(LOG_ERR, 1266 "trap interface requires an argument"); 1267 errflg = 1; 1268 break; 1269 } 1270 | 1412 case CONF_TRAP_PORT: 1413 if (i >= ntokens-1) { 1414 msyslog(LOG_ERR, 1415 "trap port requires an argument"); 1416 errflg = 1; 1417 break; 1418 } 1419 peerversion = atoi(tokens[++i]); --- 9 unchanged lines hidden (view full) --- 1429 case CONF_TRAP_INTERFACE: 1430 if (i >= ntokens-1) { 1431 msyslog(LOG_ERR, 1432 "trap interface requires an argument"); 1433 errflg = 1; 1434 break; 1435 } 1436 |
1437 memset((char *)&maskaddr, 0, 1438 sizeof(maskaddr)); 1439 maskaddr.ss_family = peeraddr.ss_family; |
|
1271 if (!getnetnum(tokens[++i], 1272 &maskaddr, 1)) { 1273 errflg = 1; 1274 break; 1275 } 1276 1277 localaddr = findinterface(&maskaddr); 1278 if (localaddr == NULL) { 1279 msyslog(LOG_ERR, 1280 "can't find interface with address %s", | 1440 if (!getnetnum(tokens[++i], 1441 &maskaddr, 1)) { 1442 errflg = 1; 1443 break; 1444 } 1445 1446 localaddr = findinterface(&maskaddr); 1447 if (localaddr == NULL) { 1448 msyslog(LOG_ERR, 1449 "can't find interface with address %s", |
1281 ntoa(&maskaddr)); | 1450 stoa(&maskaddr)); |
1282 errflg = 1; 1283 } 1284 break; 1285 1286 case CONFIG_UNKNOWN: 1287 errflg++; 1288 break; 1289 } 1290 1291 if (!errflg) { 1292 if (peerversion != 0) | 1451 errflg = 1; 1452 } 1453 break; 1454 1455 case CONFIG_UNKNOWN: 1456 errflg++; 1457 break; 1458 } 1459 1460 if (!errflg) { 1461 if (peerversion != 0) |
1293 peeraddr.sin_port = htons( (u_short) peerversion); | 1462 ((struct sockaddr_in6*)&peeraddr)->sin6_port = htons( (u_short) peerversion); |
1294 else | 1463 else |
1295 peeraddr.sin_port = htons(TRAPPORT); | 1464 ((struct sockaddr_in6*)&peeraddr)->sin6_port = htons(TRAPPORT); |
1296 if (localaddr == NULL) | 1465 if (localaddr == NULL) |
1297 localaddr = any_interface; | 1466 localaddr = ANY_INTERFACE_CHOOSE(&peeraddr); |
1298 if (!ctlsettrap(&peeraddr, localaddr, 0, 1299 NTP_VERSION)) 1300 msyslog(LOG_ERR, 1301 "can't set trap for %s, no resources", | 1467 if (!ctlsettrap(&peeraddr, localaddr, 0, 1468 NTP_VERSION)) 1469 msyslog(LOG_ERR, 1470 "can't set trap for %s, no resources", |
1302 ntoa(&peeraddr)); | 1471 stoa(&peeraddr)); |
1303 } 1304 break; 1305 1306 case CONFIG_FUDGE: 1307 if (ntokens < 2) { 1308 msyslog(LOG_ERR, 1309 "no address for fudge command, line ignored"); 1310 break; 1311 } | 1472 } 1473 break; 1474 1475 case CONFIG_FUDGE: 1476 if (ntokens < 2) { 1477 msyslog(LOG_ERR, 1478 "no address for fudge command, line ignored"); 1479 break; 1480 } |
1481 memset((char *)&peeraddr, 0, sizeof(peeraddr)); |
|
1312 if (!getnetnum(tokens[1], &peeraddr, 1)) 1313 break; 1314 1315 if (!ISREFCLOCKADR(&peeraddr)) { 1316 msyslog(LOG_ERR, 1317 "%s is inappropriate address for the fudge command, line ignored", | 1482 if (!getnetnum(tokens[1], &peeraddr, 1)) 1483 break; 1484 1485 if (!ISREFCLOCKADR(&peeraddr)) { 1486 msyslog(LOG_ERR, 1487 "%s is inappropriate address for the fudge command, line ignored", |
1318 ntoa(&peeraddr)); | 1488 stoa(&peeraddr)); |
1319 break; 1320 } 1321 1322 memset((void *)&clock_stat, 0, sizeof clock_stat); 1323 fudgeflag = 0; 1324 errflg = 0; 1325 for (i = 2; i < ntokens-1; i++) { 1326 switch (c = matchkey(tokens[i], | 1489 break; 1490 } 1491 1492 memset((void *)&clock_stat, 0, sizeof clock_stat); 1493 fudgeflag = 0; 1494 errflg = 0; 1495 for (i = 2; i < ntokens-1; i++) { 1496 switch (c = matchkey(tokens[i], |
1327 fudge_keywords)) { | 1497 fudge_keywords, 1)) { |
1328 case CONF_FDG_TIME1: 1329 if (sscanf(tokens[++i], "%lf", 1330 &clock_stat.fudgetime1) != 1) { 1331 msyslog(LOG_ERR, 1332 "fudge %s time1 value in error", | 1498 case CONF_FDG_TIME1: 1499 if (sscanf(tokens[++i], "%lf", 1500 &clock_stat.fudgetime1) != 1) { 1501 msyslog(LOG_ERR, 1502 "fudge %s time1 value in error", |
1333 ntoa(&peeraddr)); | 1503 stoa(&peeraddr)); |
1334 errflg = i; 1335 break; 1336 } 1337 clock_stat.haveflags |= CLK_HAVETIME1; 1338 break; 1339 1340 case CONF_FDG_TIME2: 1341 if (sscanf(tokens[++i], "%lf", 1342 &clock_stat.fudgetime2) != 1) { 1343 msyslog(LOG_ERR, 1344 "fudge %s time2 value in error", | 1504 errflg = i; 1505 break; 1506 } 1507 clock_stat.haveflags |= CLK_HAVETIME1; 1508 break; 1509 1510 case CONF_FDG_TIME2: 1511 if (sscanf(tokens[++i], "%lf", 1512 &clock_stat.fudgetime2) != 1) { 1513 msyslog(LOG_ERR, 1514 "fudge %s time2 value in error", |
1345 ntoa(&peeraddr)); | 1515 stoa(&peeraddr)); |
1346 errflg = i; 1347 break; 1348 } 1349 clock_stat.haveflags |= CLK_HAVETIME2; 1350 break; 1351 1352 1353 case CONF_FDG_STRATUM: 1354 if (!atoint(tokens[++i], &stratum)) 1355 { 1356 msyslog(LOG_ERR, 1357 "fudge %s stratum value in error", | 1516 errflg = i; 1517 break; 1518 } 1519 clock_stat.haveflags |= CLK_HAVETIME2; 1520 break; 1521 1522 1523 case CONF_FDG_STRATUM: 1524 if (!atoint(tokens[++i], &stratum)) 1525 { 1526 msyslog(LOG_ERR, 1527 "fudge %s stratum value in error", |
1358 ntoa(&peeraddr)); | 1528 stoa(&peeraddr)); |
1359 errflg = i; 1360 break; 1361 } 1362 clock_stat.fudgeval1 = stratum; 1363 clock_stat.haveflags |= CLK_HAVEVAL1; 1364 break; 1365 1366 case CONF_FDG_REFID: --- 7 unchanged lines hidden (view full) --- 1374 case CONF_FDG_FLAG1: 1375 case CONF_FDG_FLAG2: 1376 case CONF_FDG_FLAG3: 1377 case CONF_FDG_FLAG4: 1378 if (!atouint(tokens[++i], &fudgeflag) 1379 || fudgeflag > 1) { 1380 msyslog(LOG_ERR, 1381 "fudge %s flag value in error", | 1529 errflg = i; 1530 break; 1531 } 1532 clock_stat.fudgeval1 = stratum; 1533 clock_stat.haveflags |= CLK_HAVEVAL1; 1534 break; 1535 1536 case CONF_FDG_REFID: --- 7 unchanged lines hidden (view full) --- 1544 case CONF_FDG_FLAG1: 1545 case CONF_FDG_FLAG2: 1546 case CONF_FDG_FLAG3: 1547 case CONF_FDG_FLAG4: 1548 if (!atouint(tokens[++i], &fudgeflag) 1549 || fudgeflag > 1) { 1550 msyslog(LOG_ERR, 1551 "fudge %s flag value in error", |
1382 ntoa(&peeraddr)); | 1552 stoa(&peeraddr)); |
1383 errflg = i; 1384 break; 1385 } 1386 switch(c) { 1387 case CONF_FDG_FLAG1: 1388 c = CLK_FLAG1; 1389 clock_stat.haveflags|=CLK_HAVEFLAG1; 1390 break; --- 79 unchanged lines hidden (view full) --- 1470 * peerflags is (ab)used for filegen flags 1471 */ 1472 peerversion = 0; 1473 peerkey = filegen->type; 1474 peerflags = filegen->flag; 1475 errflg = 0; 1476 1477 for (i = 2; i < ntokens; i++) { | 1553 errflg = i; 1554 break; 1555 } 1556 switch(c) { 1557 case CONF_FDG_FLAG1: 1558 c = CLK_FLAG1; 1559 clock_stat.haveflags|=CLK_HAVEFLAG1; 1560 break; --- 79 unchanged lines hidden (view full) --- 1640 * peerflags is (ab)used for filegen flags 1641 */ 1642 peerversion = 0; 1643 peerkey = filegen->type; 1644 peerflags = filegen->flag; 1645 errflg = 0; 1646 1647 for (i = 2; i < ntokens; i++) { |
1478 switch (matchkey(tokens[i], filegen_keywords)) { | 1648 switch (matchkey(tokens[i], 1649 filegen_keywords, 1)) { |
1479 case CONF_FGEN_FILE: 1480 if (i >= ntokens - 1) { 1481 msyslog(LOG_ERR, 1482 "filegen %s file requires argument", 1483 tokens[1]); 1484 errflg = i; 1485 break; 1486 } 1487 peerversion = ++i; 1488 break; 1489 case CONF_FGEN_TYPE: 1490 if (i >= ntokens -1) { 1491 msyslog(LOG_ERR, 1492 "filegen %s type requires argument", 1493 tokens[1]); 1494 errflg = i; 1495 break; 1496 } | 1650 case CONF_FGEN_FILE: 1651 if (i >= ntokens - 1) { 1652 msyslog(LOG_ERR, 1653 "filegen %s file requires argument", 1654 tokens[1]); 1655 errflg = i; 1656 break; 1657 } 1658 peerversion = ++i; 1659 break; 1660 case CONF_FGEN_TYPE: 1661 if (i >= ntokens -1) { 1662 msyslog(LOG_ERR, 1663 "filegen %s type requires argument", 1664 tokens[1]); 1665 errflg = i; 1666 break; 1667 } |
1497 peerkey = matchkey(tokens[++i], fgen_types); | 1668 peerkey = matchkey(tokens[++i], 1669 fgen_types, 1); |
1498 if (peerkey == CONFIG_UNKNOWN) { 1499 msyslog(LOG_ERR, 1500 "filegen %s unknown type \"%s\"", 1501 tokens[1], tokens[i]); 1502 errflg = i; 1503 break; 1504 } 1505 break; --- 21 unchanged lines hidden (view full) --- 1527 break; 1528 1529 case CONFIG_SETVAR: 1530 if (ntokens < 2) { 1531 msyslog(LOG_ERR, 1532 "no value for setvar command - line ignored"); 1533 } else { 1534 set_sys_var(tokens[1], strlen(tokens[1])+1, | 1670 if (peerkey == CONFIG_UNKNOWN) { 1671 msyslog(LOG_ERR, 1672 "filegen %s unknown type \"%s\"", 1673 tokens[1], tokens[i]); 1674 errflg = i; 1675 break; 1676 } 1677 break; --- 21 unchanged lines hidden (view full) --- 1699 break; 1700 1701 case CONFIG_SETVAR: 1702 if (ntokens < 2) { 1703 msyslog(LOG_ERR, 1704 "no value for setvar command - line ignored"); 1705 } else { 1706 set_sys_var(tokens[1], strlen(tokens[1])+1, |
1535 RW | | 1707 (u_short) (RW | |
1536 ((((ntokens > 2) 1537 && !strcmp(tokens[2], 1538 "default"))) 1539 ? DEF | 1708 ((((ntokens > 2) 1709 && !strcmp(tokens[2], 1710 "default"))) 1711 ? DEF |
1540 : 0)); | 1712 : 0))); |
1541 } 1542 break; 1543 | 1713 } 1714 break; 1715 |
1544 case CONFIG_CLIENTLIMIT: 1545 if (ntokens < 2) { 1546 msyslog(LOG_ERR, 1547 "no value for clientlimit command - line ignored"); 1548 } else { 1549 u_long ui; 1550 1551 if (!atouint(tokens[1], &ui) || !ui) { 1552 msyslog(LOG_ERR, 1553 "illegal value for clientlimit command - line ignored"); 1554 } else { 1555 char bp[80]; 1556 1557#ifdef DEBUG 1558 if (debug) 1559 sprintf(bp, "client_limit=%lu", ui); 1560#endif 1561 set_sys_var(bp, strlen(bp)+1, RO); 1562 client_limit = ui; 1563 } 1564 } 1565 break; 1566 1567 case CONFIG_CLIENTPERIOD: 1568 if (ntokens < 2) { 1569 msyslog(LOG_ERR, 1570 "no value for clientperiod command - line ignored"); 1571 } else { 1572 u_long ui; 1573 1574 if (!atouint(tokens[1], &ui) || ui < 64) { 1575 msyslog(LOG_ERR, 1576 "illegal value for clientperiod command - line ignored"); 1577 } else { 1578 char bp[80]; 1579 1580 sprintf(bp, "client_limit_period=%ld", ui); 1581 set_sys_var(bp, strlen(bp)+1, RO); 1582 client_limit_period = ui; 1583 } 1584 } 1585 break; 1586 | |
1587 case CONFIG_ENABLE: 1588 for (i = 1; i < ntokens; i++) { 1589 int flag; 1590 | 1716 case CONFIG_ENABLE: 1717 for (i = 1; i < ntokens; i++) { 1718 int flag; 1719 |
1591 flag = matchkey(tokens[i], flags_keywords); | 1720 flag = matchkey(tokens[i], flags_keywords, 1); |
1592 if (flag == CONFIG_UNKNOWN) { 1593 msyslog(LOG_ERR, 1594 "enable unknown flag %s", 1595 tokens[i]); 1596 errflg = 1; 1597 break; 1598 } | 1721 if (flag == CONFIG_UNKNOWN) { 1722 msyslog(LOG_ERR, 1723 "enable unknown flag %s", 1724 tokens[i]); 1725 errflg = 1; 1726 break; 1727 } |
1599 proto_config(flag, 1, 0.); | 1728 proto_config(flag, 1, 0., NULL); |
1600 } 1601 break; 1602 1603 case CONFIG_DISABLE: 1604 for (i = 1; i < ntokens; i++) { 1605 int flag; 1606 | 1729 } 1730 break; 1731 1732 case CONFIG_DISABLE: 1733 for (i = 1; i < ntokens; i++) { 1734 int flag; 1735 |
1607 flag = matchkey(tokens[i], flags_keywords); | 1736 flag = matchkey(tokens[i], flags_keywords, 1); |
1608 if (flag == CONFIG_UNKNOWN) { 1609 msyslog(LOG_ERR, 1610 "disable unknown flag %s", 1611 tokens[i]); 1612 errflg = 1; 1613 break; 1614 } | 1737 if (flag == CONFIG_UNKNOWN) { 1738 msyslog(LOG_ERR, 1739 "disable unknown flag %s", 1740 tokens[i]); 1741 errflg = 1; 1742 break; 1743 } |
1615 proto_config(flag, 0, 0.); | 1744 proto_config(flag, 0, 0., NULL); |
1616 } 1617 break; 1618 1619 case CONFIG_PHONE: 1620 for (i = 1; i < ntokens && i < MAXPHONE; i++) { 1621 (void)strncpy(sys_phone[i - 1], 1622 tokens[i], MAXDIAL); 1623 } 1624 sys_phone[i - 1][0] = '\0'; 1625 break; 1626 | 1745 } 1746 break; 1747 1748 case CONFIG_PHONE: 1749 for (i = 1; i < ntokens && i < MAXPHONE; i++) { 1750 (void)strncpy(sys_phone[i - 1], 1751 tokens[i], MAXDIAL); 1752 } 1753 sys_phone[i - 1][0] = '\0'; 1754 break; 1755 |
1627 case CONFIG_PPS: 1628 if (ntokens < 2) { 1629 msyslog(LOG_ERR, 1630 "pps missing device name"); 1631 break; 1632 } 1633 (void)strncpy(pps_device, tokens[1], MAXPPS); 1634 for (i = 2; i < ntokens; i++) { 1635 int flag; | 1756 case CONFIG_ADJ: { 1757 double ftemp; |
1636 | 1758 |
1637 flag = matchkey(tokens[i], pps_keywords); 1638 switch(flag) { 1639 case CONF_PPS_ASSERT: 1640 pps_assert = 0; 1641 break; 1642 case CONF_PPS_CLEAR: 1643 pps_assert = 1; 1644 break; 1645 case CONF_PPS_HARDPPS: 1646 pps_hardpps = 1; 1647 break; 1648 default: 1649 msyslog(LOG_ERR, 1650 "pps unknown flag %s", 1651 tokens[i]); 1652 errflg = 1; 1653 break; 1654 } 1655 if(errflg) 1656 break; | 1759 sscanf(tokens[1], "%lf", &ftemp); 1760 proto_config(PROTO_ADJ, 0, ftemp, NULL); |
1657 } 1658 break; | 1761 } 1762 break; |
1763 |
|
1659 } 1660 } 1661 if (fp[0]) 1662 (void)fclose(fp[0]); 1663 1664#ifdef HAVE_NETINFO 1665 if (config_netinfo) 1666 free_netinfo_config(config_netinfo); --- 8 unchanged lines hidden (view full) --- 1675 1676 /* if doesn't exist, make up one at random */ 1677 if (!authhavekey(req_keyid)) { 1678 char rankey[9]; 1679 int j; 1680 1681 for (i = 0; i < 8; i++) 1682 for (j = 1; j < 100; ++j) { | 1764 } 1765 } 1766 if (fp[0]) 1767 (void)fclose(fp[0]); 1768 1769#ifdef HAVE_NETINFO 1770 if (config_netinfo) 1771 free_netinfo_config(config_netinfo); --- 8 unchanged lines hidden (view full) --- 1780 1781 /* if doesn't exist, make up one at random */ 1782 if (!authhavekey(req_keyid)) { 1783 char rankey[9]; 1784 int j; 1785 1786 for (i = 0; i < 8; i++) 1787 for (j = 1; j < 100; ++j) { |
1683 rankey[i] = RANDOM & 0xff; | 1788 rankey[i] = (char) (RANDOM & 0xff); |
1684 if (rankey[i] != 0) break; 1685 } 1686 rankey[8] = 0; 1687 authusekey(req_keyid, KEY_TYPE_MD5, (u_char *)rankey); 1688 authtrust(req_keyid, 1); 1689 if (!authhavekey(req_keyid)) { 1690 msyslog(LOG_ERR, "getconfig: Couldn't generate a valid random key!"); 1691 /* HMS: Should this be fatal? */ 1692 } 1693 } 1694 1695 /* save keyid so we will accept config requests with it */ 1696 info_auth_keyid = req_keyid; 1697#endif /* !defined(VMS) && !defined(SYS_VXWORKS) */ 1698 1699 if (res_fp != NULL) { | 1789 if (rankey[i] != 0) break; 1790 } 1791 rankey[8] = 0; 1792 authusekey(req_keyid, KEY_TYPE_MD5, (u_char *)rankey); 1793 authtrust(req_keyid, 1); 1794 if (!authhavekey(req_keyid)) { 1795 msyslog(LOG_ERR, "getconfig: Couldn't generate a valid random key!"); 1796 /* HMS: Should this be fatal? */ 1797 } 1798 } 1799 1800 /* save keyid so we will accept config requests with it */ 1801 info_auth_keyid = req_keyid; 1802#endif /* !defined(VMS) && !defined(SYS_VXWORKS) */ 1803 1804 if (res_fp != NULL) { |
1700 /* 1701 * Need name resolution 1702 */ 1703 do_resolve_internal(); | 1805 if (call_resolver) { 1806 /* 1807 * Need name resolution 1808 */ 1809 do_resolve_internal(); 1810 } |
1704 } 1705} 1706 1707 1708#ifdef HAVE_NETINFO 1709 1710/* 1711 * get_netinfo_config - find the nearest NetInfo domain with an ntp --- 84 unchanged lines hidden (view full) --- 1796 if (namelist.ni_namelist_len == 0) continue; 1797 1798 if (! (val_list = config->val_list = (char**)malloc(sizeof(char*) * (namelist.ni_namelist_len + 1)))) 1799 { msyslog(LOG_ERR, "out of memory while configuring"); break; } 1800 1801 for (index = 0; index < namelist.ni_namelist_len; index++) { 1802 char *value = namelist.ni_namelist_val[index]; 1803 | 1811 } 1812} 1813 1814 1815#ifdef HAVE_NETINFO 1816 1817/* 1818 * get_netinfo_config - find the nearest NetInfo domain with an ntp --- 84 unchanged lines hidden (view full) --- 1903 if (namelist.ni_namelist_len == 0) continue; 1904 1905 if (! (val_list = config->val_list = (char**)malloc(sizeof(char*) * (namelist.ni_namelist_len + 1)))) 1906 { msyslog(LOG_ERR, "out of memory while configuring"); break; } 1907 1908 for (index = 0; index < namelist.ni_namelist_len; index++) { 1909 char *value = namelist.ni_namelist_val[index]; 1910 |
1804 if (! (val_list[index] = (char*)malloc(strlen(value+1)))) | 1911 if (! (val_list[index] = (char*)malloc(strlen(value)+1))) |
1805 { msyslog(LOG_ERR, "out of memory while configuring"); break; } 1806 1807 strcpy(val_list[index], value); 1808 } 1809 val_list[index] = NULL; 1810 1811 break; 1812 } --- 103 unchanged lines hidden (view full) --- 1916 break; 1917 } 1918 } 1919 1920 /* 1921 * Return the match 1922 */ 1923 *ntokens = ntok + 1; | 1912 { msyslog(LOG_ERR, "out of memory while configuring"); break; } 1913 1914 strcpy(val_list[index], value); 1915 } 1916 val_list[index] = NULL; 1917 1918 break; 1919 } --- 103 unchanged lines hidden (view full) --- 2023 break; 2024 } 2025 } 2026 2027 /* 2028 * Return the match 2029 */ 2030 *ntokens = ntok + 1; |
1924 ntok = matchkey(tokenlist[0], keywords); | 2031 ntok = matchkey(tokenlist[0], keywords, 1); |
1925 if (ntok == CONFIG_UNKNOWN) 1926 goto again; 1927 return ntok; 1928} 1929 1930 1931 1932/* 1933 * matchkey - match a keyword to a list 1934 */ 1935static int 1936matchkey( 1937 register char *word, | 2032 if (ntok == CONFIG_UNKNOWN) 2033 goto again; 2034 return ntok; 2035} 2036 2037 2038 2039/* 2040 * matchkey - match a keyword to a list 2041 */ 2042static int 2043matchkey( 2044 register char *word, |
1938 register struct keyword *keys | 2045 register struct keyword *keys, 2046 int complain |
1939 ) 1940{ 1941 for (;;) { 1942 if (keys->keytype == CONFIG_UNKNOWN) { | 2047 ) 2048{ 2049 for (;;) { 2050 if (keys->keytype == CONFIG_UNKNOWN) { |
1943 msyslog(LOG_ERR, 1944 "configure: keyword \"%s\" unknown, line ignored", 1945 word); | 2051 if (complain) 2052 msyslog(LOG_ERR, 2053 "configure: keyword \"%s\" unknown, line ignored", 2054 word); |
1946 return CONFIG_UNKNOWN; 1947 } 1948 if (STRSAME(word, keys->text)) 1949 return keys->keytype; 1950 keys++; 1951 } 1952} 1953 1954 1955/* 1956 * getnetnum - return a net number (this is crude, but careful) 1957 */ 1958static int 1959getnetnum( 1960 const char *num, | 2055 return CONFIG_UNKNOWN; 2056 } 2057 if (STRSAME(word, keys->text)) 2058 return keys->keytype; 2059 keys++; 2060 } 2061} 2062 2063 2064/* 2065 * getnetnum - return a net number (this is crude, but careful) 2066 */ 2067static int 2068getnetnum( 2069 const char *num, |
1961 struct sockaddr_in *addr, | 2070 struct sockaddr_storage *addr, |
1962 int complain 1963 ) 1964{ | 2071 int complain 2072 ) 2073{ |
1965 register const char *cp; 1966 register char *bp; 1967 register int i; 1968 register int temp; 1969 char buf[80]; /* will core dump on really stupid stuff */ 1970 u_int32 netnum; | 2074 struct addrinfo hints; 2075 struct addrinfo *ptr; |
1971 | 2076 |
1972 /* XXX ELIMINATE replace with decodenetnum */ 1973 cp = num; 1974 netnum = 0; 1975 for (i = 0; i < 4; i++) { 1976 bp = buf; 1977 while (isdigit((int)*cp)) 1978 *bp++ = *cp++; 1979 if (bp == buf) 1980 break; | 2077 /* Get host address. Looking for UDP datagram connection */ 2078 memset(&hints, 0, sizeof (hints)); 2079 if (addr->ss_family == AF_INET || addr->ss_family == AF_INET6) 2080 hints.ai_family = addr->ss_family; 2081 else 2082 hints.ai_family = AF_UNSPEC; |
1981 | 2083 |
1982 if (i < 3) { 1983 if (*cp++ != '.') 1984 break; 1985 } else if (*cp != '\0') 1986 break; 1987 1988 *bp = '\0'; 1989 temp = atoi(buf); 1990 if (temp > 255) 1991 break; 1992 netnum <<= 8; 1993 netnum += temp; | 2084 hints.ai_socktype = SOCK_DGRAM; |
1994#ifdef DEBUG 1995 if (debug > 3) | 2085#ifdef DEBUG 2086 if (debug > 3) |
1996 printf("getnetnum %s step %d buf %s temp %d netnum %lu\n", 1997 num, i, buf, temp, (u_long)netnum); | 2087 printf("getaddrinfo %s\n", num); |
1998#endif | 2088#endif |
1999 } 2000 2001 if (i < 4) { | 2089 if (getaddrinfo(num, "ntp", &hints, &ptr)!=0) { |
2002 if (complain) 2003 msyslog(LOG_ERR, | 2090 if (complain) 2091 msyslog(LOG_ERR, |
2004 "getnetnum: \"%s\" invalid host number, line ignored", | 2092 "getaddrinfo: \"%s\" invalid host address, line ignored", |
2005 num); 2006#ifdef DEBUG 2007 if (debug > 3) 2008 printf( | 2093 num); 2094#ifdef DEBUG 2095 if (debug > 3) 2096 printf( |
2009 "getnetnum: \"%s\" invalid host number, line ignored\n", 2010 num); | 2097 "getaddrinfo: \"%s\" invalid host address%s.\n", 2098 num, (complain) 2099 ? ", line ignored" 2100 : ""); |
2011#endif 2012 return 0; 2013 } 2014 | 2101#endif 2102 return 0; 2103 } 2104 |
2015 /* 2016 * make up socket address. Clear it out for neatness. 2017 */ 2018 memset((void *)addr, 0, sizeof(struct sockaddr_in)); 2019 addr->sin_family = AF_INET; 2020 addr->sin_port = htons(NTP_PORT); 2021 addr->sin_addr.s_addr = htonl(netnum); | 2105 memcpy(addr, ptr->ai_addr, ptr->ai_addrlen); |
2022#ifdef DEBUG 2023 if (debug > 1) | 2106#ifdef DEBUG 2107 if (debug > 1) |
2024 printf("getnetnum given %s, got %s (%lx)\n", 2025 num, ntoa(addr), (u_long)netnum); | 2108 printf("getnetnum given %s, got %s \n", 2109 num, stoa(addr)); |
2026#endif | 2110#endif |
2111 freeaddrinfo(ptr); |
|
2027 return 1; 2028} 2029 2030 | 2112 return 1; 2113} 2114 2115 |
2031#if !defined(VMS) | 2116#if !defined(VMS) && !defined(SYS_WINNT) |
2032/* 2033 * catchchild - receive the resolver's exit status 2034 */ 2035static RETSIGTYPE 2036catchchild( 2037 int sig 2038 ) 2039{ --- 27 unchanged lines hidden (view full) --- 2067{ 2068#ifndef SYS_VXWORKS 2069 if (res_fp == NULL) { 2070#ifndef SYS_WINNT 2071 (void) strcpy(res_file, RES_TEMPFILE); 2072#else 2073 /* no /tmp directory under NT */ 2074 { | 2117/* 2118 * catchchild - receive the resolver's exit status 2119 */ 2120static RETSIGTYPE 2121catchchild( 2122 int sig 2123 ) 2124{ --- 27 unchanged lines hidden (view full) --- 2152{ 2153#ifndef SYS_VXWORKS 2154 if (res_fp == NULL) { 2155#ifndef SYS_WINNT 2156 (void) strcpy(res_file, RES_TEMPFILE); 2157#else 2158 /* no /tmp directory under NT */ 2159 { |
2075 DWORD len; 2076 if(!(len = GetTempPath((DWORD)MAX_PATH, (LPTSTR)res_file))) { | 2160 if(!(GetTempPath((DWORD)MAX_PATH, (LPTSTR)res_file))) { |
2077 msyslog(LOG_ERR, "cannot get pathname for temporary directory: %m"); 2078 return; 2079 } 2080 (void) strcat(res_file, "ntpdXXXXXX"); 2081 } 2082#endif /* SYS_WINNT */ 2083#ifdef HAVE_MKSTEMP 2084 { --- 121 unchanged lines hidden (view full) --- 2206 * 2207 * Thanks to wgstuken@informatik.uni-erlangen.de to notice 2208 * that it is the ntp-resolver child running into trouble. 2209 * 2210 * THUS: 2211 */ 2212 2213 closelog(); | 2161 msyslog(LOG_ERR, "cannot get pathname for temporary directory: %m"); 2162 return; 2163 } 2164 (void) strcat(res_file, "ntpdXXXXXX"); 2165 } 2166#endif /* SYS_WINNT */ 2167#ifdef HAVE_MKSTEMP 2168 { --- 121 unchanged lines hidden (view full) --- 2290 * 2291 * Thanks to wgstuken@informatik.uni-erlangen.de to notice 2292 * that it is the ntp-resolver child running into trouble. 2293 * 2294 * THUS: 2295 */ 2296 2297 closelog(); |
2214 kill_asyncio(); | 2298 kill_asyncio(0); |
2215 2216 (void) signal_no_reset(SIGCHLD, SIG_DFL); 2217 2218#ifdef DEBUG 2219 if (0) 2220 debug = 2; 2221#endif 2222 --- 38 unchanged lines hidden (view full) --- 2261#else /* SYS_WINNT */ 2262 { 2263 /* NT's equivalent of fork() is _spawn(), but the start point 2264 * of the new process is an executable filename rather than 2265 * a function name as desired here. 2266 */ 2267 DWORD dwThreadId; 2268 fflush(stdout); | 2299 2300 (void) signal_no_reset(SIGCHLD, SIG_DFL); 2301 2302#ifdef DEBUG 2303 if (0) 2304 debug = 2; 2305#endif 2306 --- 38 unchanged lines hidden (view full) --- 2345#else /* SYS_WINNT */ 2346 { 2347 /* NT's equivalent of fork() is _spawn(), but the start point 2348 * of the new process is an executable filename rather than 2349 * a function name as desired here. 2350 */ 2351 DWORD dwThreadId; 2352 fflush(stdout); |
2269 if (!(ResolverThreadHandle = CreateThread( 2270 NULL, /* no security attributes */ 2271 0, /* use default stack size */ | 2353 ResolverThreadHandle = CreateThread( 2354 NULL, /* no security attributes */ 2355 0, /* use default stack size */ |
2272 (LPTHREAD_START_ROUTINE) ntp_intres, /* thread function */ | 2356 (LPTHREAD_START_ROUTINE) ntp_intres, /* thread function */ |
2273 NULL, /* argument to thread function */ 2274 0, /* use default creation flags */ 2275 &dwThreadId))) { /* returns the thread identifier */ | 2357 NULL, /* argument to thread function */ 2358 0, /* use default creation flags */ 2359 &dwThreadId); /* returns the thread identifier */ 2360 if (ResolverThreadHandle == NULL) { |
2276 msyslog(LOG_ERR, "CreateThread() failed, can't start ntp_intres"); 2277 abort_resolve(); 2278 } 2279 } 2280#endif /* SYS_WINNT */ 2281#else /* VMS VX_WORKS */ 2282 msyslog(LOG_ERR, 2283 "Name resolution not implemented for VMS - use numeric addresses"); 2284 abort_resolve(); 2285#endif /* VMS VX_WORKS */ 2286} | 2361 msyslog(LOG_ERR, "CreateThread() failed, can't start ntp_intres"); 2362 abort_resolve(); 2363 } 2364 } 2365#endif /* SYS_WINNT */ 2366#else /* VMS VX_WORKS */ 2367 msyslog(LOG_ERR, 2368 "Name resolution not implemented for VMS - use numeric addresses"); 2369 abort_resolve(); 2370#endif /* VMS VX_WORKS */ 2371} |