Example #1
0
#       [ dscp <dscp_port> ]
#       ;
server_stmt_notify_source_v6 = (
    Keyword('notify-source-v6')
    + Group(
        ip6_addr_or_wildcard('addr')
        + Optional(inet_ip_port_keyword_and_wildcard_element)
        + Optional(inet_dscp_port_keyword_and_number_element)
    )('notify_source_v6')
    + semicolon
)

#   padding <number>;  # [ server ]
server_stmt_padding = (
    Keyword('padding')
    + number_type('padding')
    + semicolon
)

#   query-source (
#                  [ address ]    # 'address' keyword is optional here
#                  ( ip4_addr | * )
#                  [ ( port <ip_port> | * ) ]
#                  [ dscp <dscp_port> ]
#                )
#                ;
server_stmt_query_source = (
    Keyword('query-source')
    + Group(
        (  # match-first
            ip4_addr_or_wildcard('ip4_addr_w')
Example #2
0
    Keyword('hostname-statistics').suppress()
    - isc_boolean('hostname_stiatistics')
    + semicolon
)

# hostname-statistics-max <number>; [ Opt ]  #  v8.1+, still inert
options_stmt_hostname_statistics_max = (
    Keyword('hostname-statistics-max').suppress()
    - isc_boolean('hostname_stiatistics_max')
    + semicolon
)

# interface-interval number;
options_stmt_interface_interval = (
    Keyword('interface-interval').suppress()
    - number_type('interface_interval')
    + semicolon
)

#   listen-on [ port ip_port ] { address_match_nosemicolon }; [Opt, lwres ]
options_stmt_listen_on = (
        Keyword('listen-on').suppress()
        + Group(
            Optional(inet_ip_port_keyword_and_number_element)
            - aml_nesting
        )
)('listen_on')

#   listen-on-v6 [ port ip_port ] { address_match_nosemicolon }; [ Opt ]
options_stmt_listen_on_v6 = (
        Keyword('listen-on-v6').suppress()
Example #3
0
# keyname_dquoted.setName('keyname_dquoted')

trusted_keyname_squoted = Combine(
        Literal("'").suppress()
        - trusted_keyname_type
        + Literal("'").suppress()
)
# keyname_dquoted.setName('keyname_squoted')

trusted_key_domain_name = Group(
    trusted_keyname_dquoted
    | trusted_keyname_squoted
    | trusted_keyname_type
)

trusted_key_flags_type = number_type('flags')
trusted_key_flags_type.setName('<key-flags-id>')

trusted_key_protocol_type = number_type('protocol_id')
trusted_key_protocol_type.setName('<key-protocol-id>')

trusted_key_algorithm_name = Word(alphanums + '-')('algorithm')
trusted_key_algorithm_name.setName('<key-algorithm>')

trusted_key_algorithm_type = number_type('algorithm_id')
trusted_key_algorithm_type.setName('<key-algorithm-id>')


# Secret are in base64 encoding scheme with 2-char paddings (RFC 1421)
# Handles up to 16K encoding
charset_key_secret_base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
#      ( ip46_addr_or_prefix | * ) [ port ( ip_port | * ) ]
#      allow { <aml>; }
#      [ keys { key_id; [ ... ] } ]
#      [ read-only <boolean> ]
#      ;
controls_inet_set = Group(
    Keyword('inet').suppress() + controls_inet_addr_and_port(None) -
    controls_inet_allow_element(None) + Optional(controls_keys_element) +
    Optional(controls_inet_read_only_element) + semicolon)('inet')

controls_unix_set = (
    Group(
        Keyword('unix').suppress() + (
            quoted_path_name('path_name') + Literal('perm').suppress() +
            number_type(
                'perm'
            )  # TODO Check if 'controls unix perm/owner/group is numeric-only or not
            + Literal('owner').suppress() + number_type('uid') +
            Literal('group').suppress() + number_type('gid') -
            Optional(controls_keys_element) -
            Optional(controls_inet_read_only_element) + semicolon))('unix'))

clause_stmt_control_standalone = (
    Keyword('controls').suppress() + lbrack + Group(
        OneOrMore(
            Group(controls_inet_set('inet'))
            | Group(controls_unix_set('unix'))))('controls')  # ('controls')
    + rbrack + semicolon)

clause_stmt_control_series = (ZeroOrMore(clause_stmt_control_standalone))
#        )
#      [ severity ( critical | error | warning | notice
#                   info | debug [ <level> ] | dynamic ); ]
#      [ print-category <boolean>; ]
#      [ print-severity <boolean>; ]
#      [ print-time ( iso8601 | iso8601-utc | local | <boolean>) ;  ]
#    }; ]
#    [ category category_name {
#      channel_name ; [ channel_name ; ... ]
#    }; ]
#    ...
# }

logging_chan_file_path_version_element = (Keyword('versions').suppress() -
                                          (Literal('unlimited')
                                           | number_type(''))('versions'))

logging_chan_file_path_size_element = (Literal('size').suppress() -
                                       size_spec('size_spec'))

logging_chan_file_path_element = (
    Keyword('file').suppress() - quoted_path_name('path_name')('path_name') -
    Optional(logging_chan_file_path_version_element) -
    Optional(logging_chan_file_path_size_element))

logging_chan_syslog_facility_name = (Literal('kern')
                                     | Literal('user')
                                     | Literal('mail')
                                     | Literal('daemon')
                                     | Literal('auth')
                                     | Literal('syslog')
Example #6
0
File: isc_optviewserver.py

Clause: options

Title: Statements Used Only By options, view, And server Clauses.

Description: Provides 'options' and 'server'-related grammar in
             PyParsing engine for ISC-configuration style
"""
from pyparsing import ZeroOrMore, Keyword, Literal
from bind9_parser.isc_utils import semicolon, isc_boolean, number_type

#  edns-udp-size <number>;  # [ server ]
optviewserver_stmt_edns_udp_size = (
    Keyword('edns-udp-size') -
    number_type('edns_udp_size')  # valid range is 512-4096
    + semicolon)

#  provide-ixfr ( yes | no) ; [ Opt, View, server ]
optviewserver_stmt_provide_ixfr = (Keyword('provide-ixfr') -
                                   isc_boolean('provide_ixfr') + semicolon)

#  request-ixfr <boolean>;  # [ server ]  # v9.1.0+
optviewserver_stmt_request_ixfr = (Keyword('request-ixfr') +
                                   isc_boolean('request_ixfr') + semicolon)

#  transfer-format ( 'one-answer' | 'many-answers' )  # [ server ]
optviewserver_stmt_transfer_format = (
    Keyword('transfer-format') +
    (Literal('one-answer')
     | Literal('many-answers'))('transfer_format') + semicolon)
Example #7
0
optview_stmt_empty_contact = (
    Keyword('empty-contact').suppress() -
    Group(soa_name_type('soa_contact_name') + semicolon)(
        'empty_contact')  # Dict (not a multiple-statement)
)('')

optview_stmt_empty_zones_enable = (Keyword('empty-zones-enable').suppress() -
                                   isc_boolean('empty_zones_enable') +
                                   semicolon)

optview_stmt_fetch_glue = (Keyword('fetch-glue').suppress() -
                           isc_boolean('fetch_glue') + semicolon
                           )  # v8.1 to v9.7.0

optview_stmt_files = (Keyword('files').suppress() - Group(
    (ungroup(number_type(''))
     | Literal('unlimited')('')
     | Keyword('default'))('files_count'))('files') + semicolon)('')

optview_stmt_heartbeat_interval = (Keyword('heartbeat-interval').suppress() -
                                   minute_type('heartbeat_interval') +
                                   semicolon)

#  hostname ( none | quoted_fqdn );  # [ Opt View ]
optview_stmt_hostname = (Keyword('hostname').suppress() - Group(
    Literal('none')('none')
    | quoted_domain_generic_fqdn('hostname')('name')
    | domain_generic_fqdn('hostname')('name'))('hostname') + semicolon)

optview_stmt_lame_ttl = (Keyword('lame-ttl').suppress() -
                         number_type('lame_ttl') + semicolon)