diff options
Diffstat (limited to 'rpki')
-rw-r--r-- | rpki/fields.py | 69 | ||||
-rw-r--r-- | rpki/irdb/migrations/0005_auto_20151023_2151.py | 141 | ||||
-rw-r--r-- | rpki/pubdb/migrations/0002_auto_20151023_2151.py | 25 | ||||
-rw-r--r-- | rpki/rpkidb/migrations/0008_auto_20151023_2151.py | 145 |
4 files changed, 344 insertions, 36 deletions
diff --git a/rpki/fields.py b/rpki/fields.py index 9fc57e51..b0252840 100644 --- a/rpki/fields.py +++ b/rpki/fields.py @@ -19,9 +19,9 @@ """ Common Django ORM field classes. -Many of these are complex ASN.1 DER objects stored as SQL BLOBs, since -the only sane text representation would just be the Base64 encoding of -the DER and thus would add no value. +Many of these are complex ASN.1 DER objects stored as binaray data, +since the only sane text representation would just be the Base64 +encoding of the DER and thus would add no value. """ import logging @@ -83,27 +83,9 @@ class SundialField(models.DateTimeField): class BlobField(models.Field): """ - Basic BLOB field, no type conversion, just an opaque byte string. + Old BLOB field type, predating Django's BinaryField type. - "BLOB" = "Binary Large OBject". Most SQL implementations seem to - have such a thing, but support appears to predate standardization, - so they all do it slightly differently and we have to cope. - - In PostgreSQL, BLOBs are called "bytea". - - In MySQL, there are different sizes of BLOBs and one must pick the - right one to avoid data truncation. RPKI manifests and CRLs can be - longer than 65535 octets, so in MySQL the only safe BLOB type for - general use is "LONGBLOB". - - SQLite...is not like the other children: data types are more like - guidelines than actual rules. But "BLOB" works. - - For anything else, we just use "BLOB" and hope for the best. - - NB: This field type predates Django 1.6's BinaryField. Probably - this should be retired in favor of BinaryField, but I'd have to - figure out what that does to field types that derive from this one. + Do not use, this is only here for backwards compatabilty during migrations. """ __metaclass__ = models.SubfieldBase @@ -137,26 +119,33 @@ class BlobField(models.Field): # this if and when it ever becomes an issue. -class DERField(BlobField): +# DERField used to be a subclass of BlobField. Try changing it to be +# a subclass of BinaryField instead, leave BlobField (for now) for +# backwards compatability during migrations, + + +class DERField(models.BinaryField): """ - Field class for DER objects. These are derived from BLOBs, but with - automatic translation between ASN.1 and Python types. + Field class for DER objects. These are derived from BinaryField, + but with automatic translation between ASN.1 and Python types. DERField itself is an abstract class, concrete field classes are derived from it. """ - __metaclass__ = models.SubfieldBase + def __init__(self, *args, **kwargs): + kwargs["serialize"] = False + kwargs["blank"] = True + kwargs["default"] = None + super(DERField, self).__init__(*args, **kwargs) - def to_python(self, value): - if value is not None and not isinstance(value, (self.rpki_type, str)): - logger.warning("Why am I now seeing a %r instead of str or %r in the %r rpki.fields.DERField.to_python() method?", - type(value), self.rpki_type, type(self)) - assert value is None or isinstance(value, (self.rpki_type, str)) - if isinstance(value, str): - return self.rpki_type(DER = value) - else: - return value + if False: + def to_python(self, value): + assert value is None or isinstance(value, (self.rpki_type, str)) + if isinstance(value, str): + return self.rpki_type(DER = value) + else: + return value def get_prep_value(self, value): assert value is None or isinstance(value, (self.rpki_type, str)) @@ -165,6 +154,14 @@ class DERField(BlobField): else: return value + def from_db_value(self, value, expression, connection, context): + assert value is None or isinstance(value, (self.rpki_type, str)) + if isinstance(value, str): + return self.rpki_type(DER = value) + else: + return value + + class CertificateField(DERField): description = "X.509 certificate" rpki_type = rpki.x509.X509 diff --git a/rpki/irdb/migrations/0005_auto_20151023_2151.py b/rpki/irdb/migrations/0005_auto_20151023_2151.py new file mode 100644 index 00000000..7d16e7a0 --- /dev/null +++ b/rpki/irdb/migrations/0005_auto_20151023_2151.py @@ -0,0 +1,141 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import rpki.irdb.models +import rpki.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('irdb', '0004_auto_20151018_1603'), + ] + + operations = [ + migrations.AlterField( + model_name='bsc', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='bsc', + name='pkcs10', + field=rpki.fields.PKCS10Field(), + ), + migrations.AlterField( + model_name='child', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='child', + name='ta', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='client', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='client', + name='ta', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='eecertificaterequest', + name='pkcs10', + field=rpki.fields.PKCS10Field(), + ), + migrations.AlterField( + model_name='hostedca', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='parent', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='parent', + name='referral_authorization', + field=rpki.irdb.models.SignedReferralField(null=True, blank=True), + ), + migrations.AlterField( + model_name='parent', + name='ta', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='referral', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='referral', + name='private_key', + field=rpki.fields.RSAPrivateKeyField(), + ), + migrations.AlterField( + model_name='repository', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='repository', + name='ta', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='resourceholderca', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='resourceholderca', + name='latest_crl', + field=rpki.fields.CRLField(), + ), + migrations.AlterField( + model_name='resourceholderca', + name='private_key', + field=rpki.fields.RSAPrivateKeyField(), + ), + migrations.AlterField( + model_name='rootd', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='rootd', + name='private_key', + field=rpki.fields.RSAPrivateKeyField(), + ), + migrations.AlterField( + model_name='serverca', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='serverca', + name='latest_crl', + field=rpki.fields.CRLField(), + ), + migrations.AlterField( + model_name='serverca', + name='private_key', + field=rpki.fields.RSAPrivateKeyField(), + ), + migrations.AlterField( + model_name='serveree', + name='certificate', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='serveree', + name='private_key', + field=rpki.fields.RSAPrivateKeyField(), + ), + ] diff --git a/rpki/pubdb/migrations/0002_auto_20151023_2151.py b/rpki/pubdb/migrations/0002_auto_20151023_2151.py new file mode 100644 index 00000000..ae354a9b --- /dev/null +++ b/rpki/pubdb/migrations/0002_auto_20151023_2151.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import rpki.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('pubdb', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='client', + name='bpki_cert', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='client', + name='bpki_glue', + field=rpki.fields.CertificateField(null=True), + ), + ] diff --git a/rpki/rpkidb/migrations/0008_auto_20151023_2151.py b/rpki/rpkidb/migrations/0008_auto_20151023_2151.py new file mode 100644 index 00000000..415cda5f --- /dev/null +++ b/rpki/rpkidb/migrations/0008_auto_20151023_2151.py @@ -0,0 +1,145 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import rpki.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('rpkidb', '0007_auto_20151020_1345'), + ] + + operations = [ + migrations.AlterField( + model_name='bsc', + name='pkcs10_request', + field=rpki.fields.PKCS10Field(), + ), + migrations.AlterField( + model_name='bsc', + name='private_key_id', + field=rpki.fields.RSAPrivateKeyField(), + ), + migrations.AlterField( + model_name='bsc', + name='signing_cert', + field=rpki.fields.CertificateField(null=True), + ), + migrations.AlterField( + model_name='bsc', + name='signing_cert_crl', + field=rpki.fields.CRLField(null=True), + ), + migrations.AlterField( + model_name='cadetail', + name='latest_ca_cert', + field=rpki.fields.CertificateField(null=True), + ), + migrations.AlterField( + model_name='cadetail', + name='latest_crl', + field=rpki.fields.CRLField(null=True), + ), + migrations.AlterField( + model_name='cadetail', + name='latest_manifest', + field=rpki.fields.ManifestField(null=True), + ), + migrations.AlterField( + model_name='cadetail', + name='latest_manifest_cert', + field=rpki.fields.CertificateField(null=True), + ), + migrations.AlterField( + model_name='cadetail', + name='manifest_private_key_id', + field=rpki.fields.RSAPrivateKeyField(null=True), + ), + migrations.AlterField( + model_name='cadetail', + name='manifest_public_key', + field=rpki.fields.PublicKeyField(null=True), + ), + migrations.AlterField( + model_name='cadetail', + name='private_key_id', + field=rpki.fields.RSAPrivateKeyField(null=True), + ), + migrations.AlterField( + model_name='cadetail', + name='public_key', + field=rpki.fields.PublicKeyField(null=True), + ), + migrations.AlterField( + model_name='child', + name='bpki_cert', + field=rpki.fields.CertificateField(null=True), + ), + migrations.AlterField( + model_name='child', + name='bpki_glue', + field=rpki.fields.CertificateField(null=True), + ), + migrations.AlterField( + model_name='childcert', + name='cert', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='eecertificate', + name='cert', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='ghostbuster', + name='cert', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='ghostbuster', + name='ghostbuster', + field=rpki.fields.GhostbusterField(), + ), + migrations.AlterField( + model_name='parent', + name='bpki_cert', + field=rpki.fields.CertificateField(null=True), + ), + migrations.AlterField( + model_name='parent', + name='bpki_glue', + field=rpki.fields.CertificateField(null=True), + ), + migrations.AlterField( + model_name='repository', + name='bpki_cert', + field=rpki.fields.CertificateField(null=True), + ), + migrations.AlterField( + model_name='repository', + name='bpki_glue', + field=rpki.fields.CertificateField(null=True), + ), + migrations.AlterField( + model_name='roa', + name='cert', + field=rpki.fields.CertificateField(), + ), + migrations.AlterField( + model_name='roa', + name='roa', + field=rpki.fields.ROAField(), + ), + migrations.AlterField( + model_name='tenant', + name='bpki_cert', + field=rpki.fields.CertificateField(null=True), + ), + migrations.AlterField( + model_name='tenant', + name='bpki_glue', + field=rpki.fields.CertificateField(null=True), + ), + ] |