* ntpd/ntp_request.c (dns_a): Don't call crypto_public for now...
* ntpd/ntp_proto.c (receive): Follow the TEST wiggles
(peer_xmit): TAI support
* ntpd/ntp_crypto.c: TAI support
* ntpd/ntp_control.c: CS_VERSION and CS_TAI support
* include/ntp_crypto.h (CRYPTO_FLAG_TAI): Added.
* include/ntp_control.h (CS_VERSION): Added.
* include/ntp.h (TEST4,TEST5,TEST8,TEST9): Wiggle.
From: Dave Mills
* ntpd/Makefile.am (ntpd_SOURCES): Lose refclock_ulink331.c
because the new refclock_ulink.c handles it.
Makefile.in:
Rerun automake
ChangeLog, configure, configure.in:
* configure.in: 4.0.99j3
bk: 395c4f92WjHL5C9yYTMGABiO-tOANg
+2000-06-30 Harlan Stenn <stenn@whimsy.udel.edu>
+
+ * configure.in: 4.0.99j3
+
+ * ntpd/ntp_request.c (dns_a): Don't call crypto_public for now...
+ * ntpd/ntp_proto.c (receive): Follow the TEST wiggles
+ (peer_xmit): TAI support
+ * ntpd/ntp_crypto.c: TAI support
+ * ntpd/ntp_control.c: CS_VERSION and CS_TAI support
+ * include/ntp_crypto.h (CRYPTO_FLAG_TAI): Added.
+ * include/ntp_control.h (CS_VERSION): Added.
+ * include/ntp.h (TEST4,TEST5,TEST8,TEST9): Wiggle.
+ From: Dave Mills
+
+ * ntpd/Makefile.am (ntpd_SOURCES): Lose refclock_ulink331.c
+ because the new refclock_ulink.c handles it.
+
2000-06-28 Harlan Stenn <stenn@whimsy.udel.edu>
* ntpd/ntp_config.c (getconfig): Sanity check the right variable
PACKAGE=ntp
-VERSION=4.0.99j2
+VERSION=4.0.99j3
if test "`CDPATH=: && cd $srcdir && pwd`" != "`pwd`" &&
test -f $srcdir/config.status; then
AC_DEFINE_UNQUOTED(STR_SYSTEM, "$target")
AM_CONFIG_HEADER(config.h)
AC_ARG_PROGRAM
-AM_INIT_AUTOMAKE(ntp, 4.0.99j2)
+AM_INIT_AUTOMAKE(ntp, 4.0.99j3)
AC_PREREQ(2.14)
ac_cv_var_oncore_ok=no
#define TEST1 0x0001 /* duplicate packet received */
#define TEST2 0x0002 /* bogus packet received */
#define TEST3 0x0004 /* protocol unsynchronized */
-#define TEST4 0x0008 /* peer delay/dispersion bounds check */
-#define TEST5 0x0010 /* peer authentication failed */
+#define TEST4 0x0008 /* access denied */
+#define TEST5 0x0010 /* authentication failed */
#define TEST6 0x0020 /* peer clock unsynchronized */
#define TEST7 0x0040 /* peer stratum out of bounds */
-#define TEST8 0x0080 /* root delay/dispersion bounds check */
-#define TEST9 0x0100 /* access denied */
+#define TEST8 0x0080 /* root delay/dispersion bounds check */
+#define TEST9 0x0100 /* peer delay/dispersion bounds check */
#define TEST10 0x0200 /* autokey not authentic */
#define TEST11 0x0400 /* autokey not confirmed */
#define CS_CLOCK 14
#define CS_PROCESSOR 15
#define CS_SYSTEM 16
-#define CS_STABIL 17
-#define CS_VARLIST 18
+#define CS_VERSION 17
+#define CS_STABIL 18
+#define CS_VARLIST 19
#ifdef PUBKEY
-#define CS_PRIVATE 19
-#define CS_PUBLIC 20
-#define CS_DHPARAMS 21
-#define CS_HOSTNAM 22
-#define CS_REVTIME 23
-#define CS_MAXCODE CS_REVTIME
+#define CS_PRIVATE 20
+#define CS_PUBLIC 21
+#define CS_DHPARAMS 22
+#define CS_HOSTNAM 23
+#define CS_REVTIME 24
+#define CS_TAI 25
+#define CS_MAXCODE CS_TAI
#else
#define CS_MAXCODE CS_VARLIST
#endif /* PUBKEY */
* Cryptoflags
*/
#define CRYPTO_FLAG_ENAB 0x01 /* enable public key */
+#define CRYPTO_FLAG_TAI 0x02 /* request TAI leapseconds */
#ifdef PUBKEY
-
-#define MAX_DH_LEN (DH_PRIME_LEN(1024)) /* max agreed key length */
-
/*
* Configuration codes
*/
extern u_int public_key_fstamp;
extern char * dh_params_file;
extern u_int dh_params_fstamp;
+extern u_int sys_tai;
#endif /* PUBKEY */
#endif /* AUTOKEY */
refclock_oncore.c refclock_palisade.c refclock_palisade.h \
refclock_parse.c refclock_pcf.c refclock_pst.c refclock_ptbacts.c \
refclock_shm.c refclock_tpro.c refclock_trak.c refclock_true.c \
- refclock_ulink.c refclock_ulink331.c refclock_usno.c refclock_wwv.c \
- refclock_wwvb.c
+ refclock_ulink.c refclock_usno.c refclock_wwv.c refclock_wwvb.c
$(PROGRAMS): $(LDADD)
{ CS_CLOCK, RO, "clock" }, /* 14 */
{ CS_PROCESSOR, RO, "processor" }, /* 15 */
{ CS_SYSTEM, RO, "system" }, /* 16 */
- { CS_STABIL, RO, "stability" }, /* 17 */
- { CS_VARLIST, RO, "sys_var_list" }, /* 18 */
+ { CS_VERSION, RO, "version" }, /* 17 */
+ { CS_STABIL, RO, "stability" }, /* 18 */
+ { CS_VARLIST, RO, "sys_var_list" }, /* 19 */
#ifdef PUBKEY
- { CS_PRIVATE, RO, "privatekey" }, /* 19 */
- { CS_PUBLIC, RO, "publickey" }, /* 20 */
- { CS_DHPARAMS, RO, "dhparams" }, /* 21 */
- { CS_HOSTNAM, RO, "hostname" }, /* 22 */
- { CS_REVTIME, RO, "revoketime"}, /* 23 */
+ { CS_PRIVATE, RO, "privatekey" }, /* 120 */
+ { CS_PUBLIC, RO, "publickey" }, /* 21 */
+ { CS_DHPARAMS, RO, "dhparams" }, /* 22 */
+ { CS_HOSTNAM, RO, "hostname" }, /* 23 */
+ { CS_REVTIME, RO, "revoketime"}, /* 24 */
+ { CS_TAI, RO, "tai"}, /* 25 */
#endif /* PUBKEY */
{ 0, EOV, "" }
};
* more-or-less)
*/
static u_char def_sys_var[] = {
+ CS_VERSION,
CS_PROCESSOR,
CS_SYSTEM,
CS_LEAP,
CS_DHPARAMS,
CS_HOSTNAM,
CS_REVTIME,
+ CS_TAI,
#endif /* PUBKEY */
0
};
#endif /* HAVE_UNAME */
break;
+ case CS_VERSION:
+ ctl_putstr(sys_var[CS_VERSION].text, Version,
+ strlen(Version));
+ break;
+
case CS_STABIL:
ctl_putdbl(sys_var[CS_STABIL].text, clock_stability *
1e6);
strcpy(str1, dh_params_file);
if (dh_params_fstamp != 0)
sprintf(str1, "%s.%u", str1, dh_params_fstamp);
- ctl_putstr(sys_var[CS_DHPARAMS].text, str1, strlen(str1));
+ ctl_putstr(sys_var[CS_DHPARAMS].text, str1,
+ strlen(str1));
break;
case CS_HOSTNAM:
break;
case CS_REVTIME:
- ctl_putts(sys_var[CS_REVTIME].text, &sys_revoketime);
+ if (sys_revoketime.l_ui == 0)
+ break;
+ ctl_putuint(sys_var[CS_REVTIME].text,
+ sys_revoketime.l_ui);
+ break;
+
+ case CS_TAI:
+ if (sys_tai == 0)
+ break;
+ ctl_putuint(sys_var[CS_TAI].text, sys_tai);
break;
#endif /* PUBKEY */
}
* CRYPTO_DHPAR 5 DH parameters
* CRYPTO_DH 6 DH public value
* CRYPTO_NAME 7 host name/public key
- * CRYPTO_TAI 8 TAI offset
+ * CRYPTO_TAI 8 TAI leapsecond table
*
* Note: requests carry the association ID of the receiver; responses
* carry the association ID of the sender.
/*
* Cryptodefines
*/
-#define MAX_KEYLEN 1024 /* maximum key length */
+#define TAI_1972 10 /* initial TAI offset */
+#define MAX_LEAP 100 /* max UTC leapseconds */
+#define MAX_LINLEN 1024 /* max line */
+#define MAX_KEYLEN 1024 /* max key */
+#define MAX_ENCLEN (ENCODED_CONTENT_LEN(1024)) /* max enc key */
/*
* Autokey protocol status codes
static struct value host; /* host name/public key */
static struct value dhparam; /* Diffie_Hellman parameters */
static struct value dhpub; /* Diffie_Hellman public value */
+static struct value tai_leap; /* TAI leapseconds table */
static u_char *dh_private; /* DH private value */
static u_int dh_keyLen; /* DH private value length */
char *dh_params_file = NULL; /* DH parameters file */
u_int dh_params_fstamp; /* DH parameters filestamp */
char *keysdir = "/usr/local/etc/"; /* crypto keys directory */
+u_int tai_leap_fstamp; /* TAI leapseconds filestamp */
+char *tai_leap_file = NULL; /* TAI leapseconds file */
+u_int sys_tai; /* current UTC offset from TAI */
/*
* Cryptotypes
*/
static void crypto_rsa P((char *, u_int *, u_char *, u_int));
static void crypto_dh P((char *, u_int *));
+static void crypto_tai P((char *, u_int *));
#endif /* PUBKEY */
R_SignUpdate(&ctx, (u_char *)ap, 12);
rval = R_SignFinal(&ctx, ap->sig, &len, &private_key);
if (rval != RV_OK)
- msyslog(LOG_ERR, "make_keylist: signature fails %x",
+ msyslog(LOG_ERR, "keylist signature fails %x",
rval);
else
ap->siglen = htonl(len);
u_int temp;
#ifdef PUBKEY
R_SIGNATURE_CTX ctx; /* signature context */
- u_char dh_key[MAX_DH_LEN]; /* Diffie-Hellman agreed key */
+ u_char dh_key[MAX_KEYLEN]; /* Diffie-Hellman agreed key */
R_RSA_PUBLIC_KEY *kp; /* temporary public key pointer */
u_int32 *pp; /* packet pointer */
u_int rsalen = sizeof(R_RSA_PUBLIC_KEY) - sizeof(u_int) + 4;
rval, (char *)&pkt[i + 5 + rsalen /
4], tstamp, ntohl(vp->fstamp));
#endif
+ break;
+ /*
+ * Install TAI leapsecond table.
+ */
+ case CRYPTO_TAI | CRYPTO_RESP:
+ vp = (struct value *)&pkt[i + 2];
+ temp = ntohl(vp->vallen);
+ kp = (R_RSA_PUBLIC_KEY *)peer->pubkey;
+ j = i + 5 + temp / 4;
+ if (tstamp <= tai_leap.tstamp) {
+ rval = RV_TSP;
+ } else if (kp == NULL) {
+ rval = RV_PUB;
+ } else if (ntohl(pkt[j]) != kp->bits / 8) {
+ rval = RV_SIG;
+ } else {
+ R_VerifyInit(&ctx, DA_MD5);
+ R_VerifyUpdate(&ctx, (u_char *)vp,
+ temp + 12);
+ rval = R_VerifyFinal(&ctx,
+ (u_char *)&pkt[j + 1],
+ ntohl(pkt[j]), kp);
+ }
+#ifdef DEBUG
+ if (debug)
+ printf(
+ "crypto_recv: verify %x TAI %u ts %u fs %u\n",
+ rval, temp, tstamp,
+ ntohl(vp->fstamp));
+#endif
+ if (rval != RV_OK)
+ break;
+
+ /*
+ * Initialize TAI leapsecond table and extension
+ * field in network byte order.
+ */
+ tai_leap.fstamp = htonl(vp->fstamp);
+ tai_leap.vallen = vp->vallen;
+ if (tai_leap.val == NULL)
+ free(tai_leap.val);
+ tai_leap.val = emalloc(temp);
+ if (tai_leap.sig == NULL)
+ tai_leap.sig =
+ emalloc(private_key.bits / 8);
+ pp = (u_int32 *)tai_leap.val;
+ memcpy(pp, &vp->val, temp);
+ sys_tai = temp / 4 + TAI_1972;
+ crypto_agree();
+
+for (i = 0; i < temp / 4; i++)
+ printf("xxx %u %u\n", i, ntohl(*pp++));
+
break;
#endif /* PUBKEY */
rval = R_SignFinal(&ctx, (u_char *)&cp->sig, &temp,
&private_key);
if (rval != RV_OK) {
- msyslog(LOG_ERR,
- "crypto_xmit: cookie signature fails %x",
+ msyslog(LOG_ERR, "cookie signature fails %x",
rval);
break;
}
vp->vallen = 0;
len += 12;
temp = ntohl(dhparam.vallen);
- if (dhparam.val == NULL)
+ if (temp == 0)
break;
vp->vallen = htonl(temp);
memcpy(&vp->val, dhparam.val, temp);
vp->vallen = 0;
len += 12;
temp = ntohl(dhpub.vallen);
- if (dhpub.val == NULL)
+ if (temp == 0)
break;
vp->vallen = htonl(temp);
memcpy(&vp->val, dhpub.val, temp);
vp->vallen = 0;
len += 12;
temp = ntohl(host.vallen);
- if (host.val == NULL)
+ if (temp == 0)
break;
vp->vallen = htonl(temp);
memcpy(&vp->val, host.val, temp);
memcpy(&xpkt[j], host.sig, temp);
len += temp + 4;
break;
+ /*
+ * Send TAI leapsecond table, timestamp and signature.
+ */
+ case CRYPTO_TAI | CRYPTO_RESP:
+ vp = (struct value *)&xpkt[i + 2];
+ vp->tstamp = tai_leap.tstamp;
+ vp->fstamp = tai_leap.fstamp;
+ vp->vallen = 0;
+ len += 12;
+ temp = ntohl(tai_leap.vallen);
+ if (temp == 0)
+ break;
+ vp->vallen = htonl(temp);
+ memcpy(&vp->val, tai_leap.val, temp);
+ len += temp;
+ j = i + 5 + temp / 4;
+ temp = public_key.bits / 8;
+ xpkt[j++] = htonl(temp);
+ memcpy(&xpkt[j], tai_leap.sig, temp);
+ len += temp + 4;
+ break;
#endif /* PUBKEY */
/*
(u_char *)&private_key, sizeof(R_RSA_PRIVATE_KEY));
if (private_key.bits == 0) {
msyslog(LOG_ERR,
- "crypto_setup: required RSA private key missing or corrupted");
+ "crypto_setup: required RSA private key file missing or corrupted");
exit;
}
(u_char *)&public_key, sizeof(R_RSA_PUBLIC_KEY));
if (public_key.bits == 0) {
msyslog(LOG_ERR,
- "crypto_setup: required RSA public key missing or corrupted");
+ "crypto_setup: required RSA public key file missing or corrupted");
exit;
}
if (strstr(public_key_file, sys_hostname) == NULL) {
/*
* Load optional Diffie-Hellman key agreement parameters from
* file, default "ntpkey_dh". If the file is missing or
- * defective, the parameters can later be retrieved from a
+ * defective, the values can later be retrieved from a
* server.
*/
if (dh_params_file == NULL)
dh_params_file = "ntpkey_dh";
crypto_dh(dh_params_file, &dh_params_fstamp);
- temp = dh_params.primeLen;
- if (temp == 0)
- return;
- dhparam.fstamp = htonl(dh_params_fstamp);
- dhpub.fstamp = htonl(dh_params_fstamp);
- dhpub.vallen = htonl(temp);
- dhpub.val = emalloc(temp);
- dhpub.sig = emalloc(private_key.bits / 8);
+
+ /*
+ * Load optional TAI leapseconds file, default "leap-second". If
+ * the file is missing or defective, the values can later be
+ * retrieved from a
+ * server.
+ */
+ if (tai_leap_file == NULL)
+ tai_leap_file = "leap-seconds";
+ crypto_tai(tai_leap_file, &tai_leap_fstamp);
}
R_SignInit(&ctx, DA_MD5);
R_SignUpdate(&ctx, (u_char *)&host, 12);
R_SignUpdate(&ctx, host.val, ntohl(host.vallen));
- rval = R_SignFinal(&ctx, host.sig, &temp, &private_key);
- if (rval != RV_OK) {
- msyslog(LOG_ERR,
- "crypto_agree: host signature fails %x", rval);
+ rval = R_SignFinal(&ctx, host.sig, &len, &private_key);
+ if (rval != RV_OK || len != private_key.bits / 8) {
+ msyslog(LOG_ERR, "host signature fails %x", rval);
exit(1);
}
- host.siglen = ntohl(temp);
+ host.siglen = ntohl(len);
/*
* Sign Diffie-Hellman parameters and timestamps.
*/
- if (dh_params.primeLen == 0) {
- msyslog(LOG_ERR,
- "crypto_agree: unavailable DH parameters");
- return;
- }
- dhparam.tstamp = htonl(sys_revoketime.l_ui);
- R_SignInit(&ctx, DA_MD5);
- R_SignUpdate(&ctx, (u_char *)&dhparam, 12);
- R_SignUpdate(&ctx, dhparam.val, ntohl(dhparam.vallen));
- rval = R_SignFinal(&ctx, dhparam.sig, &temp, &private_key);
- if (rval != RV_OK) {
- msyslog(LOG_ERR,
- "crypto_agree: DH parameters signature fails %x",
- rval);
- exit(1);
+ if (dhparam.vallen > 0) {
+ dhparam.tstamp = htonl(sys_revoketime.l_ui);
+ R_SignInit(&ctx, DA_MD5);
+ R_SignUpdate(&ctx, (u_char *)&dhparam, 12);
+ R_SignUpdate(&ctx, dhparam.val, ntohl(dhparam.vallen));
+ rval = R_SignFinal(&ctx, dhparam.sig, &len,
+ &private_key);
+ if (rval != RV_OK || len != private_key.bits / 8) {
+ msyslog(LOG_ERR,
+ "DH parameters signature fails %x", rval);
+ exit(1);
+ }
+ dhparam.siglen = ntohl(len);
}
- dhparam.siglen = ntohl(temp);
/*
* Compute Diffie-Hellman public value.
rval = R_SetupDHAgreement(dhpub.val, dh_private, dh_keyLen,
&dh_params, &randomstr);
if (rval != RV_OK) {
- msyslog(LOG_ERR, "crypto_agree: invalid DH parameters");
+ msyslog(LOG_ERR, "invalid DH parameters");
exit(1);
}
/*
* Sign Diffie-Hellman public value and timestamps.
*/
- dhpub.tstamp = htonl(sys_revoketime.l_ui);
- R_SignInit(&ctx, DA_MD5);
- R_SignUpdate(&ctx, (u_char *)&dhpub, 12);
- R_SignUpdate(&ctx, dhpub.val, ntohl(dhpub.vallen));
- rval = R_SignFinal(&ctx, dhpub.sig, &temp, &private_key);
- if (rval != RV_OK) {
- msyslog(LOG_ERR,
- "crypto_agree: DH public value signature fails %x",
- rval);
- exit(1);
+ if (dhpub.vallen > 0) {
+ dhpub.tstamp = htonl(sys_revoketime.l_ui);
+ R_SignInit(&ctx, DA_MD5);
+ R_SignUpdate(&ctx, (u_char *)&dhpub, 12);
+ R_SignUpdate(&ctx, dhpub.val, ntohl(dhpub.vallen));
+ rval = R_SignFinal(&ctx, dhpub.sig, &len,
+ &private_key);
+ if (rval != RV_OK || len != private_key.bits / 8) {
+ msyslog(LOG_ERR,
+ "DH public value signature fails %x", rval);
+ exit(1);
+ }
+ dhpub.siglen = ntohl(len);
+ }
+
+ /*
+ * Sign TAI leapsecond table and timestamps.
+ */
+ if (tai_leap.vallen > 0) {
+ tai_leap.tstamp = htonl(sys_revoketime.l_ui);
+ R_SignInit(&ctx, DA_MD5);
+ R_SignUpdate(&ctx, (u_char *)&tai_leap, 12);
+ R_SignUpdate(&ctx, tai_leap.val,
+ ntohl(tai_leap.vallen));
+ rval = R_SignFinal(&ctx, tai_leap.sig, &len,
+ &private_key);
+ if (rval != RV_OK || len != private_key.bits / 8) {
+ msyslog(LOG_ERR,
+ "TAI leapseconds signature fails %x", rval);
+ exit(1);
+ }
+ tai_leap.siglen = ntohl(len);
}
- dhpub.siglen = ntohl(temp);
#ifdef DEBUG
if (debug)
printf(
"cypto_agree: host %s ts %u pubval %d\n",
- sys_hostname, ntohl(host.tstamp),
+ sys_hostname, sys_revoketime.l_ui,
ntohl(dhpub.vallen));
#endif
}
)
{
FILE *str; /* file handle */
- u_char buf[MAX_KEYLEN]; /* file line buffer */
- u_char encoded_key[MAX_KEYLEN]; /* encoded key buffer */
+ u_char buf[MAX_LINLEN]; /* file line buffer */
+ u_char encoded_key[MAX_ENCLEN]; /* encoded key buffer */
char filename[MAXFILENAME]; /* name of parameter file */
char linkname[MAXFILENAME]; /* file link (for filestamp) */
u_int bits, len;
snprintf(filename, MAXFILENAME, "%s%s", keysdir, cp);
str = fopen(filename, "r");
if (str == NULL) {
- msyslog(LOG_ERR, "RSA key file %s not found", filename);
+ msyslog(LOG_ERR, "RSA file %s not found", filename);
return;
}
/*
* Ignore initial comments and empty lines.
*/
- while ((rptr = fgets(buf, MAX_KEYLEN - 1, str)) != NULL) {
+ while ((rptr = fgets(buf, MAX_LINLEN - 1, str)) != NULL) {
len = strlen(buf);
if (len < 1)
continue;
rval = RV_OK;
if (rval != RV_OK) {
fclose(str);
- msyslog(LOG_ERR,
- "crypto_dh: RSA key file %s error %x",
- cp, rval);
+ msyslog(LOG_ERR, "RSA file %s error %x", cp, rval);
return;
}
fclose(str);
#ifdef DEBUG
if (debug)
printf(
- "crypto_rsa: RSA key file %s link %d fs %u modulus %d\n",
+ "crypto_rsa: RSA file %s link %d fs %u modulus %d\n",
cp, rval, *fstamp, bits);
#endif
return;
)
{
FILE *str; /* file handle */
- u_char buf[MAX_KEYLEN]; /* file line buffer */
- u_char encoded_key[MAX_KEYLEN]; /* encoded key buffer */
+ u_char buf[MAX_LINLEN]; /* file line buffer */
+ u_char encoded_key[MAX_ENCLEN]; /* encoded key buffer */
u_char prime[MAX_KEYLEN]; /* decoded prime */
u_char generator[MAX_KEYLEN]; /* decode generator */
u_int primelen; /* prime length (octets) */
* character of the file name is not '/', prepend the keys
* directory string.
*/
- *fstamp = 0;
if (*cp == '/')
strcpy(filename, cp);
else
str = fopen(filename, "r");
if (str == NULL) {
msyslog(LOG_ERR,
- "crypto_dh: DH parameter file %s not found",
- filename);
+ "crypto_dh: DH file %s not found", filename);
return;
}
/*
* Ignore initial comments and empty lines.
*/
- while ((rptr = fgets(buf, MAX_KEYLEN - 1, str)) != NULL) {
+ while ((rptr = fgets(buf, MAX_LINLEN - 1, str)) != NULL) {
if (strlen(buf) < 1)
continue;
if (*buf == '#' || *buf == '\r' || *buf == '\0')
rval = RV_DAT;
else if (sscanf(buf, "%u %s", &primelen, encoded_key) != 2)
rval = RV_DAT;
- else if (primelen > MAX_DH_LEN)
+ else if (primelen > MAX_KEYLEN)
rval = RV_KEY;
else if (R_DecodePEMBlock(prime, &len, encoded_key,
strlen(encoded_key)))
if (rval != RV_OK) {
fclose(str);
msyslog(LOG_ERR,
- "crypto_dh: DH parameter file %s prime error %x",
- cp, rval);
+ "crypto_dh: DH file %s prime error %x", cp, rval);
return;
}
*/
if (fscanf(str, "%u %s", &generatorlen, encoded_key) != 2)
rval = RV_DAT;
- else if (generatorlen > MAX_DH_LEN)
+ else if (generatorlen > MAX_KEYLEN)
rval = RV_KEY;
else if (R_DecodePEMBlock(generator, &len, encoded_key,
strlen(encoded_key)))
rval = RV_OK;
if (rval != RV_OK) {
msyslog(LOG_ERR,
- "crypto_dh: DH parameter file %s generator error %x",
- cp, rval);
+ "crypto_dh: DH file %s generator error %x", cp,
+ rval);
return;
}
fclose(str);
* network byte order. Note the private key length is set
* arbitrarily at half the prime length.
*/
- dhparam.fstamp = htonl(dh_params_fstamp);
len = 4 + primelen + 4 + generatorlen;
dhparam.vallen = htonl(len);
dhparam.val = emalloc(len);
/*
* Initialize Diffie-Hellman public value extension field.
*/
- dhpub.fstamp = htonl(dh_params_fstamp);
dhpub.vallen = htonl(dh_params.primeLen);
dhpub.val = emalloc(dh_params.primeLen);
dhpub.sig = emalloc(private_key.bits / 8);
} else {
rptr = strrchr(filename, '.');
}
- if (rptr != NULL)
+ if (rptr != NULL) {
sscanf(++rptr, "%u", fstamp);
+ dhparam.fstamp = htonl(*fstamp);
+ dhpub.fstamp = htonl(*fstamp);
+ }
#ifdef DEBUG
if (debug)
printf(
- "crypto_dh: DH parameter file link %d %s fs %u prime %u gen %u\n",
- rval, dh_params_file, dh_params_fstamp,
+ "crypto_dh: DH file %s link %d fs %u prime %u gen %u\n",
+ dh_params_file, rval, dh_params_fstamp,
dh_params.primeLen, dh_params.generatorLen);
#endif
}
+/*
+ * crypto_tai - read TAI offset table and check for errors.
+ */
+static void
+crypto_tai(
+ char *cp, /* file name */
+ u_int *fstamp /* filestamp */
+ )
+{
+ FILE *str; /* file handle */
+ u_char buf[MAX_LINLEN]; /* file line buffer */
+ u_int leapsec[MAX_LEAP]; /* NTP time at leaps */
+ u_int offset; /* offset at leap (s) */
+ char filename[MAXFILENAME]; /* name of parameter file */
+ char linkname[MAXFILENAME]; /* file link (for filestamp) */
+ u_int32 *pp;
+ u_int len;
+ char *rptr;
+ int rval, i;
+
+ /*
+ * Open the key file and discard comment lines. If the first
+ * character of the file name is not '/', prepend the keys
+ * directory string.
+ */
+ if (*cp == '/')
+ strcpy(filename, cp);
+ else
+ snprintf(filename, MAXFILENAME, "%s%s", keysdir, cp);
+ str = fopen(filename, "r");
+ if (str == NULL) {
+ msyslog(LOG_ERR, "TAI file %s not found", filename);
+ return;
+ }
+
+ /*
+ * We are rather paranoid here, since an intruder might cause a
+ * coredump by infiltrating a naughty key. The line must contain
+ * a single integer followed by a PEM encoded, null-terminated
+ * string.
+ */
+ i = 0;
+ rval = RV_OK;
+ while (i < MAX_LEAP) {
+ rptr = fgets(buf, MAX_LINLEN - 1, str);
+ if (rptr == NULL)
+ break;
+ if (strlen(buf) < 1)
+ continue;
+ if (*buf == '#')
+ continue;
+ if (sscanf(buf, "%u %u", &leapsec[i], &offset) != 2)
+ continue;
+ if (i != offset - TAI_1972) {
+ rval = RV_DAT;
+ break;
+ }
+ i++;
+ }
+ fclose(str);
+ if (rval != RV_OK || i == 0) {
+ msyslog(LOG_ERR, "TAI file %s error %d", cp, rval);
+ return;
+ }
+ len = --i * sizeof(u_int32);
+ tai_leap.vallen = htonl(len);
+ tai_leap.val = emalloc(len);
+ tai_leap.sig = emalloc(private_key.bits / 8);
+ pp = (u_int32 *)tai_leap.val;
+ sys_tai = len / 4 + TAI_1972;
+ for (; i >= 0; i--) {
+ *pp++ = htonl(leapsec[i]);
+ }
+ tai_leap.sig = emalloc(private_key.bits / 8);
+
+ /*
+ * Extract filestamp if present.
+ */
+ rval = readlink(filename, linkname, MAXFILENAME - 1);
+ if (rval > 0) {
+ linkname[rval] = '\0';
+ rptr = strrchr(linkname, '.');
+ } else {
+ rptr = strrchr(filename, '.');
+ }
+ if (rptr != NULL) {
+ sscanf(++rptr, "%u", fstamp);
+ tai_leap.fstamp = htonl(*fstamp);
+ }
+#ifdef DEBUG
+ if (debug)
+ printf(
+ "crypto_tai: TAI file %s link %d fs %u offset %u\n",
+ tai_leap_file, rval, tai_leap_fstamp,
+ ntohl(tai_leap.vallen) / 4 + TAI_1972);
+#endif
+}
+
+#if 0
/*
* crypto_public - read and install the public key from the public key
* file. The name of the file is in the form "ntpkey_host", where host
memcpy(peer->pubkey, (char *)&keybuf, keylen);
return (1);
}
+#endif
/*
peer->flags &= ~FLAG_AUTHENTIC;
}
if (peer->hmode == MODE_BROADCAST &&
- (restrict_mask & RES_DONTTRUST)) /* test 9 */
- peer->flash |= TEST9; /* access denied */
+ (restrict_mask & RES_DONTTRUST)) /* test 4 */
+ peer->flash |= TEST4; /* access denied */
if (peer->flags & FLAG_AUTHENABLE) {
if (!(peer->flags & FLAG_AUTHENTIC)) /* test 5 */
peer->flash |= TEST5; /* auth failed */
pmode = PKT_MODE(pkt->li_vn_mode);
/*
- * Test for old or duplicate packets (tests 1 through 3).
+ * Test for old, duplicate or unsynchronized packets (tests 1
+ * through 3).
*/
if (L_ISHIS(&peer->org, &p_xmt)) /* count old packets */
peer->oldpkt++;
peer->org = p_xmt;
/*
- * Test for valid packet header (tests 6 through 8)
+ * Test for valid peer data (tests 6 through 8)
*/
ci = p_xmt;
L_SUB(&ci, &p_reftime);
peer->flash |= TEST6; /* peer clock unsynchronized */
if (!(peer->flags & FLAG_CONFIG) && sys_peer != 0) { /* test 7 */
if (PKT_TO_STRATUM(pkt->stratum) > sys_stratum) {
- peer->flash |= TEST7; /* peer stratum too high */
+ peer->flash |= TEST7; /* peer stratum too high */
sys_badstratum++;
}
}
if (fabs(p_del) >= MAXDISPERSE /* test 8 */
|| p_disp >= MAXDISPERSE)
- peer->flash |= TEST8; /* delay/dispersion too high */
+ peer->flash |= TEST8; /* root data */
/*
- * If the packet header is invalid, abandon ship. Otherwise
+ * If the packet is denied access, declared not authentic or has
+ * invalid timestamps, stuff it in the compactor. Otherwise,
* capture the header data.
*/
- if (peer->flash & ~(u_int)(TEST1 | TEST2 | TEST3 | TEST4)) {
+ if (peer->flash & ~(u_int)(TEST1 | TEST2 | TEST3 | TEST4 |
+ TEST5 | TEST10 | TEST11)) {
#ifdef DEBUG
if (debug)
printf("packet: bad header %03x\n",
* The header is valid. Capture the remaining header values and
* mark as reachable.
*/
-/*
record_raw_stats(&peer->srcadr, &peer->dstadr->sin,
&p_org, &p_rec, &p_xmt, &peer->rec);
-*/
peer->leap = PKT_LEAP(pkt->li_vn_mode);
peer->pmode = pmode; /* unspec */
peer->stratum = PKT_TO_STRATUM(pkt->stratum);
LFPTOD(&t23, p_del);
}
LFPTOD(&ci, p_offset);
- if (fabs(p_del) >= MAXDISPERSE || p_disp >= MAXDISPERSE) /* test 4 */
- peer->flash |= TEST4; /* delay/dispersion too big */
+ if (fabs(p_del) >= MAXDISPERSE || p_disp >= MAXDISPERSE) /* test 9 */
+ peer->flash |= TEST9; /* delay/dispersion too big */
/*
- * If the packet data are invalid (tests 1 through 4), abandon
+ * If the packet data are invalid (tests 6 through 9), abandon
* ship. Otherwise, forward to the clock filter.
*/
if (peer->flash) {
sendlen, (peer->cmmd >> 16) |
CRYPTO_RESP, peer->pcookie.key,
peer->associd);
- if (crypto_flags && peer->pubkey == NULL)
+ if (crypto_flags && peer->pubkey == NULL)
sendlen += crypto_xmit((u_int32 *)&xpkt,
sendlen, CRYPTO_NAME,
peer->pcookie.key, peer->assoc);
+ else if (crypto_flags & CRYPTO_FLAG_TAI &&
+ sys_tai == 0)
+ sendlen += crypto_xmit((u_int32 *)&xpkt,
+ sendlen, CRYPTO_TAI,
+ peer->pcookie.key, peer->assoc);
else if (crypto_flags && dh_params.prime ==
NULL)
sendlen += crypto_xmit((u_int32 *)&xpkt,
req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
return;
} else {
+#if 0
#ifdef PUBKEY
crypto_public(peer, dp->hostname);
#endif /* PUBKEY */
+#endif
}
dp++;
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4a from Makefile.am
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
-#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
-
-
SHELL = @SHELL@
srcdir = @srcdir@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+
+@SET_MAKE@
build_alias = @build_alias@
build_triplet = @build@
host_alias = @host_alias@
VERSION = @VERSION@
install_sh = @install_sh@
+#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
+
+
AUTOMAKE_OPTIONS = ../util/ansi2knr
bin_PROGRAMS = ntpdate ntptimeset
ntptimeset_SOURCES = ntptimeset.c ntptime_config.c
noinst_HEADERS = ntpdate.h
#EXTRA_DIST = ntpdate.mak
ETAGS_ARGS = Makefile.am
+subdir = ntpdate
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
ntpdate_LDADD = $(LDADD)
ntpdate_DEPENDENCIES = version.o ../libntp/libntp.a
ntpdate_LDFLAGS =
-ntptimeset_OBJECTS = ntptimeset$U.o ntptime_config$U.o
+am_ntptimeset_OBJECTS = ntptimeset$U.o ntptime_config$U.o
+ntptimeset_OBJECTS = $(am_ntptimeset_OBJECTS)
ntptimeset_LDADD = $(LDADD)
ntptimeset_DEPENDENCIES = version.o ../libntp/libntp.a
ntptimeset_LDFLAGS =
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = ntpdate.c $(ntptimeset_SOURCES)
HEADERS = $(noinst_HEADERS)
-DIST_COMMON = README Makefile.am Makefile.in
+DIST_COMMON = README $(noinst_HEADERS) Makefile.am Makefile.in
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-TAR = tar
GZIP_ENV = --best
-DEP_FILES = .deps/ntpdate.P .deps/ntptime_config.P .deps/ntptimeset.P
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+DEP_FILES = @AMDEP@ $(DEPDIR)/ntpdate$U.Po \
+$(DEPDIR)/ntptime_config$U.Po $(DEPDIR)/ntptimeset$U.Po
SOURCES = ntpdate.c $(ntptimeset_SOURCES)
-OBJECTS = ntpdate$U.o $(ntptimeset_OBJECTS)
+OBJECTS = ntpdate$U.o $(am_ntptimeset_OBJECTS)
all: all-redirect
.SUFFIXES:
-.SUFFIXES: .S .c .o .s
+.SUFFIXES: .c .o
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu ntpdate/Makefile
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ f="`echo $$p|sed -e 's/$(EXEEXT)$$//' -e '$(transform)' -e 's/$$/$(EXEEXT)/'`"; \
+ echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/$$f"; \
+ $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/$$f; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
- list='$(bin_PROGRAMS)'; for p in $$list; do \
- rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f="`echo $$p|sed -e 's/$(EXEEXT)$$//' -e '$(transform)' -e 's/$$/$(EXEEXT)/'`"; \
+ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+ rm -f $(DESTDIR)$(bindir)/$$f; \
done
-.s.o:
- $(COMPILE) -c $<
-
-.S.o:
- $(COMPILE) -c $<
-
mostlyclean-compile:
-rm -f *.o core *.core
tags: TAGS
-ID: $(HEADERS) $(SOURCES) $(LISP)
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $$unique $(LISP)
+ mkid -fID $$unique $(LISP)
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+ || etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
mostlyclean-tags:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-subdir = ntpdate
-
distdir: $(DISTFILES)
- here=`cd $(top_builddir) && pwd`; \
- top_distdir=`cd $(top_distdir) && pwd`; \
- distdir=`cd $(distdir) && pwd`; \
- cd $(top_srcdir) \
- && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ntpdate/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
- cp -pr $$/$$file $(distdir)/$$file; \
+ cp -pR $$d/$$file $(distdir); \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
fi; \
done
-DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-
--include $(DEP_FILES)
+@AMDEP@include $(DEPDIR)/ntpdate$U.Po
+@AMDEP@include $(DEPDIR)/ntptime_config$U.Po
+@AMDEP@include $(DEPDIR)/ntptimeset$U.Po
mostlyclean-depend:
clean-depend:
distclean-depend:
- -rm -rf .deps
+ -rm -rf $(DEPDIR)
maintainer-clean-depend:
-%.o: %.c
- @echo '$(COMPILE) -c $<'; \
- $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
- @-cp .deps/$(*F).pp .deps/$(*F).P; \
- tr ' ' '\012' < .deps/$(*F).pp \
- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
- >> .deps/$(*F).P; \
- rm .deps/$(*F).pp
-
-%.lo: %.c
- @echo '$(LTCOMPILE) -c $<'; \
- $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
- @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
- < .deps/$(*F).pp > .deps/$(*F).P; \
- tr ' ' '\012' < .deps/$(*F).pp \
- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
- >> .deps/$(*F).P; \
- rm -f .deps/$(*F).pp
+@AMDEP@CCDEPMODE = @CCDEPMODE@
+
+.c.o:
+@AMDEP@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
+
info-am:
info: info-am
dvi-am:
all-am: Makefile $(PROGRAMS) $(HEADERS)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(bindir)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
+ -rm -f Makefile.in
mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \
mostlyclean-kr mostlyclean-tags mostlyclean-depend \
mostlyclean-generic
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
check-am installcheck-am installcheck install-exec-am install-exec \
install-data-am install-data install-am install uninstall-am uninstall \
-all-redirect all-am all installdirs mostlyclean-generic \
+all-redirect all-am all install-strip installdirs mostlyclean-generic \
distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4a from Makefile.am
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
-#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
-
-
SHELL = @SHELL@
srcdir = @srcdir@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+
+@SET_MAKE@
build_alias = @build_alias@
build_triplet = @build@
host_alias = @host_alias@
VERSION = @VERSION@
install_sh = @install_sh@
+#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
+
+
AUTOMAKE_OPTIONS = ../util/ansi2knr
bin_PROGRAMS = ntpdc
INCLUDES = -I$(top_srcdir)/include
ETAGS_ARGS = Makefile.am
ntpdc_SOURCES = ntpdc.c ntpdc_ops.c
+subdir = ntpdc
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
CPPFLAGS = @CPPFLAGS@
LIBS = @LIBS@
ANSI2KNR = ../util/ansi2knr
-ntpdc_OBJECTS = ntpdc$U.o ntpdc_ops$U.o
+am_ntpdc_OBJECTS = ntpdc$U.o ntpdc_ops$U.o
+ntpdc_OBJECTS = $(am_ntpdc_OBJECTS)
ntpdc_LDADD = $(LDADD)
ntpdc_DEPENDENCIES = version.o ../libntp/libntp.a
ntpdc_LDFLAGS =
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = $(ntpdc_SOURCES)
HEADERS = $(noinst_HEADERS)
-DIST_COMMON = README Makefile.am Makefile.in
+DIST_COMMON = README $(noinst_HEADERS) Makefile.am Makefile.in
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-TAR = tar
GZIP_ENV = --best
-DEP_FILES = .deps/ntpdc.P .deps/ntpdc_ops.P
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+DEP_FILES = @AMDEP@ $(DEPDIR)/ntpdc$U.Po $(DEPDIR)/ntpdc_ops$U.Po
SOURCES = $(ntpdc_SOURCES)
-OBJECTS = $(ntpdc_OBJECTS)
+OBJECTS = $(am_ntpdc_OBJECTS)
all: all-redirect
.SUFFIXES:
-.SUFFIXES: .S .c .o .s
+.SUFFIXES: .c .o
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu ntpdc/Makefile
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ f="`echo $$p|sed -e 's/$(EXEEXT)$$//' -e '$(transform)' -e 's/$$/$(EXEEXT)/'`"; \
+ echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/$$f"; \
+ $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/$$f; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
- list='$(bin_PROGRAMS)'; for p in $$list; do \
- rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f="`echo $$p|sed -e 's/$(EXEEXT)$$//' -e '$(transform)' -e 's/$$/$(EXEEXT)/'`"; \
+ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+ rm -f $(DESTDIR)$(bindir)/$$f; \
done
-.s.o:
- $(COMPILE) -c $<
-
-.S.o:
- $(COMPILE) -c $<
-
mostlyclean-compile:
-rm -f *.o core *.core
tags: TAGS
-ID: $(HEADERS) $(SOURCES) $(LISP)
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $$unique $(LISP)
+ mkid -fID $$unique $(LISP)
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+ || etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
mostlyclean-tags:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-subdir = ntpdc
-
distdir: $(DISTFILES)
- here=`cd $(top_builddir) && pwd`; \
- top_distdir=`cd $(top_distdir) && pwd`; \
- distdir=`cd $(distdir) && pwd`; \
- cd $(top_srcdir) \
- && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ntpdc/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
- cp -pr $$/$$file $(distdir)/$$file; \
+ cp -pR $$d/$$file $(distdir); \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
fi; \
done
-DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-
--include $(DEP_FILES)
+@AMDEP@include $(DEPDIR)/ntpdc$U.Po
+@AMDEP@include $(DEPDIR)/ntpdc_ops$U.Po
mostlyclean-depend:
clean-depend:
distclean-depend:
- -rm -rf .deps
+ -rm -rf $(DEPDIR)
maintainer-clean-depend:
-%.o: %.c
- @echo '$(COMPILE) -c $<'; \
- $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
- @-cp .deps/$(*F).pp .deps/$(*F).P; \
- tr ' ' '\012' < .deps/$(*F).pp \
- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
- >> .deps/$(*F).P; \
- rm .deps/$(*F).pp
-
-%.lo: %.c
- @echo '$(LTCOMPILE) -c $<'; \
- $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
- @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
- < .deps/$(*F).pp > .deps/$(*F).P; \
- tr ' ' '\012' < .deps/$(*F).pp \
- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
- >> .deps/$(*F).P; \
- rm -f .deps/$(*F).pp
+@AMDEP@CCDEPMODE = @CCDEPMODE@
+
+.c.o:
+@AMDEP@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
+
info-am:
info: info-am
dvi-am:
all-am: Makefile $(PROGRAMS) $(HEADERS)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(bindir)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
+ -rm -f Makefile.in
mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \
mostlyclean-kr mostlyclean-tags mostlyclean-depend \
mostlyclean-generic
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
check-am installcheck-am installcheck install-exec-am install-exec \
install-data-am install-data install-am install uninstall-am uninstall \
-all-redirect all-am all installdirs mostlyclean-generic \
+all-redirect all-am all install-strip installdirs mostlyclean-generic \
distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4a from Makefile.am
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
-#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
-
-
SHELL = @SHELL@
srcdir = @srcdir@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
+
+@SET_MAKE@
build_alias = @build_alias@
build_triplet = @build@
host_alias = @host_alias@
VERSION = @VERSION@
install_sh = @install_sh@
+#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
+
+
AUTOMAKE_OPTIONS = ../util/ansi2knr
bin_PROGRAMS = ntpq
INCLUDES = -I$(top_srcdir)/include
ETAGS_ARGS = Makefile.am
ntpq_SOURCES = ntpq.c ntpq_ops.c
+subdir = ntpq
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
CPPFLAGS = @CPPFLAGS@
LIBS = @LIBS@
ANSI2KNR = ../util/ansi2knr
-ntpq_OBJECTS = ntpq$U.o ntpq_ops$U.o
+am_ntpq_OBJECTS = ntpq$U.o ntpq_ops$U.o
+ntpq_OBJECTS = $(am_ntpq_OBJECTS)
ntpq_LDADD = $(LDADD)
ntpq_DEPENDENCIES = version.o ../libntp/libntp.a
ntpq_LDFLAGS =
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = $(ntpq_SOURCES)
HEADERS = $(noinst_HEADERS)
-DIST_COMMON = README Makefile.am Makefile.in
+DIST_COMMON = README $(noinst_HEADERS) Makefile.am Makefile.in
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-TAR = tar
GZIP_ENV = --best
-DEP_FILES = .deps/ntpq.P .deps/ntpq_ops.P
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+DEP_FILES = @AMDEP@ $(DEPDIR)/ntpq$U.Po $(DEPDIR)/ntpq_ops$U.Po
SOURCES = $(ntpq_SOURCES)
-OBJECTS = $(ntpq_OBJECTS)
+OBJECTS = $(am_ntpq_OBJECTS)
all: all-redirect
.SUFFIXES:
-.SUFFIXES: .S .c .o .s
+.SUFFIXES: .c .o
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu ntpq/Makefile
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ f="`echo $$p|sed -e 's/$(EXEEXT)$$//' -e '$(transform)' -e 's/$$/$(EXEEXT)/'`"; \
+ echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/$$f"; \
+ $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/$$f; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
- list='$(bin_PROGRAMS)'; for p in $$list; do \
- rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f="`echo $$p|sed -e 's/$(EXEEXT)$$//' -e '$(transform)' -e 's/$$/$(EXEEXT)/'`"; \
+ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+ rm -f $(DESTDIR)$(bindir)/$$f; \
done
-.s.o:
- $(COMPILE) -c $<
-
-.S.o:
- $(COMPILE) -c $<
-
mostlyclean-compile:
-rm -f *.o core *.core
tags: TAGS
-ID: $(HEADERS) $(SOURCES) $(LISP)
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $$unique $(LISP)
+ mkid -fID $$unique $(LISP)
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
+ list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+ || etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
mostlyclean-tags:
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-subdir = ntpq
-
distdir: $(DISTFILES)
- here=`cd $(top_builddir) && pwd`; \
- top_distdir=`cd $(top_distdir) && pwd`; \
- distdir=`cd $(distdir) && pwd`; \
- cd $(top_srcdir) \
- && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu ntpq/Makefile
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
- cp -pr $$/$$file $(distdir)/$$file; \
+ cp -pR $$d/$$file $(distdir); \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
fi; \
done
-DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-
--include $(DEP_FILES)
+@AMDEP@include $(DEPDIR)/ntpq$U.Po
+@AMDEP@include $(DEPDIR)/ntpq_ops$U.Po
mostlyclean-depend:
clean-depend:
distclean-depend:
- -rm -rf .deps
+ -rm -rf $(DEPDIR)
maintainer-clean-depend:
-%.o: %.c
- @echo '$(COMPILE) -c $<'; \
- $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
- @-cp .deps/$(*F).pp .deps/$(*F).P; \
- tr ' ' '\012' < .deps/$(*F).pp \
- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
- >> .deps/$(*F).P; \
- rm .deps/$(*F).pp
-
-%.lo: %.c
- @echo '$(LTCOMPILE) -c $<'; \
- $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
- @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
- < .deps/$(*F).pp > .deps/$(*F).P; \
- tr ' ' '\012' < .deps/$(*F).pp \
- | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
- >> .deps/$(*F).P; \
- rm -f .deps/$(*F).pp
+@AMDEP@CCDEPMODE = @CCDEPMODE@
+
+.c.o:
+@AMDEP@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
+
info-am:
info: info-am
dvi-am:
all-am: Makefile $(PROGRAMS) $(HEADERS)
all-redirect: all-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
installdirs:
$(mkinstalldirs) $(DESTDIR)$(bindir)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
+ -rm -f Makefile.in
mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \
mostlyclean-kr mostlyclean-tags mostlyclean-depend \
mostlyclean-generic
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
check-am installcheck-am installcheck install-exec-am install-exec \
install-data-am install-data install-am install uninstall-am uninstall \
-all-redirect all-am all installdirs mostlyclean-generic \
+all-redirect all-am all install-strip installdirs mostlyclean-generic \
distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean