M | |
make_value, Erlang | |
map_format, Automaster | |
map_generic, Automaster | |
map_ldap, Automaster | |
map_ldap_name, Automaster | |
map_line, Grub | |
map_mount, Automaster | |
map_name | |
map_type, Automaster | |
menu_setting, Grub | |
method, Pg_Hba | |
minute, Cron | |
modpath, Solaris_System | |
module_line, Grub | |
month, Cron | |
mount_max, Fuse | |
multi_empty, Up2date | |
multi_entry, Up2date | |
multi_single, Up2date | |
multi_value, Up2date | |
multi_values, Up2date | |
multiboot_arg, Grub | |
N | |
name, Automaster | |
name_re, AptConf | |
name_re_colons, AptConf | |
named_block | |
named_block_arg, Keepalived | |
named_block_arg_title, Keepalived | |
nameserver, Resolv | |
negate_node, Sudoers | |
netgroup, Access | |
netmask, Resolv | |
nexthop, Postfix_Transport | |
nexthop_smtp, Postfix_Transport | |
no_colon, Channels | |
no_semicolon, Channels | |
nocull, Cachefilesd | |
number, Postgresql | |
O | |
opt_eol, Keepalived | |
opt_list | |
opt_ws, Grub | |
option | |
options | |
origin_list, Access | |
P | |
param, NagiosConfig | |
param_def, NagiosConfig | |
parameter, Sudoers | |
parameter_flag, Sudoers | |
parameter_integer, Sudoers | |
parameter_list, Sudoers | |
parameter_lists, Sudoers | |
parameter_string, Sudoers | |
parameters, Rabbitmq | |
password_arg, Grub | |
path | |
period, Anacron | |
period_name, Anacron | |
plus, Channels | |
port, Services | |
prefixlen, Keepalived | |
program, Syslog | |
programs, Syslog | |
protocol, Services |
Make a “value” subnode for arrays/tuples
let make_value (lns:lens) = [ label "value" . lns ]
let map_format = [ label "format" . store format ]
Used for all except LDAP maps which are parsed further
let map_generic = ( map_type . ( Sep.comma . map_format )? . Sep.colon )? . map_name
let map_ldap = [ label "type" . store "ldap" ] . ( Sep.comma . map_format )? . Sep.colon . map_ldap_name
Split up host:dc=foo into host/map nodes
let map_ldap_name = ( [ label "host" . store host ] . Sep.colon )? . [ label "map" . store dn ]
let map_line = [ command "map" "\t" . spc . [ label "from" . store /[()A-za-z0-9]+/ ] . spc . [ label "to" . store /[()A-za-z0-9]+/ ] . eol ]
Mountpoint and whitespace, followed by the map info
let map_mount = [ seq "map" . store mount . Util.del_ws_tab . ( map_generic | map_ldap ) . ( Util.del_ws_spc . comma_sep_list "opt" )? . Util.eol ]
let map_name = [ label "map" . store name ]
let map_name = /[^: \t\n]+/
let map_type = [ label "type" . store type ]
let menu_setting = kw_menu_arg "default" | kw_menu_arg "fallback" | kw_pres "hiddenmenu" | kw_menu_arg "timeout" | kw_menu_arg "splashimage" | kw_menu_arg "gfxmenu" | kw_menu_arg "background" | serial | terminal | password_arg | color | device
can contain an option
let method = [ label "method" . store /[A-Za-z][A-Za-z0-9]+/ . ( Sep.tab . option )* ]
let minute = [ label "minute" . store num ]
Individual moddir search path entry
let modpath = [ seq "modpath" . store /[^ :\t\n]+/ ]
Solaris extension adds module$ and kernel$ for variable interpolation
let module_line = [ command /module\$?/ "\t" . spc . kernel_args ]
let month = [ label "month" . store alphanum ]
let mount_max = Build.key_value_line "mount_max" equal (store Rx.integer)
key=;
let multi_empty = sep_semi
List settings go under a ‘values’ node
let multi_entry = [ label "values" . counter "multi" . ( multi_single | multi_values | multi_empty ) ]
key=foo; (parsed as a list)
let multi_single = multi_value . sep_semi
One value in a list setting
let multi_value = [ seq "multi" . store value_re ]
key=foo;bar key=foo;bar;
let multi_values = multi_value . ( sep_semi . multi_value )+ . del /;?/ ";"
Permits a second form for Solaris multiboot kernels that take a path (with a slash) as their first arg, e.g.
let multiboot_arg = [ label "@path" . store (Rx.word . "/" . Rx.no_spaces) ]
let name = /[^: \t\n]+/
Regex for entry names
let name_re = /[A-Za-z][A-Za-z-]*/
Regex for entry names with colons
let name_re_colons = /[A-Za-z][A-Za-z:-]*/
A named block enclosed in brackets
let named_block (kw:regexp) (entry:lens) = [ key kw . block entry . eol ]
A block with a block title and name
let named_block (kw:string) (sto:lens) = lens_block (key kw . sep_spc . sto_word) sto
The named block used for testing
let named_block = Build.named_block "foo" block_entry
A block with a block title, a name and an argument
let named_block_arg (kw:string) (name:string) (arg:string) (sto:lens) = lens_block (named_block_arg_title kw name arg) sto
A title lens for named_block_arg
let named_block_arg_title (kw:string) (name:string) (arg:string) = key kw . sep_spc . [ label name . sto_word ] . sep_spc . [ label arg . sto_word ]
A nameserver entry
let nameserver = Build.key_value_line_comment "nameserver" Sep.space (store Rx.ip) comment_eol
Negation of boolean values for defaults.
let negate_node = [ del "!" "!" . label "negate" ]
Format is @NETGROUP[@@NISDOMAIN]
let netgroup = [ label "netgroup" . Util.del_str "@" . store user_re . [ label "nisdomain" . Util.del_str "@@" . store Rx.word ]? ]
A network mask for IP addresses
let netmask = [ label "netmask" . Util.del_str "/" . store Rx.ip ]
let nexthop = let host_re = "[" . Rx.word . "]" | /[A-Za-z]([^\n]*[^ \t\n])?/ in [ label "nexthop" . (store host_re)? ]
let nexthop_smtp = let host_re = "[" . Rx.word . "]" | Rx.word in [ label "host" . store host_re ] . colon . [ label "port" . store Rx.integer ]
let no_colon = /[^: \t\n][^:\n]*[^: \t\n]|[^:\n]/
let no_semicolon = /[^;\n]+/
The nocull key has different syntax than the rest
let nocull = /nocull/i
Storing number_re, with or without quotes
let number = Quote.do_squote_opt (store number_re)
let opt_eol = del /[ \t]*\n?/ " "
Same as list, but there might be only one element in the list
let opt_list (lns:lens) (sep:lens) = lns . ( sep . lns )*
An optional list of elements, in square brackets
let opt_list (lns:lens) = rspace lbrack . Build.opt_list lns (lrspace comma) . lspace rbrack
let opt_list = Build.opt_list [ key Rx.word ] Sep.space
let opt_ws = Util.del_opt_ws ""
A key option
let option = let kv_re = "command" | "environment" | "from" | "permitopen" | "principals" | "tunnel" in let flag_re = "cert-authority" | "no-agent-forwarding" | "no-port-forwarding" | "no-pty" | "no-user-rc" | "no-X11-forwarding" in let option_value = Util.del_str "\"" . store /[^\n"]+/ . Util.del_str "\"" in Build.key_value kv_re Sep.equal option_value | Build.flag flag_re
Optional extensions defined in hosts_options(5)
let option = [ key option_kw . ( del /([ \t]*=[ \t]*|[ \t]+)/ " " . sto_to_colon )? ]
part of method
let option = let value_start = label "value" . Sep.equal in [ label "option" . store Rx.word . (Quote.quote_spaces value_start)? ]
let option = [ indent . del /[oO]ption/ "Option" . label "Option" . sep_spc . quoted_string_val . [ label "value" . sep_spc . quoted_string_val ]* . eol ]
let options = let opt_value = /[^#" \t\n\\\\]+|"[^#"\n\\\\]*"/ in let option = [ key Rx.word . (del /[ \t]*=[ \t]*/ "=" . store opt_value)? ] in [ key "options" . sep_space . sto_no_spaces . (sep_space . option)* . Util.comment_or_eol ]
Options values
let options = let options_entry = Build.key_value ("ndots"|"timeout"|"attempts") (Util.del_str ":") (store Rx.integer) | Build.flag ("debug"|"rotate"|"no-check-names" |"inet6"|"ip6-bytestring"|"edns0" |"single-request-reopen") | ip6_dotint in Build.key_value_line_comment "options" Sep.space (Build.opt_list options_entry Sep.space) comment_eol
origin_list can be a single ipaddr/originname/domain/fqdn or a list of those values
let origin_list = let origin_re = Rx.no_spaces - /[Ee][Xx][Cc][Ee][Pp][Tt]/ in Build.opt_list [ label "origin" . store origin_re ] Sep.space
Params can have sub params
let param = [ Util.indent . param_def . [ Sep.space . param_def ]* . Util.eol ]
define a field
let param_def = let space_in = /[^ \t\n][^\n=]*[^ \t\n]|[^ \t\n]/ in key /[A-Za-z0-9_]+/ . Sep.space_equal . store space_in
A single parameter for defaults
let parameter = parameter_flag | parameter_integer | parameter_string | parameter_lists
A flag parameter for defaults
let parameter_flag_kw = "always_set_home" | "authenticate" | "env_editor" | "env_reset" | "fqdn" | "ignore_dot" | "ignore_local_sudoers" | "insults" | "log_host" | "log_year" | "long_otp_prompt" | "mail_always" | "mail_badpass" | "mail_no_host" | "mail_no_perms" | "mail_no_user" | "noexec" | "path_info" | "passprompt_override" | "preserve_groups" | "requiretty" | "root_sudo" | "rootpw" | "runaspw" | "set_home" | "set_logname" | "setenv" | "shell_noargs" | "stay_setuid" | "targetpw" | "tty_tickets" | "visiblepw" | "closefrom_override" | "closefrom_override" | "compress_io" | "fast_glob" | "log_input" | "log_output" | "pwfeedback" | "umask_override" | "use_pty"
An integer parameter for defaults
let parameter_integer_nobool_kw = "passwd_tries"
A list of comma-separated parameters for defaults
let parameter_list = parameter . ( sep_com . parameter )*
A single list parameter for defaults
let parameter_lists_kw = "env_check" | "env_delete" | "env_keep"
A string parameter for defaults
let parameter_string_nobool_kw = "badpass_message" | "editor" | "mailsub" | "noexec_file" | "passprompt" | "runas_default" | "syslog_badpri" | "syslog_goodpri" | "timestampdir" | "timestampowner" | "secure_path"
Top-level parameters for the lens
let parameters = listeners | ssl_options | disk_free_limit | log_levels | Erlang.value "vm_memory_high_watermark" Erlang.decimal | Erlang.value "frame_max" Erlang.integer | Erlang.value "heartbeat" Erlang.integer | Erlang.value /default_(vhost|user|pass)/ Erlang.glob | Erlang.value_list "default_user_tags" Erlang.bare | Erlang.value_list "default_permissions" Erlang.glob | cluster_nodes | Erlang.value_list "server_properties" Erlang.bare | Erlang.value "collect_statistics" Erlang.bare | Erlang.value "collect_statistics_interval" Erlang.integer | Erlang.value_list "auth_mechanisms" Erlang.quoted | Erlang.value_list "auth_backends" Erlang.bare | Erlang.value "delegate_count" Erlang.integer | Erlang.value_list "trace_vhosts" Erlang.bare | tcp_listen_options | Erlang.value "hipe_compile" Erlang.boolean | Erlang.value "msg_store_index_module" Erlang.bare | Erlang.value "backing_queue_module" Erlang.bare | Erlang.value "msg_store_file_size_limit" Erlang.integer | Erlang.value "queue_index_max_ journal_entries" Erlang.integer
let password_arg = [ key "password" . (spc . [ switch "md5" ])? . (spc . [ switch "encrypted" ])? . spc . store (/[^ \t\n]+/ - /--[^ \t\n]+/) . (spc . [ label "file" . store /[^ \t\n]+/ ])? . eol ]
let path = /[^-+#: \t\n][^#: \t\n]*/
Store a path (quoted)
let path = quoted
let path = [ label "path" . store /[^# \t\n][^ \t\n]*/ . Util.eol ]
let period = [ label "period" . store Rx.integer ]
In the format “@keyword”
let period_name = [ label "period_name" . Util.del_str "@" . store period_name_re ]
let plus = Util.del_str "+"
let port = [ label "port" . store num_re ]
A prefix for IP addresses
let prefixlen = [ label "prefixlen" . Util.del_str "/" . sto_num ]
a program begins with an optional hash, a bang, and an optional + or -
let program = [ label "program" . opt_hash . bang . ( opt_plus | [ Build.xchgs "-" "reverse" ] ) . programs . eol . entries ]
a list of programs
let programs = label_opt_list_or "program" (store word) comma "*"
let protocol = [ label "protocol" . store protocol_re ]