Augeas Lens Index

$#! |
| -prefix of an entry, Cron
A |
| access, Access
| access_entry, JMXAccess
| actions, Rsyslog
| address, Pg_Hba
| address_re, Ntpd
| admin, Gshadow
| admin_list, Gshadow
| age, Tmpfiles
| alias Modprobe Services Sudoers
| alias_entry, Sudoers
| alias_entry_single, Sudoers
| alias_field, Sudoers
| alias_list, Sudoers
| alias_name, Sudoers
| all_flags, Chrony
| allow, Reprepro_Uploaders
| allowdeny, Chrony
| anchor, Yaml
| any Quote Test_Quote
| any_opt Quote Test_Quote
| apid, Channels
| application, Erlang
| argument, Tmpfiles
| array, Trapperkeeper
| arroba, Channels
| attr_changetype, Ldif
| attr_description, Ldif
| attr_dn, Ldif
| attr_dn_value, Ldif
| attr_include, Ldif
| attr_modspec, Ldif
| attr_option, Ldif
| attr_type, Ldif
| attr_val_spec, Ldif
| attr_version, Ldif
| auth, Puppet_Auth
| authorized_key, Authorized_Keys
B |
| bare, Erlang
| Base entry, Nslcd
| bcast, Chrony
| bind_entry, Redis
| blacklist, Modprobe
| block Build Dovecot Keepalived Nginx Test_Build
| block_entry, Test_Build
| block_generic, Build
| block_newline Build Trapperkeeper
| block_newlines_spc, Build
| block_setdefault, Build
| body, Xinetd
| bool Host_Conf UpdateDB
| bool_warn, Host_Conf
| boolean Erlang Mke2fs
| boot BootConf Grub
| boot_entry, Grub
| boot_error, Grub
| boot_setting, Grub
| brackets Build Test_Build
| by, Reprepro_Uploaders
| by_group, Reprepro_Uploaders
| by_key, Reprepro_Uploaders

> let access = label "access" . store /[+-]/

Allow (+) or deny (-) access

> let access_entry = [ label "user" . [ label "username" . store Rx.word ] . Sep.space . [ label "access" . store /(readonly|readwrite)/i ] . Util.eol ]

> let actions = let prop_act = [ label "action" . action ] in let act_sep = del /[ \t]*\n&[ \t]*/ "\n& " in Build.opt_list prop_act act_sep

> let address = [ label "address" . store ipaddr_or_hostname ]

> let address_re = Rx.ip | /\*/ | Rx.hostname

> let admin = [ label "admin" . store word ]

> let admin_list = Build.opt_list admin comma

the admin_list is a comma separated list of users allowed to change the group’s password and the member_list

> let age = /(-|(~?[0-9]+(s|m|min|h|d|w|ms|us|((second|minute|hour|day|week|millisecond|microsecond)s?))?)+)/

“-”, or one of the formats seen in the manpage: 10d, 5seconds, 1y5days.

> let alias = let modulename = [ label "modulename" . sto_no_spaces ] in Build.key_value_line_comment "alias" sep_space (sto_no_spaces . sep_space . modulename) comment

> let alias = [ label "alias" . store word_re ]

> let alias = user_alias | runas_alias | host_alias | cmnd_alias

Every kind of Alias entry, see user_alias, runas_alias, host_alias and cmnd_alias

> let alias_entry (kw:string) (field:string) (sto:lens) = [ indent . key kw . sep_cont . alias_entry_single field sto . ( sep_col . alias_entry_single field sto )* . comment_or_eol ]

Alias entry, a list of comma-separated alias_entry_single fields

> let alias_entry_single (field:string) (sto:lens) = [ label "alias" . alias_name . sep_eq . alias_list field sto ]

Single alias_entry, named using alias_name and listing alias_list

> let alias_field (kw:string) (sto:lens) = [ label kw . sto ]

Generic alias field to gather all Alias definitions

> let alias_list (kw:string) (sto:lens) = Build.opt_list (alias_field kw sto) sep_com

List of alias_fields, separated by commas

> let alias_name = [ label "name" . store /[A-Z][A-Z0-9_]*/ ]

Name of an alias_entry_single

> let all_flags = [ Util.indent . key flags . eol ]

options without any arguments

> let allow = [ key "allow" . Sep.space . condition_list . Sep.space . by . Util.eol ]

> let allowdeny = [ Util.indent . key allowdeny_types . [ space . key "all" ]? . ( space . store ( no_space - "all" ) )? . eol ]

allow/deny/cmdallow/cmddeny has a specific syntax

