diff options
| -rw-r--r-- | interface-definitions/include/policy/extended-community-value-list.xml.i | 2 | ||||
| -rwxr-xr-x | src/validators/bgp-extended-community | 51 | 
2 files changed, 26 insertions, 27 deletions
| diff --git a/interface-definitions/include/policy/extended-community-value-list.xml.i b/interface-definitions/include/policy/extended-community-value-list.xml.i index c79f78c67..33a279be1 100644 --- a/interface-definitions/include/policy/extended-community-value-list.xml.i +++ b/interface-definitions/include/policy/extended-community-value-list.xml.i @@ -12,4 +12,4 @@  </constraint>  <constraintErrorMessage>Should be in form: ASN:NN or IPADDR:NN where ASN is autonomous system number</constraintErrorMessage>  <multi/> -        <!-- include end --> +<!-- include end --> diff --git a/src/validators/bgp-extended-community b/src/validators/bgp-extended-community index b69ae3449..d66665519 100755 --- a/src/validators/bgp-extended-community +++ b/src/validators/bgp-extended-community @@ -1,6 +1,6 @@  #!/usr/bin/env python3 -# Copyright 2019-2022 VyOS maintainers and contributors <maintainers@vyos.io> +# Copyright 2019-2023 VyOS maintainers and contributors <maintainers@vyos.io>  #  # This library is free software; you can redistribute it and/or  # modify it under the terms of the GNU Lesser General Public @@ -28,28 +28,27 @@ if __name__ == '__main__':      parser: ArgumentParser = ArgumentParser()      parser.add_argument('community', type=str)      args = parser.parse_args() -    community: str = args.community -    if community.count(':') != 1: -        print("Invalid community format") -        exit(1) -    try: -        # try to extract community parts from an argument -        comm_left: str = community.split(':')[0] -        comm_right: int = int(community.split(':')[1]) - -        # check if left part is an IPv4 address -        if is_ipv4(comm_left) and 0 <= comm_right <= COMM_MAX_2_OCTET: -            exit() -        # check if a left part is a number -        if 0 <= int(comm_left) <= COMM_MAX_2_OCTET \ -                and 0 <= comm_right <= COMM_MAX_4_OCTET: -            exit() - -    except Exception: -        # fail if something was wrong -        print("Invalid community format") -        exit(1) - -    # fail if none of validators catched the value -    print("Invalid community format") -    exit(1)
\ No newline at end of file + +    for community in args.community.split(): +        if community.count(':') != 1: +            print("Invalid community format") +            exit(1) +        try: +            # try to extract community parts from an argument +            comm_left: str = community.split(':')[0] +            comm_right: int = int(community.split(':')[1]) + +            # check if left part is an IPv4 address +            if is_ipv4(comm_left) and 0 <= comm_right <= COMM_MAX_2_OCTET: +                continue +            # check if a left part is a number +            if 0 <= int(comm_left) <= COMM_MAX_2_OCTET \ +                    and 0 <= comm_right <= COMM_MAX_4_OCTET: +                continue + +            raise Exception() + +        except Exception: +            # fail if something was wrong +            print("Invalid community format") +            exit(1)
\ No newline at end of file | 
