# [ 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')
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()
# 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')
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)
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)