> let anchor = Util.del_str "&" . val

> let any = let body = store /[^\n]*/ in do_quote body

A quoted value

> let any = [ label "any" . Quote.any ]

> let any_opt = let body = store any_opt_re in do_quote_opt body

An optionally quoted value Double or single quotes are not allowed in value Value cannot begin or end with spaces

> let any_opt = [ label "any_opt" . Quote.any_opt ]

> let apid = let codec = [ arroba . label "codec" . store Rx.integer ] in let options = equal . ( (langs . codec?) | codec ) in let apid_entry (lbl:string) = [ label lbl . store Rx.integer . options? ] in Build.opt_list (apid_entry "apid") comma . ( semicol . Build.opt_list (apid_entry "apid_dolby") comma )?

> let application (name:regexp) (parameter:lens) = list name parameter

> let argument = /([^# \t\n][^#\n]*[^# \t\n]|[^# \t\n])/

The last field.

> let array = let lbrack = Util.del_str "[" in let rbrack = Util.del_str "]" in let opt_space = del /[ \t]*/ "" in let comma = opt_space . Util.del_str "," . opt_space

> let arroba = Util.del_str "@"

> let attr_changetype (t:regexp) = key /changeType/i . sep_colon . store t . eol

> let attr_description = key attr_type . attr_option*

Attribute name, possibly with options

> let attr_dn = del /dn/i "dn" . ( attr_safe_string | attr_base64_string ) . eol

dn-spec = “dn:” (FILL distinguishedName / “:” FILL base64-distinguishedName)

> let attr_dn_value (k:regexp) = [ key k . ( attr_safe_string | attr_base64_string ) . eol ]

Parses an attribute line with a DN on the RHS Parameters: k:regexp - match attribute name as key

> let attr_include = eol . [ key "include" . sep_colon . store /[^ \t\n][^\n]*/ . eol . comment* . eol ]

OpenLDAP extension, must be separated by blank lines

> let attr_modspec = key /add|delete|replace/ . sep_colon . store attr_type . attr_option* . eol

> let attr_option = Util.del_str ";" . [ label "@option" . store /[a-zA-Z0-9-]+/ ]

options = option / (option “;” options)

> let attr_type = ldapoid_re | /[a-zA-Z][a-zA-Z0-9-]*/ - /dn/i - /changeType/i - /include/i

AttributeType = ldap-oid / (ALPHA *(attr-type-chars))

> let attr_val_spec = [ attr_description . ( attr_safe_string | attr_base64_string | attr_url_string ) . eol ]

Generic attribute with a value

> let attr_version = Build.key_value_line "version" sep_colon (store /[0-9]+/)

version-spec = “version:” FILL version-number

> let auth = [ Util.indent . Build.xchg /auth(enticated)?/ "auth" "auth" . Sep.space . store /yes|no|on|off|any/ . Util.comment_or_eol ]

An authentication stanza

> let authorized_key = [ label "key" . (key_options . Sep.space)? . key_type . Sep.space . store Rx.no_spaces . (Sep.space . key_comment)? . Util.eol ]

> let bare = store Rx.word

Store a bare Rx.word

> let bcast = [ Util.indent . key "broadcast" . space . [ label "interval" . store integer ] . space . store_address . ( space . [ label "port" . store integer ] )? . eol ]

broadcast has specific syntax

> let bind_entry = let ip = del_ws_spc . Quote.do_quote_opt_nil (store Rx.ip) in indent . [ key "bind" . [ label "ip" . ip ]+ ] . eol

The “bind” entry can be passed one or several ip addresses.

> let blacklist = Build.key_value_line_comment "blacklist" sep_space sto_no_spaces comment

> let block (entry:lens) = block_setdelim entry block_ldelim_re block_rdelim_re block_ldelim_default block_rdelim_default

A block enclosed in brackets

> let rec block = [ indent . key block_names . (Sep.space . Quote.do_dquote_opt (store /!?[\/A-Za-z0-9_-]+/))? . block_newlines (entry|block|mailbox) comment . eol ]

Map block enclosed in brackets recursively.

> let block (kw:regexp) (sto:lens) = lens_block (key kw) sto

A simple block with just a block title

> let block (entry : lens) = [ Util.indent . block_head . Build.block_newlines entry Util.comment . Util.eol ]

A block containing simple entries

> let block = Build.block block_entry

The block used for testing

> let block_entry = Build.key_value "test" Sep.equal (store Rx.word)

The block entry used for testing

> let block_generic (entry:lens) (entry_noindent:lens) (entry_noeol:lens) (entry_noindent_noeol:lens) (comment:lens) (comment_noindent:lens) (ldelim_re:regexp) (rdelim_re:regexp) (ldelim_default:string) (rdelim_default:string) = let block_single = entry_noindent_noeol | comment_noindent in let block_start = entry_noindent | comment_noindent in let block_middle = (entry | comment)* in let block_end = entry_noeol | comment in del ldelim_re ldelim_default . ( ( block_start . block_middle . block_end ) | block_single ) . del rdelim_re rdelim_default

A block enclosed in brackets

> let block_newlines (entry:lens) (comment:lens) = del block_ldelim_newlines_re block_ldelim_newlines_default . ((entry | comment) . (Util.empty | entry | comment)*)? . del block_rdelim_newlines_re block_rdelim_newlines_default

A block enclosed in brackets, with newlines forced and indentation defaulting to a tab.

> let block_newlines (entry:lens) (comment:lens) = del block_ldelim_newlines_re block_ldelim_newlines_default . ((entry | comment) . (Util.empty | entry | comment)*)? . del block_rdelim_newlines_re block_rdelim_newlines_default

A block enclosed in brackets, with newlines forced and indentation defaulting to a tab.

> let block_newlines_spc (entry:lens) (comment:lens) = del (/[ \t\n]/ . block_ldelim_newlines_re) block_ldelim_newlines_default . ((entry | comment) . (Util.empty | entry | comment)*)? . del block_rdelim_newlines_re block_rdelim_newlines_default

A block enclosed in brackets, with newlines forced and indentation defaulting to a tab.
A block enclosed in brackets

> let body (attr:lens) = Build.block_newlines_spc (indent . attr . Util.eol) Util.comment

We would really like to say “the body can contain any of a list of a list of attributes, each of them at most once”; but that would require that we build a lens that matches the permutation of all attributes; with around 40 individual attributes, that’s not computationally feasible, even if we didn’t have to worry about how to write that down.

> let bool (kw:regexp) = Build.key_value_line kw Sep.space sto_bool

A boolean switch

> let bool = [ key "PRUNE_BIND_MOUNTS" . Sep.space_equal . Quote.do_dquote (store /[01]|no|yes/) . Util.doseol ]

A boolean entry

> let bool_warn (kw:regexp) = Build.key_value_line kw Sep.space sto_bool_warn

A boolean switch with extended values

> let boolean = store /true|false/

Store a boolean value

> let boolean = ("y"|"yes"|"true"|"t"|"1"|"on"|"n"|"no"|"false"|"nil"|"0"|"off")

The configuration parser of e2fsprogs recognizes different values for booleans, so list all the recognized values

> let boot = let image = [ label "image" . store fspath ] in let arg = [ label "arg" . store word ] in Build.key_value_line "boot" space (image . space . arg)

boot [image [-acds]] XXX: the last arguments are not always needed, so make them optional

> let boot = let line = ((boot_setting|comment)* . boot_setting)? in [ label "title" . title . line ]

> let boot_entry = let boot_arg_re = "root" | "initrd" | "rootnoverify" | "uuid" | "findroot" | "bootfs" (* Solaris extensions *) in kw_boot_arg boot_arg_re | kernel | chainloader | kw_pres "quiet" (* Seems to be a Ubuntu extension *) | savedefault | configfile | module_line | map_line | kw_pres "lock" | kw_pres "makeactive" | password_arg

boot entries

> let boot_error = let kw = /lock|uuid|password|root|initrd|rootnoverify|findroot|bootfs/ |/configfile|chainloader|title|boot|quiet|kernel|

Accept lines not matching boot_entry and stuff them into ‘#error’ nodes

> let boot_setting = boot_entry | boot_error

a valid boot setting or a line that looks like one but is an #error

> let brackets (l:lens) (r:lens) (lns:lens) = l . lns . r

Put a lens inside brackets

> let brackets = [ Build.brackets Sep.lbracket Sep.rbracket (key Rx.word) ]

Test brackets

> let by = [ key "by" . Sep.space . ( store ("anybody"|"unsigned") | by_key | by_group ) ]

by statements define who is allowed to upload.

> let by_group = value "group" . [ key "group" . Sep.space . store Rx.word ]

Authenticate packages by a groupname.

> let by_key = let any_key = [ store "any" . Sep.space . key "key" ] in let named_key = [ key "key" . Sep.space . store (Rx.word - "any") ] in value "key" . (any_key | named_key)

When a key is used to authenticate packages, the value can either be a key ID or “any”:
Close