diff options
author | Rob Austein <sra@hactrn.net> | 2010-05-05 20:41:16 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2010-05-05 20:41:16 +0000 |
commit | c8c8537101ded5a924e41252121201c8c42a88b0 (patch) | |
tree | b25a0a7c4b5a88cb04d34ff5df60b4259e1fb915 /rcynic | |
parent | 6225d178bce94f18861a9f06977e3a275f6feee8 (diff) |
Add classification of the ten zillion codes to XML output, use that to
do a bit more color coding.
svn path=/rcynic/rcynic.c; revision=3238
Diffstat (limited to 'rcynic')
-rw-r--r-- | rcynic/rcynic.c | 140 | ||||
-rw-r--r-- | rcynic/rcynic.xsl | 41 |
2 files changed, 109 insertions, 72 deletions
diff --git a/rcynic/rcynic.c b/rcynic/rcynic.c index a8d59dab..ec934e86 100644 --- a/rcynic/rcynic.c +++ b/rcynic/rcynic.c @@ -186,68 +186,85 @@ static const struct { */ #define MIB_COUNTERS \ - QQ(validation_ok, "OK") \ - QQ(backup_cert_accepted, "Backup certificates accepted") \ - QQ(backup_cert_rejected, "Backup certificates rejected") \ - QQ(backup_crl_accepted, "Backup CRLs accepted") \ - QQ(backup_crl_rejected, "Backup CRLs rejected") \ - QQ(current_cert_accepted, "Current certificates accepted") \ - QQ(current_cert_rejected, "Current certificates rejected") \ - QQ(current_crl_accepted, "Current CRLs accepted") \ - QQ(current_crl_rejected, "Current CRLs rejected") \ - QQ(current_manifest_accepted, "Current Manifests accepted") \ - QQ(current_manifest_rejected, "Current Manifests rejected") \ - QQ(backup_manifest_accepted, "Backup Manifests accepted") \ - QQ(backup_manifest_rejected, "Backup Manifests rejected") \ - QQ(rsync_failed, "rsync transfers failed") \ - QQ(rsync_succeeded, "rsync transfers succeeded") \ - QQ(rsync_timed_out, "rsync transfers timed out") \ - QQ(stale_crl, "Stale CRLs") \ - QQ(malformed_sia, "Malformed SIA extensions") \ - QQ(sia_missing, "SIA extensions missing") \ - QQ(aia_missing, "AIA extensions missing") \ - QQ(crldp_missing, "CRLDP extensions missing") \ - QQ(aia_mismatch, "Mismatched AIA extensions") \ - QQ(unknown_verify_error, "Unknown OpenSSL verify error") \ - QQ(current_cert_recheck, "Certificates rechecked") \ - QQ(manifest_invalid_ee, "Invalid manifest certificates") \ - QQ(manifest_invalid_cms, "Manifest validation failures") \ - QQ(manifest_decode_error, "Manifest decode errors") \ - QQ(stale_manifest, "Stale manifests") \ - QQ(manifest_not_yet_valid, "Manifests not yet valid") \ - QQ(manifest_bad_econtenttype, "Bad manifest eContentType") \ - QQ(manifest_missing_signer, "Missing manifest signers") \ - QQ(manifest_missing_crldp, "Missing manifest CRLDP") \ - QQ(manifest_malformed_crldp, "Malformed manifest CRLDP") \ - QQ(certificate_digest_mismatch, "Certificate digest mismatches") \ - QQ(crl_digest_mismatch, "CRL digest mismatches") \ - QQ(crl_not_in_manifest, "CRL not listed in manifest") \ - QQ(roa_invalid_ee, "Invalid ROA certificates") \ - QQ(roa_invalid_cms, "ROA validation failures") \ - QQ(roa_decode_error, "ROA decode errors") \ - QQ(roa_bad_econtenttype, "Bad ROA eContentType") \ - QQ(roa_missing_signer, "Missing ROA signers") \ - QQ(roa_digest_mismatch, "ROA digest mismatches") \ - QQ(current_roa_accepted, "Current ROAs accepted") \ - QQ(current_roa_rejected, "Current ROAs rejected") \ - QQ(backup_roa_accepted, "Backup ROAs accepted") \ - QQ(backup_roa_rejected, "Backup ROAs rejected") \ - QQ(malformed_roa_addressfamily, "Malformed ROA addressFamilys") \ - QQ(manifest_wrong_version, "Wrong manifest versions") \ - QQ(roa_wrong_version, "Wrong ROA versions") \ - QQ(trust_anchor_not_self_signed, "Trust anchor not self-signed") \ - QQ(uri_too_long, "URI too long") \ - QQ(malformed_crldp, "Malformed CRDLP extension") \ - QQ(certificate_bad_signature, "Bad certificate signature") \ - QQ(certificate_bad_crl, "Bad certificate CRL") \ - QQ(manifest_bad_crl, "Manifest has bad CRL") \ - QQ(roa_resources_malformed, "ROA resources malformed") \ - QQ(roa_bad_afi, "ROA contains bad AFI value") \ - QQ(roa_not_nested, "ROA resources not in EE") \ - QQ(roa_bad_crl, "ROA EE has bad CRL") \ + QG(validation_ok, "OK") \ + QG(backup_cert_accepted, "Backup certificates accepted") \ + QB(backup_cert_rejected, "Backup certificates rejected") \ + QG(backup_crl_accepted, "Backup CRLs accepted") \ + QB(backup_crl_rejected, "Backup CRLs rejected") \ + QG(current_cert_accepted, "Current certificates accepted") \ + QB(current_cert_rejected, "Current certificates rejected") \ + QG(current_crl_accepted, "Current CRLs accepted") \ + QB(current_crl_rejected, "Current CRLs rejected") \ + QG(current_manifest_accepted, "Current Manifests accepted") \ + QB(current_manifest_rejected, "Current Manifests rejected") \ + QG(backup_manifest_accepted, "Backup Manifests accepted") \ + QB(backup_manifest_rejected, "Backup Manifests rejected") \ + QB(rsync_failed, "rsync transfers failed") \ + QG(rsync_succeeded, "rsync transfers succeeded") \ + QB(rsync_timed_out, "rsync transfers timed out") \ + QW(stale_crl, "Stale CRLs") \ + QB(malformed_sia, "Malformed SIA extensions") \ + QB(sia_missing, "SIA extensions missing") \ + QB(aia_missing, "AIA extensions missing") \ + QB(crldp_missing, "CRLDP extensions missing") \ + QB(aia_mismatch, "Mismatched AIA extensions") \ + QB(unknown_verify_error, "Unknown OpenSSL verify error") \ + QG(current_cert_recheck, "Certificates rechecked") \ + QB(manifest_invalid_ee, "Invalid manifest certificates") \ + QB(manifest_invalid_cms, "Manifest validation failures") \ + QB(manifest_decode_error, "Manifest decode errors") \ + QW(stale_manifest, "Stale manifests") \ + QB(manifest_not_yet_valid, "Manifests not yet valid") \ + QB(manifest_bad_econtenttype, "Bad manifest eContentType") \ + QB(manifest_missing_signer, "Missing manifest signers") \ + QB(manifest_missing_crldp, "Missing manifest CRLDP") \ + QB(manifest_malformed_crldp, "Malformed manifest CRLDP") \ + QB(certificate_digest_mismatch, "Certificate digest mismatches") \ + QB(crl_digest_mismatch, "CRL digest mismatches") \ + QB(crl_not_in_manifest, "CRL not listed in manifest") \ + QB(roa_invalid_ee, "Invalid ROA certificates") \ + QB(roa_invalid_cms, "ROA validation failures") \ + QB(roa_decode_error, "ROA decode errors") \ + QB(roa_bad_econtenttype, "Bad ROA eContentType") \ + QB(roa_missing_signer, "Missing ROA signers") \ + QB(roa_digest_mismatch, "ROA digest mismatches") \ + QG(current_roa_accepted, "Current ROAs accepted") \ + QB(current_roa_rejected, "Current ROAs rejected") \ + QG(backup_roa_accepted, "Backup ROAs accepted") \ + QB(backup_roa_rejected, "Backup ROAs rejected") \ + QB(malformed_roa_addressfamily, "Malformed ROA addressFamilys") \ + QB(manifest_wrong_version, "Wrong manifest versions") \ + QB(roa_wrong_version, "Wrong ROA versions") \ + QW(trust_anchor_not_self_signed, "Trust anchor not self-signed") \ + QB(uri_too_long, "URI too long") \ + QB(malformed_crldp, "Malformed CRDLP extension") \ + QB(certificate_bad_signature, "Bad certificate signature") \ + QB(certificate_bad_crl, "Bad certificate CRL") \ + QB(manifest_bad_crl, "Manifest has bad CRL") \ + QB(roa_resources_malformed, "ROA resources malformed") \ + QB(roa_bad_afi, "ROA contains bad AFI value") \ + QB(roa_not_nested, "ROA resources not in EE") \ + QB(roa_bad_crl, "ROA EE has bad CRL") \ MIB_COUNTERS_FROM_OPENSSL -#define QV(x) QQ(mib_openssl_##x, 0) +#define QV(x) QB(mib_openssl_##x, 0) + +static const char + mib_counter_kind_good[] = "good", + mib_counter_kind_warn[] = "warn", + mib_counter_kind_bad[] = "bad"; + +#define QG(x,y) mib_counter_kind_good , +#define QW(x,y) mib_counter_kind_warn , +#define QB(x,y) mib_counter_kind_bad , +static const char * const mib_counter_kind[] = { MIB_COUNTERS NULL }; +#undef QB +#undef QW +#undef QG + +#define QG(x,y) QQ(x,y) +#define QW(x,y) QQ(x,y) +#define QB(x,y) QQ(x,y) #define QQ(x,y) x , typedef enum mib_counter { MIB_COUNTERS MIB_COUNTER_T_MAX } mib_counter_t; @@ -3216,7 +3233,8 @@ int main(int argc, char *argv[]) tad, svn_id, XML_SUMMARY_VERSION, hostname) != EOF; for (j = 0; ok && j < MIB_COUNTER_T_MAX; ++j) - ok &= fprintf(f, " <%s>%s</%s>\n", mib_counter_label[j], + ok &= fprintf(f, " <%s kind=\"%s\">%s</%s>\n", + mib_counter_label[j], mib_counter_kind[j], (mib_counter_desc[j] ? mib_counter_desc[j] : X509_verify_cert_error_string(mib_counter_openssl[j])), diff --git a/rcynic/rcynic.xsl b/rcynic/rcynic.xsl index 1e349834..1fb0eb86 100644 --- a/rcynic/rcynic.xsl +++ b/rcynic/rcynic.xsl @@ -62,6 +62,19 @@ </xsl:for-each> </xsl:variable> + <xsl:variable name="moods"> + <xsl:for-each select="rcynic-summary/host"> + <xsl:variable name="hostname" select="hostname"/> + <xsl:for-each select="*[not(self::hostname)]"> + <xsl:variable name="label" select="name()"/> + <xsl:variable name="mood" select="/rcynic-summary/labels/*[name() = $label]/@kind"/> + <x hostname="{$hostname}" mood="{$mood}"> + <xsl:value-of select="."/> + </x> + </xsl:for-each> + </xsl:for-each> + </xsl:variable> + <xsl:template match="/"> <xsl:comment>Generators</xsl:comment> <xsl:comment><xsl:value-of select="rcynic-summary/@rcynic-version"/></xsl:comment> @@ -81,9 +94,9 @@ <style type="text/css"> td { text-align: center; padding: 4px } td.uri { text-align: left } - tr.happy { background-color: #77ff77 } - tr.warning { background-color: yellow } - tr.danger { background-color: #ff5500 } + tr.good { background-color: #77ff77 } + tr.warn { background-color: yellow } + tr.bad { background-color: #ff5500 } </style> </head> <body> @@ -105,7 +118,18 @@ <xsl:for-each select="rcynic-summary/host"> <xsl:sort order="descending" data-type="number" select="sum(*[not(self::hostname)])"/> <xsl:sort order="ascending" data-type="text" select="hostname"/> - <tr> + <xsl:variable name="hostname" select="hostname"/> + <xsl:variable name="goodness" select="sum(exslt:node-set($moods)/x[@hostname = $hostname and @mood = 'good'])"/> + <xsl:variable name="badness" select="sum(exslt:node-set($moods)/x[@hostname = $hostname and @mood = 'bad'])"/> + <xsl:variable name="warnings" select="sum(exslt:node-set($moods)/x[@hostname = $hostname and @mood = 'warn'])"/> + <xsl:variable name="mood"> + <xsl:choose> + <xsl:when test="$goodness != 0 and $warnings = 0 and $badness = 0">good</xsl:when> + <xsl:when test="$goodness + $warnings != 0">warn</xsl:when> + <xsl:otherwise>bad</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <tr class="{$mood}"> <xsl:for-each select="*"> <xsl:variable name="p" select="position()"/> <xsl:if test="$suppress-zero-columns = 0 or position() = 1 or exslt:node-set($sums)/x[$p]/@sum > 0"> @@ -139,14 +163,9 @@ <tbody> <xsl:for-each select="rcynic-summary/validation_status"> <xsl:variable name="status" select="@status"/> - <xsl:variable name="mood"> - <xsl:choose> - <xsl:when test="$status = 'validation_ok'">happy</xsl:when> - <xsl:otherwise>danger</xsl:otherwise> - </xsl:choose> - </xsl:variable> + <xsl:variable name="mood" select="/rcynic-summary/labels/*[name() = $status]/@kind"/> <tr class="{$mood}"> - <td class="timestamp"><xsl:value-of select="@timestamp"/></td> + <td class="timestamp"><xsl:value-of select="@timestamp"/></td> <td class="status"><xsl:value-of select="/rcynic-summary/labels/*[name() = $status] "/></td> <td class="uri"><xsl:value-of select="."/></td> </tr> |