def _get_rule_from_dialog(self): action = self._get_combobox_value('action_cbox').lower() if self.ui.protocol_cbox.get_sensitive(): protocol = self._get_combobox_value('protocol_cbox').lower() else: protocol = 'any' rule = UFWRule(action, protocol) # position pos = self.ui.position_adjustment.get_value() rule.set_position(pos) # direction direction = ('in' if self.ui.in_rbutton.get_active() else 'out') rule.set_direction(direction) # logtype log_map = {'Off': '', 'New Connections': 'log', 'Packets': 'log-all'} logtype = log_map[self._get_combobox_value('rule_logging_cbox')] rule.set_logtype(logtype) # src if self.ui.src_addr_custom_rbutton.get_active(): addr = self.ui.src_addr_custom_entry.get_text() rule.set_src(addr) # src port port = gfw.util.ANY_PORT if self.ui.src_port_custom_rbutton.get_active(): port = self.ui.src_port_custom_entry.get_text() elif self.ui.src_app_rbutton.get_active(): port = self._get_combobox_value('src_app_cbox') rule.sapp = port rule.set_port(port, 'src') # dst if self.ui.dst_addr_custom_rbutton.get_active(): addr = self.ui.dst_addr_custom_entry.get_text() rule.set_dst(addr) # dst port port = gfw.util.ANY_PORT if self.ui.dst_port_custom_rbutton.get_active(): port = self.ui.dst_port_custom_entry.get_text() elif self.ui.dst_app_rbutton.get_active(): port = self._get_combobox_value('dst_app_cbox') rule.dapp = port rule.set_port(port, 'dst') return rule
def _read_rules(self): '''Read in rules that were added by ufw''' rfns = [self.files['rules']] if self.use_ipv6(): rfns.append(self.files['rules6']) for f in rfns: try: orig = ufw.util.open_file_read(f) except Exception: err_msg = _("Couldn't open '%s' for reading") % (f) raise UFWError(err_msg) pat_tuple = re.compile(r'^### tuple ###\s*') for line in orig: if pat_tuple.match(line): tupl = pat_tuple.sub('', line) tmp = re.split(r'\s+', tupl.strip()) if len(tmp) < 6 or len(tmp) > 9: wmsg = _("Skipping malformed tuple (bad length): %s") \ % (tupl) warn(wmsg) continue else: # set direction to "in" to support upgrades # from old format, which only had 6 or 8 fields dtype = "in" interface = "" if len(tmp) == 7 or len(tmp) == 9: if '_' in tmp[-1]: (dtype, interface) = tmp[-1].split('_') else: dtype = tmp[-1] try: if len(tmp) < 8: rule = UFWRule(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5], dtype) else: rule = UFWRule(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5], dtype) # Removed leading [sd]app_ and unescape spaces pat_space = re.compile('%20') if tmp[6] != "-": rule.dapp = pat_space.sub(' ', tmp[6]) if tmp[7] != "-": rule.sapp = pat_space.sub(' ', tmp[7]) if interface != "": rule.set_interface(dtype, interface) except UFWError: warn_msg = _("Skipping malformed tuple: %s") % \ (tupl) warn(warn_msg) continue if f == self.files['rules6']: rule.set_v6(True) self.rules6.append(rule) else: rule.set_v6(False) self.rules.append(rule) orig.close()