Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
F
 facilities, Syslog
 field, Keepalived
 Fields and values, Xorg
 file, Syslog
 file_r, Syslog
 filter
 flag
 fs_types, Mke2fs
 FS_TYPES SECTION, Mke2fs
 fs_types_entry, Mke2fs
 fs_types_record, Mke2fs
 fs_types_title, Mke2fs
 fspath
 Function, Syslog
G
 GENERIC CONSTRUCTIONS, Build
 Generic primitive definitions, cgrules
 Generic primitives
 generic_entry_re, Xorg
 GLOBAL CONFIGURATION, Keepalived
 global_conf, Keepalived
 global_defs, Keepalived
 global_defs_field, Keepalived
 group_record, cgrules
H
 host_alias, Sudoers
 hostname, Syslog
 Hostname maching, Syslog
 hostnames, Syslog
 hour, Cron
I
 identifier, Xorg
 includedir, Sudoers
 includes, Xinetd
 indent
 indented_entry, IniFile
 indented_title, IniFile
 indented_title_label, IniFile
 INI File settings
 IniFile
 input_device, Xorg
 int, Xorg
 Internal primitives, IniFile
 ip6_dotint, Resolv
 ipaddr
 ipdev, Keepalived
 Iptables
K
 Keepalived
 key_value, Build
 key_value_line, Build
 key_value_line_comment, Build
let facilities = label_opt_list "facility" (store token) comma
a list of facilities, separated by commas
let field (
   kw:string
) (sto:lens) = indent . Build.key_value_line_comment kw sep_spc sto comment_eol
let file = [ Build.xchgs "-" "no_sync" ]? . [ label "file" . store file_r ]
a file may start with a “-” meaning it does not gets sync’ed everytime
let file_r = /\/[^ \t\n]+/
a file begins with a / and get almost anything else after
The pbuilder conffiles
The pg_hba.conf conf file
all you need is /etc/syslog.conf
let flag (kw:regexp) = [ key kw ]
A simple flag subnode, consisting of a single key
let flag (kw:regexp) = indent . Build.flag kw
A single word
let fs_types = IniFile.record fs_types_title (fs_types_record comment)
A fs_types section
let fs_types_entry =list_sto "features" (
   [del /\^/ "^" . label "disable"]? . key Rx.word
) | list_sto "options" (key Rx.word . Util.del_str "=" . store Rx.word) | entry_sto "lazy_itable_init" ("true"|"false") | entry_sto "flex_bg_size" Rx.integer
Possible entries under a fs_types_record group
let fs_types_record = [ label "filesystem" . Util.indent . store Rx.word . del /[ \t]*=[ \t]*\{[ \t]*\n/ " = {\n" . ((Util.indent . (fs_types_entry|common_entry)) | empty | comment)* . del /[ \t]*\}[ \t]*\n/ " }\n" ]
Fs group records under the fs_types section
let fs_types_title = IniFile.title "fs_types"
Title for the fs_types section
let fspath = Rx.fspath
let generic_entry_re = /[^# \t\n\/]+/ - entries_re
let global_conf = global_defs | static_routes
A global configuration entry
let global_defs = block "global_defs" global_defs_field
A global_defs block
let global_defs_field = block "notification_email" email | field "notification_email_from" sto_email_addr | field "smtp_server" sto_word | field "smtp_connect_timeout" sto_num | field "lvs_id" sto_word | field "router_id" sto_word
Possible fields in the global_defs block
let group_record = generic_record "group" (Util.del_str "@" . store name)
let host_alias = alias_entry "Host_Alias" "host" sto_to_com
Host_Alias, see alias_field
let hostname = [ label "hostname" . opt_hash . ( plus | [ Build.xchgs "-" "reverse" ] ) . hostnames . eol . entries ]
a program begins with an optional hash, and a + or -
let hostnames = label_opt_list_or "hostname" (store Rx.word) comma "*"
a list of hostnames
let hour = [ label "hour" . store num ]
let identifier = entry_str "Identifier" /[iI]dentifier/
let includedir = [ key "#includedir" . Sep.space . store Rx.fspath . eol ]
let includes = [ key /include|includedir/ . Util.del_ws_spc . store /[^ \t\n]+/ . eol ]
It would be nice if we could use the directories given in include and includedir directives to parse additional files instead of hardcoding all the places where xinetd config files can be found; but that is currently not possible, and implementing that has a good amount of hairy corner cases to consider.
let indent = Util.indent
let indent = Util.indent
let indent = del /[ \t]*/ ""
let indent = del /[ \t]*/ ""
Delete indentation, including leading whitespace
let indent = Util.indent
let indented_entry (
   kw:regexp
) (sep:lens) (comment:lens) = [ Util.del_opt_ws "" . key kw . sep . sto_to_comment? . (comment|eol) ] | comment
Generic INI File entry that might be indented with an arbitrary amount of whitespace
let indented_title (kw:regexp) = Util.indent . title kw
Title for record.
let indented_title_label (
   name:string
) (kw:regexp) = Util.indent . title_label name kw
Title for record.
Generic module to create INI files lenses
let input_device = [ indent . del /[iI]nput[dD]evice/ "InputDevice" . label "InputDevice" . sep_spc . quoted_string_val . [ label "option" . sep_spc . quoted_string_val ]* . eol ]
let int = /[0-9]+/
let ip6_dotint = let negate = [ del "no-" "no-" . label "negate" ] in [ negate? . key "ip6-dotint" ]
ip6-dotint option, which supports negation
let ipaddr = label "ipaddr" . store /[0-9\.-]+/ . prefixlen?
An IP address or range with an optional mask
let ipaddr = /[0-9a-fA-F:\.]+(\/[0-9]+|[ \t]+[0-9\.]+)/
CIDR or ip+netmask
let ipaddr = [label "ipaddr" . store Rx.ip . netmask?]
An IP address or range with an optional mask
let ipdev = [ key "dev" . sep_spc . sto_word ]
A device for IP addresses
Parse the iptables file format as produced by iptables-save.
Parses /etc/keepalived/keepalived.conf
let key_value (kw: regexp) (sep:lens) (sto:lens) = [ key kw . sep . sto ]
Same as key_value_line, but does not end with an end of line
let key_value_line (
   kw:regexp
) (sep:lens) (sto:lens) = [ key kw . sep . sto . eol ]
A subnode with a keyword, a separator and a storing lens, and an end of line
let key_value_line_comment (
   kw:regexp
) (sep:lens) (sto:lens) (comment:lens) = [ key kw . sep . sto . (eol|comment) ]
Same as key_value_line, but allows to have a comment in the end of a line and an end of line
Close