Browse Source

Remove buggy and obsolete network validation

CidrAddressField already validates that host bits are zeroed.

Moreover that validator always fails (as of Django 1.8 and netfields 0.3.x). as
IPv4Network is not (anymore ?) a subclass of IPNetwork.

Ref https://code.ffdn.org/FFDN/coin/pulls/99#issuecomment-401
Jocelyn Delalande 8 years ago
parent
commit
69c123a389

+ 2 - 2
coin/resources/migrations/0001_initial.py

@@ -20,7 +20,7 @@ class Migration(migrations.Migration):
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('name', models.CharField(help_text="Nom du pool d'IP", max_length=255, verbose_name='nom')),
                 ('default_subnetsize', models.PositiveSmallIntegerField(help_text='Taille par d\xe9faut du sous-r\xe9seau \xe0 allouer aux abonn\xe9s dans ce pool', verbose_name='taille de sous-r\xe9seau par d\xe9faut', validators=[django.core.validators.MaxValueValidator(64)])),
-                ('inet', netfields.fields.CidrAddressField(help_text="Bloc d'adresses IP du pool", max_length=43, verbose_name='r\xe9seau', validators=[coin.resources.models.validate_subnet])),
+                ('inet', netfields.fields.CidrAddressField(help_text="Bloc d'adresses IP du pool", max_length=43, verbose_name='r\xe9seau')),
             ],
             options={
                 'verbose_name': "pool d'IP",
@@ -32,7 +32,7 @@ class Migration(migrations.Migration):
             name='IPSubnet',
             fields=[
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
-                ('inet', netfields.fields.CidrAddressField(blank=True, help_text='Laisser vide pour allouer automatiquement', max_length=43, verbose_name='sous-r\xe9seau', validators=[coin.resources.models.validate_subnet])),
+                ('inet', netfields.fields.CidrAddressField(blank=True, help_text='Laisser vide pour allouer automatiquement', max_length=43, verbose_name='sous-r\xe9seau')),
                 ('delegate_reverse_dns', models.BooleanField(default=False, help_text='D\xe9l\xe9guer la r\xe9solution DNS inverse de ce sous-r\xe9seau \xe0 un ou plusieurs serveurs de noms', verbose_name='d\xe9l\xe9guer le reverse DNS')),
                 ('configuration', models.ForeignKey(related_name='ip_subnet', verbose_name='configuration', to='configuration.Configuration')),
                 ('ip_pool', models.ForeignKey(verbose_name="pool d'IP", to='resources.IPPool')),

+ 1 - 1
coin/resources/migrations/0003_auto_20150203_1043.py

@@ -16,7 +16,7 @@ class Migration(migrations.Migration):
         migrations.AlterField(
             model_name='ipsubnet',
             name='inet',
-            field=netfields.fields.CidrAddressField(validators=[coin.resources.models.validate_subnet], max_length=43, blank=True, help_text='Laisser vide pour allouer automatiquement', unique=True, verbose_name='sous-r\xe9seau'),
+            field=netfields.fields.CidrAddressField(max_length=43, blank=True, help_text='Laisser vide pour allouer automatiquement', unique=True, verbose_name='sous-r\xe9seau'),
             preserve_default=True,
         ),
     ]

+ 3 - 13
coin/resources/models.py

@@ -6,16 +6,7 @@ from django.core.exceptions import ValidationError
 from django.core.validators import MaxValueValidator
 from django.db.models import Q
 from netfields import CidrAddressField, NetManager
-from netaddr import IPNetwork, IPSet
-
-
-def validate_subnet(cidr):
-    """Checks that a CIDR object is indeed a subnet, i.e. the host bits are
-    all set to zero."""
-    if not isinstance(cidr, IPNetwork):
-        raise ValidationError("Erreur, objet IPNetwork attendu.")
-    if cidr.ip != cidr.network:
-        raise ValidationError("{} n'est pas un sous-réseau valide, voulez-vous dire {} ?".format(cidr, cidr.cidr))
+from netaddr import IPSet
 
 
 class IPPool(models.Model):
@@ -27,8 +18,7 @@ class IPPool(models.Model):
                                                           verbose_name='taille de sous-réseau par défaut',
                                                           help_text='Taille par défaut du sous-réseau à allouer aux abonnés dans ce pool',
                                                           validators=[MaxValueValidator(64)])
-    inet = CidrAddressField(validators=[validate_subnet],
-                            verbose_name='réseau',
+    inet = CidrAddressField(verbose_name='réseau',
                             help_text="Bloc d'adresses IP du pool")
     objects = NetManager()
 
@@ -55,7 +45,7 @@ class IPPool(models.Model):
 
 
 class IPSubnet(models.Model):
-    inet = CidrAddressField(blank=True, validators=[validate_subnet],
+    inet = CidrAddressField(blank=True,
                             unique=True, verbose_name="sous-réseau",
                             help_text="Laisser vide pour allouer automatiquement")
     objects = NetManager()