/// <summary> /// Gets the database command to select the record for the specified CRL. /// </summary> /// <remarks> /// Gets the database command to select the record for the specified CRL. /// </remarks> /// <returns>The database command.</returns> /// <param name="crl">The X.509 CRL.</param> /// <param name="fields">The fields to return.</param> protected override DbCommand GetSelectCommand (X509Crl crl, X509CrlRecordFields fields) { var query = "SELECT " + string.Join (", ", GetColumnNames (fields)) + " FROM CRLS "; var issuerName = crl.IssuerDN.ToString (); var command = connection.CreateCommand (); command.CommandText = query + "WHERE DELTA = @DELTA AND ISSUERNAME = @ISSUERNAME AND THISUPDATE = @THISUPDATE LIMIT 1"; command.AddParameterWithValue ("@DELTA", crl.IsDelta ()); command.AddParameterWithValue ("@ISSUERNAME", issuerName); command.AddParameterWithValue ("@THISUPDATE", crl.ThisUpdate); command.CommandType = CommandType.Text; return command; }
/// <summary> /// Initializes a new instance of the <see cref="MimeKit.Cryptography.X509CrlRecord"/> class. /// </summary> /// <remarks> /// Creates a new CRL record for storing in a <see cref="IX509CertificateDatabase"/>. /// </remarks> /// <param name="crl">The certificate revocation list.</param> /// <exception cref="System.ArgumentNullException"> /// <paramref name="crl"/> is <c>null</c>. /// </exception> public X509CrlRecord (X509Crl crl) { if (crl == null) throw new ArgumentNullException ("crl"); if (crl.NextUpdate != null) NextUpdate = crl.NextUpdate.Value; IssuerName = crl.IssuerDN.ToString (); ThisUpdate = crl.ThisUpdate; IsDelta = crl.IsDelta (); Crl = crl; }
/// <summary> /// Imports a certificate revocation list. /// </summary> /// <remarks> /// Imports the specified certificate revocation list. /// </remarks> /// <param name="crl">The certificate revocation list.</param> /// <exception cref="System.ArgumentNullException"> /// <paramref name="crl"/> is <c>null</c>. /// </exception> public override void Import (X509Crl crl) { if (crl == null) throw new ArgumentNullException ("crl"); // check for an exact match... if (dbase.Find (crl, X509CrlRecordFields.Id) != null) return; const X509CrlRecordFields fields = ~X509CrlRecordFields.Crl; var obsolete = new List<X509CrlRecord> (); var delta = crl.IsDelta (); // scan over our list of CRLs by the same issuer to check if this CRL obsoletes any // older CRLs or if there are any newer CRLs that obsolete that obsolete this one. foreach (var record in dbase.Find (crl.IssuerDN, fields)) { if (!record.IsDelta && record.ThisUpdate >= crl.ThisUpdate) { // we have a complete CRL that obsoletes this CRL return; } if (!delta) obsolete.Add (record); } // remove any obsoleted CRLs foreach (var record in obsolete) dbase.Remove (record); dbase.Add (new X509CrlRecord (crl)); }