Skip to content

Commit

Permalink
Merge pull request #1156 from andrzej-jankowski/macs_fix
Browse files Browse the repository at this point in the history
[Core] DHCP - additional validation
  • Loading branch information
xor-xor committed Oct 15, 2014
2 parents 1aee027 + 7b1fd93 commit ff4179c
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
19 changes: 19 additions & 0 deletions src/ralph/dnsedit/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,31 @@
from __future__ import print_function
from __future__ import unicode_literals

from django import forms
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from lck.django.common.admin import ModelAdmin

from ralph.dnsedit.models import DHCPEntry, DNSHistory, DHCPServer, DNSServer


class DHCPEntryAdminForm(forms.ModelForm):

class Meta:
model = DHCPEntry

def clean_ip(self):
ip = self.cleaned_data['ip']
queryset = DHCPEntry.objects.filter(ip=ip)
if self.instance:
queryset = queryset.exclude(id=self.instance.id)
if queryset.count() > 0:
raise forms.ValidationError(
_('DHCP entry with this IP address already exists.'),
)
return ip


class DHCPEntryAdmin(ModelAdmin):

def ip_address(self):
Expand All @@ -22,6 +40,7 @@ def ip_address(self):
list_display = (ip_address, 'mac')
search_fields = ('ip', 'mac')
save_on_top = True
form = DHCPEntryAdminForm

admin.site.register(DHCPEntry, DHCPEntryAdmin)

Expand Down
8 changes: 8 additions & 0 deletions src/ralph/ui/forms/addresses.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

from bob.forms import AutocompleteWidget
from django import forms
from django.utils.translation import ugettext_lazy as _
from lck.django.common.models import MACAddressField
from powerdns.models import Domain, Record

Expand Down Expand Up @@ -228,6 +229,13 @@ def clean_ip(self):
ip = unicode(ipaddr.IPAddress(ip))
except ValueError:
raise forms.ValidationError("Invalid IP address")
queryset = DHCPEntry.objects.filter(ip=ip)
if self.instance:
queryset = queryset.exclude(id=self.instance.id)
if queryset.count() > 0:
raise forms.ValidationError(
_('DHCP entry with this IP address already exists.'),
)
return ip

def clean_mac(self):
Expand Down

0 comments on commit ff4179c

Please sign in to comment.