From 248179ac5dca3d43777a7530cbefd9c57671716b Mon Sep 17 00:00:00 2001 From: Michael Ziegler Date: Wed, 24 Feb 2010 20:48:45 +0100 Subject: [PATCH] only check the port for validity if it has been set --- pyweb/mumble/forms.py | 50 ++++++++++--------------------------------- 1 file changed, 11 insertions(+), 39 deletions(-) diff --git a/pyweb/mumble/forms.py b/pyweb/mumble/forms.py index a837c0d..b9d42ca 100644 --- a/pyweb/mumble/forms.py +++ b/pyweb/mumble/forms.py @@ -128,48 +128,20 @@ class MumbleAdminForm( MumbleForm ): exclude = None def clean_port( self ): - """ If portno == -1 autoassign, and check if the port number is valid. """ + """ Check if the port number is valid. """ port = self.cleaned_data['port']; - if port == -1: - port = max( [ rec['port'] for rec in Mumble.objects.values('port') ] ) + 1; - if port < 1 or port >= 2**16: - raise forms.ValidationError( - _("Port number %(portno)d is not within the allowed range %(minrange)d - %(maxrange)d") % { - 'portno': port, - 'minrange': 1, - 'maxrange': 2**16, - }); - return port; - - def clean( self ): - """ Try to bind to the addr and port to verify that they are available. """ - - if self.instance.id is not None or 'addr' not in self.cleaned_data or 'port' not in self.cleaned_data: - # Editing old instance or previous validation failed already, don't try to bind - return self.cleaned_data; - - addr = socket.gethostbyname( self.cleaned_data['addr'] ); - port = self.cleaned_data['port']; - - try: - socktcp = socket.socket( socket.AF_INET, socket.SOCK_STREAM ); - socktcp.bind( ( addr, port ) ); - except socket.error, err: - raise forms.ValidationError( err.args[1] ); - finally: - socktcp.close(); - - try: - sockudp = socket.socket( socket.AF_INET, socket.SOCK_DGRAM ); - sockudp.bind( ( addr, port ) ); - except socket.error, err: - raise forms.ValidationError( err.args[1] ); - finally: - sockudp.close(); - - return self.cleaned_data; + if port is not None and port != '': + if port < 1 or port >= 2**16: + raise forms.ValidationError( + _("Port number %(portno)d is not within the allowed range %(minrange)d - %(maxrange)d") % { + 'portno': port, + 'minrange': 1, + 'maxrange': 2**16, + }); + return port; + return None class MumbleUserForm( ModelForm ):