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 - - - - +