C | |
cacheconfig, Cachefilesd | |
caid, Channels | |
chainloader, Grub | |
change_add, Ldif | |
change_control, Ldif | |
change_delete, Ldif | |
change_modify, Ldif | |
change_modrdn, Ldif | |
change_modspec, Ldif | |
change_record, Ldif | |
clear, AptConf | |
client, Hosts_Access | |
client_file, Hosts_Access | |
client_file_item, Hosts_Access | |
client_host_item, Hosts_Access | |
client_list, Hosts_Access | |
cluster_nodes, Rabbitmq | |
cmd_kv, Solaris_System | |
cmd_moddir, Solaris_System | |
cmd_set, Solaris_System | |
cmnd_alias, Sudoers | |
cmnd_spec, Sudoers | |
cmnd_spec_list, Sudoers | |
colon | |
color, Grub | |
comma | |
comma_sep_list | |
command | |
comment | |
comment_c_style, Util | |
comment_eol | |
comment_generic, Util | |
comment_generic_seteol, Util | |
comment_multi, AptConf | |
comment_multiline, Util | |
comment_noindent, Util | |
comment_or_eol | |
comment_re, Grub | |
comment_simple, AptConf | |
common_entry, Mke2fs | |
condition | |
condition_field, Reprepro_Uploaders | |
condition_list, Reprepro_Uploaders | |
condition_re, Reprepro_Uploaders | |
conf | |
config | |
configfile, Grub |
This is a simple “key value” setup
let cacheconfig = [ key (entry_key - nocull) . space . store entry_value . eol ]
let caid = let caid_entry = [ label "caid" . store Rx.word ] in Build.opt_list caid_entry comma
let chainloader = [ command "chainloader" "\t" . [ spc . switch "force" ]? . spc . store Rx.no_spaces . eol ]
change-add = “add” SEP 1*attrval-spec
let change_add = [ attr_changetype "add" ] . ( sep_line* . attr_val_spec )+
“control:” FILL ldap-oid 0*1(1*SPACE (“true” / “false”)) 0*1(value-spec)
let change_control = let attr_criticality = [ Util.del_ws_spc . label "criticality" . store /true|false/ ] in let attr_ctrlvalue = [ label "value" . (attr_safe_string | attr_base64_string | attr_url_string ) ] in [ key "control" . sep_colon . store ldapoid_re . attr_criticality? . attr_ctrlvalue? . eol ]
change-delete = “add” SEP 1*attrval-spec
let change_delete = [ attr_changetype "delete" ]
change-modify = “modify” SEP *mod-spec
let change_modify = [ attr_changetype "modify" ] . ( sep_line* . [ change_modspec . sep_line* . sep_modspec ] )+
(“modrdn” / “moddn”) SEP newrdn/newsuperior/deleteoldrdn
let change_modrdn = let attr_deleteoldrdn = [ key "deleteoldrdn" . attr_intflag . eol ] in let attrs_modrdn = attr_dn_value "newrdn" | attr_dn_value "newsuperior" | attr_deleteoldrdn in [ attr_changetype /modr?dn/ ] . ( sep_line | attrs_modrdn )* . attrs_modrdn
change-modspec = add/delete/replace: AttributeDesc SEP *attrval-spec “-”
let change_modspec = attr_modspec . ( sep_line* . attr_val_spec )*
changerecord = “changetype:” FILL (changeadd/delete/modify/moddn)
let change_record = ( change_add | change_delete | change_modify | change_modrdn)
A list of variables to clear /!\ The manpage is not clear on the syntax
let clear = let name = [ label "name" . store name_re_colons ] in [ indent . key "#clear" . Sep.space . Build.opt_list name Sep.space . eol ]
let client = let user = [ label "user" . list_item . Util.del_str "@" ] in [ label "client" . user? . client_host_item ]
let client_file = [ label "file" . client_file_item ]
let client_file_item = let client_file_rx = /\/[^ \t\n,:]+/ in store ( client_file_rx - /EXCEPT/i )
Allows @ for netgroups, supports [ipv6] syntax
let client_host_item = let client_hostname_rx = /[A-Za-z0-9_.@?*-][A-Za-z0-9_.?*-]*/ in let client_ipv6_rx = "[" . /[A-Za-z0-9:?*%]+/ . "]" in let client_host_rx = client_hostname_rx | client_ipv6_rx in let netmask = [ Util.del_str "/" . label "netmask" . store Rx.word ] in store ( client_host_rx - /EXCEPT/i ) . netmask?
A list of clients
let client_list = Build.opt_list ( client | client_file ) list_sep
Can be a tuple `(nodes, node_type)` or simple `nodes`
let cluster_nodes = let nodes = Erlang.opt_list (Erlang.make_value Erlang.quoted) in let value = Erlang.tuple nodes Erlang.bare | nodes in Erlang.value "cluster_nodes" value
Function for simple key/value setting commands such as rootfs
let cmd_kv (cmd:string) (value:regexp) = Build.key_value_line cmd sep_colon (store value)
The moddir command for specifying module search paths
let cmd_moddir = Build.key_value_line "moddir" sep_colon (Build.opt_list modpath sep_moddir)
The set command for individual kernel/module parameters
let cmd_set = [ key "set" . Util.del_ws_spc . ( set_var | set_varmod ) . set_sep_spc . [ label "operator" . store set_operators ] . set_sep_spc . set_value . Util.eol ]
Cmnd_Alias, see alias_field
let cmnd_alias = alias_entry "Cmnd_Alias" "command" sto_to_com_cmnd
Command specification for spec, with optional runas_spec and any amount of tag_specs
let cmnd_spec = [ label "command" . runas_spec? . tag_spec* . sto_to_com_cmnd ]
A list of comma-separated cmnd_specs
let cmnd_spec_list = Build.opt_list cmnd_spec sep_com
Separation between the alias and it’s destinations
let colon = del /[ \t]*:[ \t]+/ ":\t"
Separation between selinux attributes
let colon = Sep.colon
let colon = Sep.colon
let colon = del /[ \t]*(\\\\[ \t]*\n[ \t]+)?:[ \t]*(\\\\[ \t]*\n[ \t]+)?/ ": "
let colon = Sep.colon
let color =
Separation between multiple destinations
let comma = del /[ \t]*,[ \t]*(\n[ \t]+)?/ ", "
let comma = Sep.comma
let comma = space_or_eol "," ", "
A comma separated list of options (opt=value or opt)
let comma_sep_list (l:string) = let value = [ label "value" . Util.del_str "=" . store optval ] in let lns = [ label l . store word . value? ] in Build.opt_list lns comma
Parses options either for filesystems or autofs
let comma_sep_list (l:string) = let value = [ label "value" . Util.del_str "=" . store Rx.neg1 ] in let lns = [ label l . store optlabel . value? ] in Build.opt_list lns Sep.comma
Parses options for filesystems
let comma_sep_list (l:string) = let value = [ label "value" . Util.del_str "=" . store Rx.neg1 ] in let lns = [ label l . store optlabel . value? ] in Build.opt_list lns Sep.comma
let command (kw:regexp) (indent:string) = Util.del_opt_ws indent . key kw
nrpe.cfg usually has many entries defining commands to run
let command = let obrkt = del /\[/ "[" in let cbrkt = del /\]/ "]" in [ key "command" . [ obrkt . key /[^]\/\n]+/ . cbrkt . eq . store /[^\n]+/ . del /\n/ "\n" ] ]
let comment = Util.comment
let comment = [ indent . label "#comment" . del /[#;][ \t]*/ "# " . store /([^ \t\n].*[^ \t\n]|[^ \t\n])/ . eol ]
let comment = IniFile.comment IniFile.comment_re IniFile.comment_default
A comment, either comment_simple or comment_multi
let comment = comment_simple | comment_multi
let comment = Util.comment
let comment = Util.comment
let comment = Util.comment_generic /;[ \t]*/ "; "
let comment = Util.comment_generic /%[ \t]*/ "% "
let comment = [ Util.indent . label "#comment" . del /#[ \t]*/ "# " . store comment_re . eol ]
Map comments into “#comment” nodes
let comment (pat:regexp) (default:string) = [ label "#comment" . sep pat default . sto_to_eol? . eol ]
Map comments in “#comment” nodes
let comment = Util.comment_generic /[ \t]*[#!][ \t]*/ "# "
let comment = Util.comment_generic /#[ \t]*/ "# "
let comment = IniFile.comment IniFile.comment_re IniFile.comment_default
let comment = Util.comment
let comment = Util.comment
Nrpe comments must start at beginning of line
let comment = Util.comment_generic /#[ \t]*/ "# "
let comment = Util.comment
let comment = Util.comment_generic /[ \t]*[;#][ \t]*/ "# "
An IniFile.comment entry
let comment = IniFile.comment "#" "#"
let comment = Util.comment_generic /[ \t]*\*[ \t]*/ "* "
let comment = IniFile.comment_noindent "#" "#"
Map comments in “#comment” nodes
let comment = let sto_to_eol = store (/([^ \t\n].*[^ \t\n]|[^ \t\n])/ - /include(dir)?.*/) in [ label "#comment" . del /[ \t]*#[ \t]*/ "# " . sto_to_eol . eol ]
let comment = Util.comment_generic /[ \t]*[#;][ \t]*/ "# "
Map comments into “#comment” nodes Can’t use Util.comment as #+ and #!
let comment = [ label "#comment" . del /#[ \t]*/ "# " . store /([^ \t\n+!-].*[^ \t\n]|[^ \t\n+!-])/ . eol ]
An IniFile.comment entry
let comment = IniFile.comment IniFile.comment_re "#"
Map comments into “#comment” nodes
let comment = comment_generic /[ \t]*#[ \t]*/ "# "
A comment line, C-style
let comment_c_style = comment_generic /[ \t]*\/\/[ \t]*/ "// "
Map comments at eol
let comment_eol = Util.comment_generic /[ \t]*[#!][ \t]*/ " # "
let comment_eol = Util.comment_generic /[ \t]*[;#][ \t]*/ " # "
Requires a space before the #
let comment_eol = Util.comment_generic /[ \t]+#[ \t]*/ " # "
Map eol comments into “#comment” nodes Add a space before # for end of line comments
let comment_eol = comment_generic /[ \t]*#[ \t]*/ " # "
Map comments and set default comment sign
let comment_generic (r:regexp) (d:string) = comment_generic_seteol r d doseol
Map comments and set default comment sign
let comment_generic_seteol (r:regexp) (d:string) (eol:lens) = [ label "#comment" . del r d . store /([^ \t\r\n].*[^ \t\r\n]|[^ \t\r\n])/ . eol ]
A multiline comment, C-style
let comment_multi = Util.comment_multiline
A C-style multiline comment
let comment_multiline = let mline_re = (/[^ \t\r\n].*[^ \t\r\n]|[^ \t\r\n]/ - /.*\*\/.*/) in let mline = [ seq "mline" . del /[ \t\r\n]*/ "\n" . store mline_re ] in [ label "#mcomment" . del /[ \t]*\/\*/ "/*" . counter "mline" . mline . (eol . mline)* . del /[ \t\r\n]*\*\/[ \t]*\r?\n/ "\n*/\n" ]
Map comments into “#comment” nodes, without indentation
let comment_noindent = comment_generic /#[ \t]*/ "# "
A comment_eol or eol
let comment_or_eol = comment_eol | (del /[ \t]*[#!]?\n/ "\n")
let comment_or_eol = Util.comment_or_eol
A comment_eol or eol
let comment_or_eol = comment_eol | (del /([ \t]+#\n|[ \t]*\n)/ "\n")
A comment_eol or eol, with an optional empty comment
let comment_or_eol = comment_eol | (del /[ \t]*(#[ \t]*)?\n/ "\n")
let comment_re = /([^ \t\n].*[^ \t\n]|[^ \t\n])/ - /# ## (Start|End) Default Options ##/
A one-line comment, C-style
let comment_simple = Util.comment_c_style
Entries shared between defaults and fs_types sections
let common_entry = list_sto ("base_features"|"default_features") (key Rx.word) | entry_sto "blocksize" ("-"? . Rx.integer) | entry_sto "hash_alg" ("legacy"|"half_md4"|"tea") | entry_sto ("inode_ratio"|"inode_size") Rx.integer
An “if” declaration, recursive
let rec condition = [ Util.del_str "$if" . label "@if" . Sep.space . store Rx.space_in . Util.eol . (Util.empty | Util.comment | condition | variable | entry)* . Util.del_str "$endif" . Util.eol ]
A condition is an ‘and’ node, representing a union of condition_fields, listed under ‘or’ subnodes:
let condition = logic_construct_condition "or" condition_field
A single condition field is an ‘or’ node.
let condition_field = let sto_condition = Util.del_str "'" . store /[^'\n]+/ . Util.del_str "'" in [ key "not" . Sep.space ]? . store condition_re . [ Sep.space . key "contain" ]? . Sep.space . logic_construct_field "or" "|" sto_condition
A list of conditions, inspired by Debctrl.dependency_list An upload condition list is either the wildcard ‘*’, stored verbatim, or an intersection of conditions listed under ‘and’ subnodes:
let condition_list = store "*" | logic_construct_condition "and" condition
let condition_re = "source" | "byhand" | "sections" | "binaries" | "architectures"
let conf = "# a comment the.backed-up.domain.tld relay:[their.mail.host.tld] .my.domain : * smtp:outbound-relay.my.domain example.com uucp:example example.com slow: example.com :[gateway.example.com] user.foo@example.com smtp:bar.example:2025 .example.com error:mail for *.example.com is not deliverable "
let conf = "# a comment virtual-alias.domain anything postmaster@virtual-alias.domain postmaster user1@virtual-alias.domain address1 user2@virtual-alias.domain address2, address3 root robert.oot@domain.com @example.net root,postmaster "
A top-level config
let config (app:lens) = (Util.empty | comment)* . rspace lbrack . Build.opt_list app (lrspace comma) . lrspace rbrack . Util.del_str "." . Util.eol . (Util.empty | comment)*
let config = Build.key_value_line_comment "config" sep_space (store /binary_indexes|yes|no/) comment
let configfile = [ command "configfile" "\t" . spc . store Rx.no_spaces . eol ]