removed %Q, %Y, %W, %U printf handlers

This commit is contained in:
Martin Willi 2007-04-12 09:44:26 +00:00
parent db97fd8298
commit a1b2d82db0
9 changed files with 135 additions and 228 deletions

View File

@ -1216,7 +1216,7 @@ static void list_auth_certificates(private_stroke_interface_t *this, u_int flag
fprintf(out, "\n");
first = FALSE;
}
fprintf(out, "%#Q\n", cert, utc);
cert->list(cert, out, utc);
}
}
iterator->destroy(iterator);
@ -1243,7 +1243,7 @@ static void stroke_list(private_stroke_interface_t *this,
}
while (iterator->iterate(iterator, (void**)&cert))
{
fprintf(out, "%#Q", cert, msg->list.utc);
cert->list(cert, out, msg->list.utc);
if (charon->credentials->has_rsa_private_key(
charon->credentials, cert->get_public_key(cert)))
{
@ -1271,7 +1271,7 @@ static void stroke_list(private_stroke_interface_t *this,
}
while (iterator->iterate(iterator, (void**)&ca_info))
{
fprintf(out, "%#W", ca_info, msg->list.utc);
ca_info->list(ca_info, out, msg->list.utc);
}
iterator->destroy(iterator);
}

View File

@ -213,11 +213,9 @@ static void add_crl(private_ca_info_t *this, crl_t *crl)
*/
static void list_crl(private_ca_info_t *this, FILE *out, bool utc)
{
pthread_mutex_lock(&(this->mutex));
fprintf(out, "%#U\n", this->crl, utc);
pthread_mutex_unlock(&(this->mutex));
pthread_mutex_lock(&this->mutex);
this->crl->list(this->crl, out, utc);
pthread_mutex_unlock(&this->mutex);
}
/**
@ -225,26 +223,42 @@ static void list_crl(private_ca_info_t *this, FILE *out, bool utc)
*/
static void list_certinfos(private_ca_info_t *this, FILE *out, bool utc)
{
pthread_mutex_lock(&(this->mutex));
iterator_t *iterator;
certinfo_t *certinfo;
chunk_t authkey;
pthread_mutex_lock(&this->mutex);
authkey = this->cacert->get_subjectKeyID(this->cacert);
fprintf(out," authname: '%D'\n", this->cacert->get_subject(this->cacert));
{
chunk_t authkey = this->cacert->get_subjectKeyID(this->cacert);
fprintf(out," authkey: %#B\n", &authkey);
fprintf(out," authkey: %#B\n", &authkey);
}
iterator = this->certinfos->create_iterator(this->certinfos, TRUE);
while (iterator->iterate(iterator, (void**)&certinfo))
{
iterator_t *iterator = this->certinfos->create_iterator(this->certinfos, TRUE);
certinfo_t *certinfo;
while (iterator->iterate(iterator, (void**)&certinfo))
time_t nextUpdate, thisUpdate, now;
chunk_t serial;
now = time(NULL);
nextUpdate = certinfo->get_nextUpdate(certinfo);
thisUpdate = certinfo->get_thisUpdate(certinfo);
serial = certinfo->get_serialNumber(certinfo);
fprintf(out, "%#T, until %#T, ", &thisUpdate, utc, &nextUpdate, utc);
if (now > nextUpdate)
{
fprintf(out, "%#Y\n", certinfo, utc);
fprintf(out, "expired (%V ago)\n", &now, &nextUpdate);
}
iterator->destroy(iterator);
else
{
fprintf(out, "ok (expires in %V)\n", &now, &nextUpdate);
}
fprintf(out, " serial: %#B, %N", &serial,
cert_status_names, certinfo->get_status(certinfo));
}
iterator->destroy(iterator);
pthread_mutex_unlock(&(this->mutex));
pthread_mutex_unlock(&this->mutex);
}
/**
@ -656,85 +670,51 @@ static void destroy(private_ca_info_t *this)
}
/**
* output handler in printf()
* list the info of this CA
*/
static int print(FILE *stream, const struct printf_info *info,
const void *const *args)
static void list(private_ca_info_t* this, FILE* out, bool utc)
{
private_ca_info_t *this = *((private_ca_info_t**)(args[0]));
bool utc = TRUE;
int written = 0;
const x509_t *cacert;
chunk_t chunk;
identification_t *uri;
iterator_t *iterator;
bool first;
if (info->alt)
{
utc = *((bool*)args[1]);
}
if (this == NULL)
{
return fprintf(stream, "(null)");
}
pthread_mutex_lock(&(this->mutex));
written += fprintf(stream, "%#T", &this->installed, utc);
fprintf(out, "%#T", &this->installed, utc);
if (this->name)
{
written += fprintf(stream, ", \"%s\"\n", this->name);
fprintf(out, ", \"%s\"\n", this->name);
}
else
{
written += fprintf(stream, "\n");
fprintf(out, "\n");
}
cacert = this->cacert;
written += fprintf(stream, " authname: '%D'\n", cacert->get_subject(cacert));
fprintf(out, " authname: '%D'\n", this->cacert->get_subject(this->cacert));
chunk = this->cacert->get_subjectKeyID(this->cacert);
fprintf(out, " authkey: %#B\n", &chunk);
chunk = this->cacert->get_keyid(this->cacert);
fprintf(out, " keyid: %#B\n", &chunk);
first = TRUE;
iterator = this->crluris->create_iterator(this->crluris, TRUE);
while (iterator->iterate(iterator, (void**)&uri))
{
chunk_t authkey = cacert->get_subjectKeyID(cacert);
written += fprintf(stream, " authkey: %#B\n", &authkey);
fprintf(out, " %s '%D'\n", first ? "crluris:":" ", uri);
first = FALSE;
}
iterator->destroy(iterator);
first = TRUE;
iterator = this->ocspuris->create_iterator(this->ocspuris, TRUE);
while (iterator->iterate(iterator, (void**)&uri))
{
chunk_t keyid = cacert->get_keyid(cacert);
written += fprintf(stream, " keyid: %#B\n", &keyid);
}
{
identification_t *crluri;
iterator_t *iterator = this->crluris->create_iterator(this->crluris, TRUE);
bool first = TRUE;
while (iterator->iterate(iterator, (void**)&crluri))
{
written += fprintf(stream, " %s '%D'\n",
first? "crluris:":" ", crluri);
first = FALSE;
}
iterator->destroy(iterator);
}
{
identification_t *ocspuri;
iterator_t *iterator = this->ocspuris->create_iterator(this->ocspuris, TRUE);
bool first = TRUE;
while (iterator->iterate(iterator, (void**)&ocspuri))
{
written += fprintf(stream, " %s '%D'\n",
first? "ocspuris:":" ", ocspuri);
first = FALSE;
}
iterator->destroy(iterator);
fprintf(out, " %s '%D'\n", first ? "ocspuris:":" ", uri);
first = FALSE;
}
iterator->destroy(iterator);
pthread_mutex_unlock(&(this->mutex));
return written;
}
/**
* register printf() handlers
*/
static void __attribute__ ((constructor))print_register()
{
register_printf_function(PRINTF_CAINFO, print, arginfo_ptr_alt_ptr_int);
}
/*
@ -774,6 +754,7 @@ ca_info_t *ca_info_create(const char *name, x509_t *cacert)
this->public.add_crl = (void (*) (ca_info_t*,crl_t*))add_crl;
this->public.has_crl = (bool (*) (ca_info_t*))has_crl;
this->public.has_certinfos = (bool (*) (ca_info_t*))has_certinfos;
this->public.list = (void (*) (ca_info_t*,FILE*,bool))list;
this->public.list_crl = (void (*) (ca_info_t*,FILE*,bool))list_crl;
this->public.list_certinfos = (void (*) (ca_info_t*,FILE*,bool))list_certinfos;
this->public.add_crluri = (void (*) (ca_info_t*,chunk_t))add_crluri;

View File

@ -112,6 +112,16 @@ struct ca_info_t {
*/
bool (*has_certinfos) (ca_info_t *this);
/**
* @brief Print the CA info onto the console
*
* @param this ca info object
* @param out output stream
* @param utc TRUE - utc
FALSE - local time
*/
void (*list) (ca_info_t *this, FILE *out, bool utc);
/**
* @brief List the CRL onto the console
*

View File

@ -221,54 +221,6 @@ static void destroy(private_certinfo_t *this)
free(this);
}
/**
* output handler in printf()
*/
static int print(FILE *stream, const struct printf_info *info,
const void *const *args)
{
private_certinfo_t *this = *((private_certinfo_t**)(args[0]));
bool utc = TRUE;
int written = 0;
time_t now;
if (info->alt)
{
utc = *((bool*)args[1]);
}
if (this == NULL)
{
return fprintf(stream, "(null)");
}
now = time(NULL);
written += fprintf(stream, "%#T, until %#T, ",
&this->thisUpdate, utc,
&this->nextUpdate, utc);
if (now > this->nextUpdate)
{
written += fprintf(stream, "expired (%V ago)\n", &now, &this->nextUpdate);
}
else
{
written += fprintf(stream, "ok (expires in %V)\n", &now, &this->nextUpdate);
}
written += fprintf(stream, " serial: %#B, %N",
&this->serialNumber,
cert_status_names, this->status);
return written;
}
/**
* register printf() handlers
*/
static void __attribute__ ((constructor))print_register()
{
register_printf_function(PRINTF_CERTINFO, print, arginfo_ptr_alt_ptr_int);
}
/*
* Described in header.
*/

View File

@ -416,66 +416,43 @@ static void destroy(private_crl_t *this)
}
/**
* output handler in printf()
* Implementation of crl_t.list.
*/
static int print(FILE *stream, const struct printf_info *info,
const void *const *args)
static void list(private_crl_t *this, FILE* out, bool utc)
{
private_crl_t *this = *((private_crl_t**)(args[0]));
bool utc = TRUE;
int written = 0;
time_t now;
if (info->alt)
{
utc = *((bool*)args[1]);
}
if (this == NULL)
{
return fprintf(stream, "(null)");
}
now = time(NULL);
written += fprintf(stream, "%#T, revoked certs: %d\n", &this->installed, utc,
fprintf(out, "%#T, revoked certs: %d\n", &this->installed, utc,
this->revokedCertificates->get_count(this->revokedCertificates));
written += fprintf(stream, " issuer: '%D'\n", this->issuer);
written += fprintf(stream, " updates: this %#T\n", &this->thisUpdate, utc);
written += fprintf(stream, " next %#T ", &this->nextUpdate, utc);
fprintf(out, " issuer: '%D'\n", this->issuer);
fprintf(out, " updates: this %#T\n", &this->thisUpdate, utc);
fprintf(out, " next %#T ", &this->nextUpdate, utc);
if (this->nextUpdate == UNDEFINED_TIME)
{
written += fprintf(stream, "ok (expires never)");
fprintf(out, "ok (expires never)");
}
else if (now > this->nextUpdate)
{
written += fprintf(stream, "expired (%V ago)", &now, &this->nextUpdate);
fprintf(out, "expired (%V ago)", &now, &this->nextUpdate);
}
else if (now > this->nextUpdate - CRL_WARNING_INTERVAL * 60 * 60 * 24)
{
written += fprintf(stream, "ok (expires in %V)", &now, &this->nextUpdate);
fprintf(out, "ok (expires in %V)", &now, &this->nextUpdate);
}
else
{
written += fprintf(stream, "ok");
fprintf(out, "ok");
}
if (this->authKeyID.ptr)
{
written += fprintf(stream, "\n authkey: %#B", &this->authKeyID);
fprintf(out, "\n authkey: %#B", &this->authKeyID);
}
if (this->authKeySerialNumber.ptr)
{
written += fprintf(stream, "\n aserial: %#B", &this->authKeySerialNumber);
fprintf(out, "\n aserial: %#B", &this->authKeySerialNumber);
}
return written;
}
/**
* register printf() handlers
*/
static void __attribute__ ((constructor))print_register()
{
register_printf_function(PRINTF_CRL, print, arginfo_ptr_alt_ptr_int);
}
/*
@ -502,6 +479,7 @@ crl_t *crl_create_from_chunk(chunk_t chunk)
this->public.verify = (bool (*) (const crl_t*,const rsa_public_key_t*))verify;
this->public.get_status = (void (*) (const crl_t*,certinfo_t*))get_status;
this->public.write_to_file = (bool (*) (const crl_t*,const char*,mode_t,bool))write_to_file;
this->public.list = (void(*)(crl_t*, FILE* out, bool utc))list;
this->public.destroy = (void (*) (crl_t*))destroy;
if (!parse_x509crl(chunk, 0, this))

View File

@ -104,6 +104,15 @@ struct crl_t {
* @param certinfo certinfo is updated
*/
void (*get_status) (const crl_t *this, certinfo_t *certinfo);
/**
* @brief Log the info of this CRL to out.
*
* @param this calling object
* @param out stream to write to
* @param utc TRUE for UTC, FALSE for local time
*/
void (*list)(crl_t *this, FILE* out, bool utc);
/**
* @brief Write a der-encoded crl to a file

View File

@ -1121,39 +1121,23 @@ static bool verify(const private_x509_t *this, const rsa_public_key_t *signer)
{
return signer->verify_emsa_pkcs1_signature(signer, this->tbsCertificate, this->signature) == SUCCESS;
}
/**
* output handler in printf()
* Implementation of x509_t.list.
*/
static int print(FILE *stream, const struct printf_info *info,
const void *const *args)
static void list(private_x509_t *this, FILE *out, bool utc)
{
private_x509_t *this = *((private_x509_t**)(args[0]));
iterator_t *iterator;
bool utc = TRUE;
int written = 0;
if (info->alt)
{
utc = *((bool*)(args[1]));
}
if (this == NULL)
{
return fprintf(stream, "(null)");
}
/* determine the current time */
time_t now = time(NULL);
written += fprintf(stream, "%#T\n", &this->installed, utc);
fprintf(out, "%#T\n", &this->installed, utc);
if (this->subjectAltNames->get_count(this->subjectAltNames))
{
identification_t *subjectAltName;
bool first = TRUE;
written += fprintf(stream, " altNames: ");
fprintf(out, " altNames: ");
iterator = this->subjectAltNames->create_iterator(this->subjectAltNames, TRUE);
while (iterator->iterate(iterator, (void**)&subjectAltName))
{
@ -1163,71 +1147,71 @@ static int print(FILE *stream, const struct printf_info *info,
}
else
{
written += fprintf(stream, ", ");
fprintf(out, ", ");
}
written += fprintf(stream, "'%D'", subjectAltName);
fprintf(out, "'%D'", subjectAltName);
}
iterator->destroy(iterator);
written += fprintf(stream, "\n");
fprintf(out, "\n");
}
written += fprintf(stream, " subject: '%D'\n", this->subject);
written += fprintf(stream, " issuer: '%D'\n", this->issuer);
written += fprintf(stream, " serial: %#B\n", &this->serialNumber);
written += fprintf(stream, " validity: not before %#T, ", &this->notBefore, utc);
fprintf(out, " subject: '%D'\n", this->subject);
fprintf(out, " issuer: '%D'\n", this->issuer);
fprintf(out, " serial: %#B\n", &this->serialNumber);
fprintf(out, " validity: not before %#T, ", &this->notBefore, utc);
if (now < this->notBefore)
{
written += fprintf(stream, "not valid yet (valid in %V)\n", &now, &this->notBefore);
fprintf(out, "not valid yet (valid in %V)\n", &now, &this->notBefore);
}
else
{
written += fprintf(stream, "ok\n");
fprintf(out, "ok\n");
}
written += fprintf(stream, " not after %#T, ", &this->notAfter, utc);
fprintf(out, " not after %#T, ", &this->notAfter, utc);
if (now > this->notAfter)
{
written += fprintf(stream, "expired (%V ago)\n", &now, &this->notAfter);
fprintf(out, "expired (%V ago)\n", &now, &this->notAfter);
}
else
{
written += fprintf(stream, "ok");
fprintf(out, "ok");
if (now > this->notAfter - CERT_WARNING_INTERVAL * 60 * 60 * 24)
{
written += fprintf(stream, " (expires in %V)", &now, &this->notAfter);
fprintf(out, " (expires in %V)", &now, &this->notAfter);
}
written += fprintf(stream, " \n");
fprintf(out, " \n");
}
{
chunk_t keyid = this->public_key->get_keyid(this->public_key);
written += fprintf(stream, " keyid: %#B\n", &keyid);
fprintf(out, " keyid: %#B\n", &keyid);
}
if (this->subjectKeyID.ptr)
{
written += fprintf(stream, " subjkey: %#B\n", &this->subjectKeyID);
fprintf(out, " subjkey: %#B\n", &this->subjectKeyID);
}
if (this->authKeyID.ptr)
{
written += fprintf(stream, " authkey: %#B\n", &this->authKeyID);
fprintf(out, " authkey: %#B\n", &this->authKeyID);
}
if (this->authKeySerialNumber.ptr)
{
written += fprintf(stream, " aserial: %#B\n", &this->authKeySerialNumber);
fprintf(out, " aserial: %#B\n", &this->authKeySerialNumber);
}
written += fprintf(stream, " pubkey: RSA %d bits", BITS_PER_BYTE *
this->public_key->get_keysize(this->public_key));
written += fprintf(stream, ", status %N",
cert_status_names, this->status);
fprintf(out, " pubkey: RSA %d bits", BITS_PER_BYTE *
this->public_key->get_keysize(this->public_key));
fprintf(out, ", status %N",
cert_status_names, this->status);
switch (this->status)
{
case CERT_GOOD:
written += fprintf(stream, " until %#T", &this->until, utc);
fprintf(out, " until %#T", &this->until, utc);
break;
case CERT_REVOKED:
written += fprintf(stream, " on %#T", &this->until, utc);
fprintf(out, " on %#T", &this->until, utc);
break;
case CERT_UNKNOWN:
case CERT_UNDEFINED:
@ -1235,15 +1219,6 @@ static int print(FILE *stream, const struct printf_info *info,
default:
break;
}
return written;
}
/**
* register printf() handlers
*/
static void __attribute__ ((constructor))print_register()
{
register_printf_function(PRINTF_X509, print, arginfo_ptr_alt_ptr_int);
}
/**
@ -1310,6 +1285,7 @@ x509_t *x509_create_from_chunk(chunk_t chunk, u_int level)
this->public.create_crluri_iterator = (iterator_t* (*) (const x509_t*))create_crluri_iterator;
this->public.create_ocspuri_iterator = (iterator_t* (*) (const x509_t*))create_ocspuri_iterator;
this->public.verify = (bool (*) (const x509_t*,const rsa_public_key_t*))verify;
this->public.list = (void(*)(x509_t*, FILE *out, bool utc))list;
this->public.destroy = (void (*) (x509_t*))destroy;
if (!parse_certificate(chunk, level, this))

View File

@ -257,7 +257,16 @@ struct x509_t {
* @return TRUE if self-signed
*/
bool (*is_self_signed) (const x509_t *this);
/**
* @brief Log the certificate info to out.
*
* @param this calling object
* @param out stream to write to
* @param utc TRUE for UTC times, FALSE for local time
*/
void (*list)(x509_t *this, FILE *out, bool utc);
/**
* @brief Destroys the certificate.
*

View File

@ -46,14 +46,6 @@
#define PRINTF_TIME 'T'
/** 2 arguments: time_t *begin, time_t *end */
#define PRINTF_TIME_DELTA 'V'
/** 1 argument: x509_t *cert; with #-modifier 2 arguments: x509_t *cert, bool utc */
#define PRINTF_X509 'Q'
/** 1 argument: crl_t *crl; with #-modifier 2 arguments: crl_t *crl, bool utc */
#define PRINTF_CRL 'U'
/** 1 argument: ca_info_t *ca_info; with #-modifier 2 arguments: ca_info_t *ca_info, bool utc */
#define PRINTF_CAINFO 'W'
/** 1 argument: certinfo_t *certinfo; with #-modifier 2 arguments: certinfo_t *certinfo, bool utc */
#define PRINTF_CERTINFO 'Y'
/**
* Generic arginfo handlers for printf() hooks