diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/completion/list_consoles.sh | 4 | ||||
| -rwxr-xr-x | src/conf_mode/service_console-server.py | 7 | ||||
| -rwxr-xr-x | src/op_mode/nat.py | 11 | 
3 files changed, 19 insertions, 3 deletions
| diff --git a/src/completion/list_consoles.sh b/src/completion/list_consoles.sh new file mode 100755 index 000000000..52278c4cb --- /dev/null +++ b/src/completion/list_consoles.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# For lines like `aliases "foo";`, regex matches everything between the quotes +grep -oP '(?<=aliases ").+(?=";)' /run/conserver/conserver.cf
\ No newline at end of file diff --git a/src/conf_mode/service_console-server.py b/src/conf_mode/service_console-server.py index a2e411e49..ee4fe42ab 100755 --- a/src/conf_mode/service_console-server.py +++ b/src/conf_mode/service_console-server.py @@ -61,6 +61,7 @@ def verify(proxy):      if not proxy:          return None +    aliases = []      processes = process_iter(['name', 'cmdline'])      if 'device' in proxy:          for device, device_config in proxy['device'].items(): @@ -75,6 +76,12 @@ def verify(proxy):              if 'ssh' in device_config and 'port' not in device_config['ssh']:                  raise ConfigError(f'Port "{device}" requires SSH port to be set!') +            if 'alias' in device_config: +                if device_config['alias'] in aliases: +                    raise ConfigError("Console aliases must be unique") +                else: +                    aliases.append(device_config['alias']) +      return None  def generate(proxy): diff --git a/src/op_mode/nat.py b/src/op_mode/nat.py index a0496dedb..845dbbb2c 100755 --- a/src/op_mode/nat.py +++ b/src/op_mode/nat.py @@ -109,7 +109,7 @@ def _get_formatted_output_rules(data, direction, family):                  if jmespath.search('rule.expr[*].match.left.meta', rule) else 'any'          for index, match in enumerate(jmespath.search('rule.expr[*].match', rule)):              if 'payload' in match['left']: -                if 'prefix' in match['right'] or 'set' in match['right']: +                if isinstance(match['right'], dict) and ('prefix' in match['right'] or 'set' in match['right']):                      # Merge dict src/dst l3_l4 parameters                      my_dict = {**match['left']['payload'], **match['right']}                      my_dict['op'] = match['op'] @@ -136,10 +136,15 @@ def _get_formatted_output_rules(data, direction, family):                              dport = my_dict.get('set')                              dport = ','.join(map(str, dport))                  else: -                    if jmespath.search('left.payload.field', match) == 'saddr': +                    field = jmespath.search('left.payload.field', match) +                    if field == 'saddr':                          saddr = match.get('right') -                    if jmespath.search('left.payload.field', match) == 'daddr': +                    elif field == 'daddr':                          daddr = match.get('right') +                    elif field == 'sport': +                        sport = match.get('right') +                    elif field == 'dport': +                        dport = match.get('right')              else:                  saddr = '::/0' if family == 'inet6' else '0.0.0.0/0'                  daddr = '::/0' if family == 'inet6' else '0.0.0.0/0' | 
