1
0
mirror of https://github.com/gryf/wicd.git synced 2025-12-20 04:48:00 +01:00

Implemented basic IPv6 support -- needs HEAVY testing

This commit is contained in:
David Paleino
2012-05-06 17:52:39 +02:00
parent 11e8a96677
commit b6225c97d3
3 changed files with 53 additions and 16 deletions

View File

@@ -152,18 +152,19 @@ class AdvancedSettingsDialog(gtk.Dialog):
def set_defaults(self, widget=None, event=None):
""" Put some default values into entries to help the user out. """
self.txt_ip.set_text(self.txt_ip.get_text().strip())
ipAddress = self.txt_ip.get_text() # For easy typing :)
ip = self.txt_ip.get_text() # For easy typing :)
netmask = self.txt_netmask
gateway = self.txt_gateway
ip_parts = misc.IsValidIP(ipAddress)
if ip_parts:
if misc.IsValidIP(ip):
# Only do these things if it's IPv4
if misc.IsValidIPv4(ip):
if stringToNone(gateway.get_text()) is None: # Make sure the gateway box is blank
# Fill it in with a .1 at the end
gateway.set_text('.'.join(ip_parts[0:3]) + '.1')
gateway.set_text(ip[:ip.rindex('.')] + '.1')
if stringToNone(netmask.get_text()) is None: # Make sure the netmask is blank
netmask.set_text('255.255.255.0') # Fill in the most common one
elif ipAddress != "":
elif ip != '':
error(None, _('Invalid IP address entered.'))
def reset_static_checkboxes(self):

View File

@@ -18,6 +18,18 @@ class TestMisc(unittest.TestCase):
def test_valid_ip_3(self):
self.assertTrue(misc.IsValidIP('10.0.1.1'))
def test_valid_ip_4(self):
self.assertTrue(misc.IsValidIP('::'))
def test_valid_ip_5(self):
self.assertTrue(misc.IsValidIP('::1'))
def test_valid_ip_6(self):
self.assertTrue(misc.IsValidIP('FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF'))
def test_valid_ip_7(self):
self.assertTrue(misc.IsValidIP('2001:0db8:85a3:0000:0000:8a2e:0370:7334'))
def test_invalid_ip_1(self):
self.assertFalse(misc.IsValidIP('-10.0.-1.-1'))
@@ -27,6 +39,18 @@ class TestMisc(unittest.TestCase):
def test_invalid_ip_3(self):
self.assertFalse(misc.IsValidIP('1000.0.0.1'))
def test_invalid_ip_4(self):
self.assertFalse(misc.IsValidIP(':'))
def test_invalid_ip_5(self):
self.assertFalse(misc.IsValidIP('1:'))
def test_invalid_ip_6(self):
self.assertFalse(misc.IsValidIP('ZZZZ:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF'))
def test_invalid_ip_7(self):
self.assertFalse(misc.IsValidIP('2001:0db8:85Z3:0000:0000:8a2e:0370:7334'))
def test_run_valid_regex(self):
import re
regex = re.compile('.*(ABC.EFG).*')

View File

@@ -33,6 +33,7 @@ from subprocess import Popen, STDOUT, PIPE, call
from commands import getoutput
from itertools import repeat, chain, izip
from pipes import quote
import socket
from wicd.translations import _
@@ -173,15 +174,26 @@ def IsValidIP(ip):
""" Make sure an entered IP is valid. """
if not ip: return False
ipNumbers = ip.split('.')
if len(ipNumbers) < 4:
if not IsValidIPv4(ip):
if not IsValidIPv6(ip):
return False
return True
for number in ipNumbers:
if not number.isdigit() or int(number) > 255:
def IsValidIPv4(ip):
''' Make sure an entered IP is a valid IPv4. '''
try:
socket.inet_pton(socket.AF_INET, ip)
except (TypeError, socket.error):
return False
return True
return ipNumbers
def IsValidIPv6(ip):
''' Make sure an entered IP is a valid IPv6. '''
try:
socket.inet_pton(socket.AF_INET6, ip)
except (TypeError, socket.error):
return False
return True
def PromptToStartDaemon():
""" Prompt the user to start the daemon """