|
|
|
|
@ -112,6 +112,52 @@ static void cert_free(void *p) {
|
|
|
|
|
X509_free(cert->x509);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void buf_dump_free(char *buf, size_t len) {
|
|
|
|
|
char *p, *f;
|
|
|
|
|
int llen;
|
|
|
|
|
|
|
|
|
|
p = buf;
|
|
|
|
|
while (len) {
|
|
|
|
|
f = memchr(p, '\n', len);
|
|
|
|
|
if (f)
|
|
|
|
|
llen = f - p;
|
|
|
|
|
else
|
|
|
|
|
llen = len;
|
|
|
|
|
|
|
|
|
|
ilog(LOG_DEBUG, "--- %.*s", llen, p);
|
|
|
|
|
|
|
|
|
|
len -= llen + 1;
|
|
|
|
|
p = f + 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
free(buf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void dump_cert(struct dtls_cert *cert) {
|
|
|
|
|
FILE *fp;
|
|
|
|
|
char *buf;
|
|
|
|
|
size_t len;
|
|
|
|
|
|
|
|
|
|
if (get_log_level() < LOG_DEBUG)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
/* cert */
|
|
|
|
|
fp = open_memstream(&buf, &len);
|
|
|
|
|
PEM_write_X509(fp, cert->x509);
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
|
|
|
|
ilog(LOG_DEBUG, "Dump of DTLS certificate:");
|
|
|
|
|
buf_dump_free(buf, len);
|
|
|
|
|
|
|
|
|
|
/* key */
|
|
|
|
|
fp = open_memstream(&buf, &len);
|
|
|
|
|
PEM_write_PrivateKey(fp, cert->pkey, NULL, NULL, 0, 0, NULL);
|
|
|
|
|
fclose(fp);
|
|
|
|
|
|
|
|
|
|
ilog(LOG_DEBUG, "Dump of DTLS private key:");
|
|
|
|
|
buf_dump_free(buf, len);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int cert_init() {
|
|
|
|
|
X509 *x509 = NULL;
|
|
|
|
|
EVP_PKEY *pkey = NULL;
|
|
|
|
|
@ -202,6 +248,8 @@ static int cert_init() {
|
|
|
|
|
new_cert->pkey = pkey;
|
|
|
|
|
new_cert->expires = time(NULL) + CERT_EXPIRY_TIME;
|
|
|
|
|
|
|
|
|
|
dump_cert(new_cert);
|
|
|
|
|
|
|
|
|
|
/* swap out certs */
|
|
|
|
|
|
|
|
|
|
rwlock_lock_w(&__dtls_cert_lock);
|
|
|
|
|
@ -567,6 +615,8 @@ found:
|
|
|
|
|
crypto_init(&ps->sfd->crypto, &client);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
crypto_dump_keys(&ps->crypto, &ps->sfd->crypto);
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
|