summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Stradling <rob@comodo.com>2017-05-05 23:06:09 +0100
committerRob Stradling <rob@comodo.com>2017-05-05 23:06:09 +0100
commit35d6da09d181190e68c1226f741b1a631072f571 (patch)
treecaa655cc2b213ef01f191ada38b4ae005cf727cb
parentedf771e7e6b88db7a89c15c8fbac1dcdb87f88cd (diff)
downloadcertwatch_db-35d6da09d181190e68c1226f741b1a631072f571.zip
certwatch_db-35d6da09d181190e68c1226f741b1a631072f571.tar.gz
certwatch_db-35d6da09d181190e68c1226f741b1a631072f571.tar.bz2
Handle malformed base64 and missing 'created' dates in OneCRL.
-rw-r--r--update_browser_revocations.sql20
-rw-r--r--web_apis.fnc4
2 files changed, 20 insertions, 4 deletions
diff --git a/update_browser_revocations.sql b/update_browser_revocations.sql
index f64d38f..97ca6f0 100644
--- a/update_browser_revocations.sql
+++ b/update_browser_revocations.sql
@@ -13,10 +13,26 @@ SELECT json_array_elements((o.onecrl_data->>'data')::json) CERT_ITEM
DROP TABLE onecrl_import1;
CREATE TABLE onecrl_import3 AS
-SELECT decode(o.CERT_ITEM->>'issuerName', 'base64') ISSUER_NAME,
+SELECT decode(
+ o.CERT_ITEM->>'issuerName'
+ || CASE length(o.CERT_ITEM->>'issuerName') % 4
+ WHEN 2 THEN '=='
+ WHEN 3 THEN '='
+ ELSE ''
+ END,
+ 'base64'
+ ) ISSUER_NAME,
timestamp without time zone 'epoch'
+ ((o.CERT_ITEM->>'last_modified')::bigint * interval '1 millisecond') LAST_MODIFIED,
- decode(o.CERT_ITEM->>'serialNumber', 'base64') SERIAL_NUMBER,
+ decode(
+ o.CERT_ITEM->>'serialNumber'
+ || CASE length(o.CERT_ITEM->>'serialNumber') % 4
+ WHEN 2 THEN '=='
+ WHEN 3 THEN '='
+ ELSE ''
+ END,
+ 'base64'
+ ) SERIAL_NUMBER,
(((o.CERT_ITEM->>'details')::json)->>'created')::timestamp CREATED,
((o.CERT_ITEM->>'details')::json)->>'bug' BUG_URL,
((o.CERT_ITEM->>'details')::json)->>'name' SUMMARY
diff --git a/web_apis.fnc b/web_apis.fnc
index 9ad148a..ad673cb 100644
--- a/web_apis.fnc
+++ b/web_apis.fnc
@@ -2649,7 +2649,7 @@ Content-Type: application/json
mo.ISSUER_CA_ID, x509_name_print(mo.ISSUER_NAME) ISSUER_NAME_TEXT,
x509_name_print(mo.SUBJECT_NAME) SUBJECT_NAME_TEXT, mo.NOT_AFTER
FROM mozilla_onecrl mo
- ORDER BY mo.CREATED DESC, mo.SUMMARY, mo.BUG_URL, ISSUER_NAME_TEXT, mo.SERIAL_NUMBER
+ ORDER BY mo.CREATED DESC NULLS FIRST, mo.SUMMARY, mo.BUG_URL, ISSUER_NAME_TEXT, mo.SERIAL_NUMBER
) LOOP
t_output := t_output ||
' <TR>
@@ -2660,7 +2660,7 @@ Content-Type: application/json
t_output := t_output || '&nbsp;';
END IF;
t_output := t_output || '</TD>
- <TD style="white-space:nowrap">' || TO_CHAR(l_record.CREATED, 'YYYY-MM-DD') || '</TD>
+ <TD style="white-space:nowrap">' || coalesce(TO_CHAR(l_record.CREATED, 'YYYY-MM-DD'), 'Unspecified') || '</TD>
<TD>' || l_record.SUMMARY || '</TD>
<TD><A href="' || l_record.BUG_URL || '" target="_blank">' || substring(l_record.BUG_URL from '[0-9]*$') || '</A></TD>
<TD>' || encode(l_record.SERIAL_NUMBER, 'hex') || '</TD>