diff --git a/newfwruledlg.ui b/newfwruledlg.ui
index 919771b..4190d2b 100644
--- a/newfwruledlg.ui
+++ b/newfwruledlg.ui
@@ -10,7 +10,7 @@
0
0
381
- 121
+ 193
@@ -19,78 +19,167 @@
true
-
-
-
- 10
- 80
- 361
- 32
-
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
-
-
-
-
-
- 10
- 14
- 62
- 17
-
-
-
- Address
-
-
-
-
-
- 10
- 44
- 61
- 21
-
-
-
- Service
-
-
-
-
-
- 70
- 40
- 301
- 27
-
-
-
- true
-
-
-
-
-
- 70
- 10
- 301
- 27
-
-
-
- true
-
-
+
+ -
+
+
+ 0
+
+
+ 0
+
+
+ 6
+
+
-
+
+
+ Protocol
+
+
+
+ -
+
+
+ Port
+
+
+
+ -
+
+
+ Service
+
+
+
+ -
+
+
+ true
+
+
+
+ -
+
+
+ Address
+
+
+
+ -
+
+
+ true
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ TCP
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ UDP
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 71
+ 0
+
+
+
+ Any
+
+
+ true
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+ Qt::ImhDigitsOnly
+
+
+ 5
+
+
+
+ -
+
+
+ false
+
+
+ Qt::ImhDigitsOnly
+
+
+ 5
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+
- addressComboBox
- serviceComboBox
buttonBox
diff --git a/qubesmanager/firewall.py b/qubesmanager/firewall.py
index 30f4f54..1b6db23 100644
--- a/qubesmanager/firewall.py
+++ b/qubesmanager/firewall.py
@@ -81,7 +81,7 @@ class NewFwRuleDlg (QDialog, ui_newfwruledlg.Ui_NewFwRuleDlg):
self.set_ok_enabled(False)
self.addressComboBox.setValidator(QIPAddressValidator())
self.addressComboBox.editTextChanged.connect(self.address_editing_finished)
- self.serviceComboBox.setValidator(QRegExpValidator(QRegExp("[a-z][a-z0-9-]+|[0-9]+(-[0-9]+)?", Qt.CaseInsensitive), None))
+ self.serviceComboBox.setValidator(QRegExpValidator(QRegExp("\*|[a-z][a-z0-9-]+|[0-9]+(-[0-9]+)?", Qt.CaseInsensitive), None))
self.serviceComboBox.setInsertPolicy(QComboBox.InsertAtBottom)
self.populate_combos()
@@ -115,6 +115,21 @@ class NewFwRuleDlg (QDialog, ui_newfwruledlg.Ui_NewFwRuleDlg):
if ok_button is not None:
ok_button.setEnabled(on)
+ def on_tcp_radio_toggled(self, checked):
+ self.tcp_port_lineedit.setEnabled(checked)
+ self.udp_port_lineedit.setEnabled(not checked)
+
+ def on_udp_radio_toggled(self, checked):
+ self.tcp_port_lineedit.setEnabled(not checked)
+ self.udp_port_lineedit.setEnabled(checked)
+
+ def on_any_radio_toggled(self, checked):
+ self.tcp_port_lineedit.setEnabled(not checked)
+ self.udp_port_lineedit.setEnabled(not checked)
+
+
+
+
class QubesFirewallRuleItem(object):
def __init__(self, address = str(), netmask = 32, portBegin = 0, portEnd = None):
self.__address = address
@@ -141,6 +156,8 @@ class QubesFirewallRuleItem(object):
def hasChildren(self):
return False
+
+
class QubesFirewallRulesModel(QAbstractItemModel):
def __init__(self, parent=None):
QAbstractItemModel.__init__(self, parent)
@@ -168,6 +185,16 @@ class QubesFirewallRulesModel(QAbstractItemModel):
self.__services.append( (service["name"], int(service["port"]), service["protocol"]) )
f.close()
+ def sort(self, idx, order):
+ from operator import attrgetter
+
+ rev = (order == Qt.AscendingOrder)
+ if idx==0:
+ self.children.sort(key=attrgetter('address'), reverse = rev)
+ if idx==1:
+ self.children.sort(key=lambda x: self.get_service_name(attrgetter('portBegin')) if attrgetter('portEnd') == None else attrgetter('portBegin'), reverse = rev)
+
+
def get_service_name(self, port):
for service in self.__services:
if service[1] == port:
diff --git a/qubesmanager/settings.py b/qubesmanager/settings.py
index 9ca2475..3f4d1f7 100644
--- a/qubesmanager/settings.py
+++ b/qubesmanager/settings.py
@@ -144,7 +144,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
thread_monitor.set_error_msg('\n'.join(ret))
thread_monitor.set_finished()
return
- #self.fw_model.apply_rules()
+ self.fw_model.apply_rules()
self.AppListManager.save_appmenu_select_changes()
thread_monitor.set_finished()
diff --git a/settingsdlg.ui b/settingsdlg.ui
index 99ece3d..2ad1399 100644
--- a/settingsdlg.ui
+++ b/settingsdlg.ui
@@ -29,7 +29,7 @@
- 5
+ 2
@@ -470,22 +470,48 @@
Firewall rules
-
- -
+
+
-
Allow network access except...
- -
+
-
+
+
+
+ 323
+ 0
+
+
+
+ Allow ICMP traffic
+
+
+ true
+
+
+
+ -
Deny network access except...
- -
+
-
+
+
+ Allow DNS queries
+
+
+ true
+
+
+
+ -
QLayout::SetMaximumSize
@@ -503,6 +529,9 @@
false
+
+ true
+
true
@@ -518,28 +547,7 @@
-
-
-
-
-
-
- Allow ICMP traffic
-
-
- true
-
-
-
- -
-
-
- Allow DNS queries
-
-
- true
-
-
-
-
+