56
54
static void ctl_puthex P((const char *, u_long));
57
55
static void ctl_putint P((const char *, long));
58
56
static void ctl_putts P((const char *, l_fp *));
59
static void ctl_putadr P((const char *, u_int32));
57
static void ctl_putadr P((const char *, u_int32, struct sockaddr_storage*));
60
58
static void ctl_putid P((const char *, char *));
61
59
static void ctl_putarray P((const char *, double *, int));
62
60
static void ctl_putsys P((int));
108
106
{ CS_OFFSET, RO, "offset" }, /* 11 */
109
107
{ CS_DRIFT, RO, "frequency" }, /* 12 */
110
108
{ CS_JITTER, RO, "jitter" }, /* 13 */
111
{ CS_CLOCK, RO, "clock" }, /* 14 */
112
{ CS_PROCESSOR, RO, "processor" }, /* 15 */
113
{ CS_SYSTEM, RO, "system" }, /* 16 */
114
{ CS_VERSION, RO, "version" }, /* 17 */
115
{ CS_STABIL, RO, "stability" }, /* 18 */
116
{ CS_VARLIST, RO, "sys_var_list" }, /* 19 */
118
{ CS_FLAGS, RO, "flags" }, /* 20 */
119
{ CS_HOST, RO, "hostname" }, /* 21 */
120
{ CS_PUBLIC, RO, "publickey" }, /* 22 */
121
{ CS_CERTIF, RO, "certificate" }, /* 23 */
122
{ CS_DHPARAMS, RO, "params" }, /* 24 */
109
{ CS_ERROR, RO, "error" }, /* 14 */
110
{ CS_CLOCK, RO, "clock" }, /* 15 */
111
{ CS_PROCESSOR, RO, "processor" }, /* 16 */
112
{ CS_SYSTEM, RO, "system" }, /* 17 */
113
{ CS_VERSION, RO, "version" }, /* 18 */
114
{ CS_STABIL, RO, "stability" }, /* 19 */
115
{ CS_VARLIST, RO, "sys_var_list" }, /* 20 */
117
{ CS_FLAGS, RO, "flags" }, /* 21 */
118
{ CS_HOST, RO, "hostname" }, /* 22 */
119
{ CS_PUBLIC, RO, "hostkey" }, /* 23 */
120
{ CS_CERTIF, RO, "cert" }, /* 24 */
123
121
{ CS_REVTIME, RO, "refresh" }, /* 25 */
124
122
{ CS_LEAPTAB, RO, "leapseconds" }, /* 26 */
125
{ CS_TAI, RO, "tai"}, /* 27 */
127
{ 0, EOV, "" } /* 28 */
123
{ CS_TAI, RO, "tai" }, /* 27 */
124
{ CS_DIGEST, RO, "signature" }, /* 28 */
126
{ 0, EOV, "" } /* 29 */
130
129
static struct ctl_var *ext_sys_var = (struct ctl_var *)0;
205
206
{ CP_FILTERROR, RO, "filtdisp=" }, /* 34 */
206
207
{ CP_FLASH, RO, "flash" }, /* 35 */
207
208
{ CP_TTL, RO, "ttl" }, /* 36 */
208
{ CP_TTLMAX, RO, "ttlmax" }, /* 37 */
209
{ CP_RANK, RO, "rank" }, /* 37 */
209
210
{ CP_VARLIST, RO, "peer_var_list" }, /* 38 */
211
{ CP_FLAGS, RO, "flags" }, /* 38 */
212
{ CP_HOST, RO, "hostname" }, /* 39 */
213
{ CP_PUBLIC, RO, "publickey" }, /* 40 */
214
{ CP_CERTIF, RO, "certificate" }, /* 41 */
215
{ CP_SESKEY, RO, "pcookie" }, /* 42 */
216
{ CP_SASKEY, RO, "hcookie" }, /* 43 */
217
{ CP_INITSEQ, RO, "initsequence" }, /* 44 */
218
{ CP_INITKEY, RO, "initkey" }, /* 45 */
219
{ CP_INITTSP, RO, "timestamp" }, /* 46 */
221
{ 0, EOV, "" } /* 47 */
212
{ CP_FLAGS, RO, "flags" }, /* 39 */
213
{ CP_HOST, RO, "hostname" }, /* 40 */
214
{ CP_INITSEQ, RO, "initsequence" }, /* 41 */
215
{ CP_INITKEY, RO, "initkey" }, /* 42 */
216
{ CP_INITTSP, RO, "timestamp" }, /* 43 */
217
{ CP_DIGEST, RO, "signature" }, /* 44 */
218
{ CP_IDENT, RO, "identity" }, /* 45 */
220
{ 0, EOV, "" } /* 39/46 */
395
393
CTL_SST_TS_LF, /* REFCLK_FG (37) */
396
394
CTL_SST_TS_UHF, /* REFCLK_HOPF_SERIAL (38) */
397
395
CTL_SST_TS_UHF, /* REFCLK_HOPF_PCI (39) */
396
CTL_SST_TS_LF, /* REFCLK_JJY (40) */
397
CTL_SST_TS_UHF, /* REFCLK_TT560 (41) */
398
CTL_SST_TS_UHF, /* REFCLK_ZYFER (42) */
399
CTL_SST_TS_UHF, /* REFCLK_RIPENCC (43) */
400
CTL_SST_TS_UHF, /* REFCLK_NEOCLOCK4X (44) */
1334
ctl_puthex(sys_var[CS_FLAGS].text,
1347
ctl_puthex(sys_var[CS_FLAGS].text, crypto_flags);
1355
dp = EVP_get_digestbynid(crypto_flags >> 16);
1356
strcpy(str, OBJ_nid2ln(EVP_MD_pkey_type(dp)));
1357
ctl_putstr(sys_var[CS_DIGEST].text, str,
1339
ctl_putstr(sys_var[CS_HOST].text, sys_hostname,
1340
strlen(sys_hostname));
1341
if (host.fstamp != 0)
1363
if (sys_hostname != NULL)
1364
ctl_putstr(sys_var[CS_HOST].text, sys_hostname,
1365
strlen(sys_hostname));
1369
for (cp = cinfo; cp != NULL; cp = cp->link) {
1370
sprintf(cbuf, "%s %s 0x%x %u", cp->subject,
1371
cp->issuer, cp->flags,
1372
ntohl(cp->cert.fstamp));
1373
ctl_putstr(sys_var[CS_CERTIF].text, cbuf,
1379
if (hostval.fstamp != 0)
1342
1380
ctl_putuint(sys_var[CS_PUBLIC].text,
1343
ntohl(host.fstamp));
1347
if (certif.fstamp != 0)
1348
ctl_putuint(sys_var[CS_CERTIF].text,
1349
ntohl(certif.fstamp));
1353
if (dhparam.fstamp != 0)
1354
ctl_putuint(sys_var[CS_DHPARAMS].text,
1355
ntohl(dhparam.fstamp));
1381
ntohl(hostval.fstamp));
1358
1384
case CS_REVTIME:
1359
if (host.tstamp != 0)
1385
if (hostval.tstamp != 0)
1360
1386
ctl_putuint(sys_var[CS_REVTIME].text,
1361
ntohl(host.tstamp));
1387
ntohl(hostval.tstamp));
1364
1390
case CS_LEAPTAB:
1402
1433
case CP_SRCADR:
1403
ctl_putadr(peer_var[CP_SRCADR].text,
1404
peer->srcadr.sin_addr.s_addr);
1434
ctl_putadr(peer_var[CP_SRCADR].text, 0,
1407
1438
case CP_SRCPORT:
1408
1439
ctl_putuint(peer_var[CP_SRCPORT].text,
1409
ntohs(peer->srcadr.sin_port));
1440
ntohs(((struct sockaddr_in*)&peer->srcadr)->sin_port));
1412
1443
case CP_DSTADR:
1413
ctl_putadr(peer_var[CP_DSTADR].text,
1414
peer->dstadr->sin.sin_addr.s_addr);
1444
ctl_putadr(peer_var[CP_DSTADR].text, 0,
1445
&(peer->dstadr->sin));
1417
1448
case CP_DSTPORT:
1418
1449
ctl_putuint(peer_var[CP_DSTPORT].text,
1419
1450
(u_long)(peer->dstadr ?
1420
ntohs(peer->dstadr->sin.sin_port) : 0));
1451
ntohs(((struct sockaddr_in*)&peer->dstadr->sin)->sin_port) : 0));
1459
if (peer->stratum > 1) {
1460
if (peer->flags & FLAG_REFCLOCK)
1461
ctl_putadr(peer_var[CP_REFID].text,
1462
peer->srcadr.sin_addr.s_addr);
1490
if (peer->flags & FLAG_REFCLOCK) {
1491
if (peer->stratum > 0 && peer->stratum <
1493
ctl_putadr(peer_var[CP_REFID].text,
1464
ctl_putadr(peer_var[CP_REFID].text,
1496
ctl_putid(peer_var[CP_REFID].text,
1497
(char *)&peer->refid);
1467
ctl_putid(peer_var[CP_REFID].text,
1468
(char *)&peer->refid);
1499
if (peer->stratum > 1 && peer->stratum <
1501
ctl_putadr(peer_var[CP_REFID].text,
1504
ctl_putid(peer_var[CP_REFID].text,
1505
(char *)&peer->refid);
1497
if (!(peer->cast_flags & MDF_ACAST))
1499
ctl_putint(peer_var[CP_TTL].text, peer->ttl);
1503
if (!(peer->cast_flags & (MDF_MCAST | MDF_ACAST)))
1505
ctl_putint(peer_var[CP_TTLMAX].text, peer->ttlmax);
1534
ctl_putint(peer_var[CP_TTL].text, sys_ttl[peer->ttl]);
1509
1538
ctl_putuint(peer_var[CP_VALID].text, peer->unreach);
1542
ctl_putuint(peer_var[CP_RANK].text, peer->rank);
1513
1546
ctl_putuint(peer_var[CP_TIMER].text,
1514
1547
peer->nextdate - current_time);
1602
1635
ctl_putdata(buf, (unsigned)(s - buf), 0);
1607
1640
if (peer->crypto)
1608
1641
ctl_puthex(peer_var[CP_FLAGS].text, peer->crypto);
1648
dp = EVP_get_digestbynid(peer->crypto >> 16);
1649
strcpy(str, OBJ_nid2ln(EVP_MD_pkey_type(dp)));
1650
ctl_putstr(peer_var[CP_DIGEST].text, str,
1612
if (peer->keystr != NULL)
1613
ctl_putstr(peer_var[CP_HOST].text, peer->keystr,
1614
strlen(peer->keystr));
1615
if (peer->pubkey.fstamp != 0)
1616
ctl_putuint(peer_var[CP_PUBLIC].text,
1617
peer->pubkey.fstamp);
1621
if (peer->certif.fstamp != 0)
1622
ctl_putuint(peer_var[CP_CERTIF].text,
1623
peer->certif.fstamp);
1627
if (peer->pcookie.key != 0)
1628
ctl_puthex(peer_var[CP_SESKEY].text,
1630
if (peer->hcookie != 0)
1631
ctl_puthex(peer_var[CP_SASKEY].text,
1656
if (peer->subject != NULL)
1657
ctl_putstr(peer_var[CP_HOST].text, peer->subject,
1658
strlen(peer->subject));
1662
if (peer->issuer != NULL)
1663
ctl_putstr(peer_var[CP_IDENT].text, peer->issuer,
1664
strlen(peer->issuer));
1635
1667
case CP_INITSEQ:
1636
if (peer->recauto.key == 0)
1668
if ((ap = (struct autokey *)peer->recval.ptr) == NULL)
1638
ctl_putint(peer_var[CP_INITSEQ].text,
1640
ctl_puthex(peer_var[CP_INITKEY].text,
1670
ctl_putint(peer_var[CP_INITSEQ].text, ap->seq);
1671
ctl_puthex(peer_var[CP_INITKEY].text, ap->key);
1642
1672
ctl_putuint(peer_var[CP_INITTSP].text,
1643
peer->recauto.tstamp);
1673
ntohl(peer->recval.tstamp));
1675
#endif /* OPENSSL */
2576
2606
static struct ctl_trap *
2578
struct sockaddr_in *raddr,
2608
struct sockaddr_storage *raddr,
2579
2609
struct interface *linter
2582
2612
register struct ctl_trap *tp;
2584
2614
for (tp = ctl_trap; tp < &ctl_trap[CTL_MAXTRAPS]; tp++) {
2585
if (tp->tr_flags & TRAP_INUSE && NSRCADR(raddr) ==
2586
NSRCADR(&tp->tr_addr) && NSRCPORT(raddr) ==
2587
NSRCPORT(&tp->tr_addr) && linter ==
2615
if ((tp->tr_flags & TRAP_INUSE)
2616
&& (NSRCPORT(raddr) == NSRCPORT(&tp->tr_addr))
2617
&& SOCKCMP(raddr, &tp->tr_addr)
2618
&& (linter == tp->tr_localaddr) )
2591
2621
return (struct ctl_trap *)NULL;