/usr/share/augeas/lenses/dist/dovecot.aug is in augeas-lenses 1.4.0-0ubuntu1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | (*
Module: Dovecot
Parses dovecot configuration files.
Author: Serge Smetana <serge.smetana@gmail.com>
Acunote http://www.acunote.com
Pluron, Inc. http://pluron.com
About: License
This file is licensed under the LGPL v2+.
About: Configuration files
This lens applies to /etc/dovecot/dovecot.conf and files in
/etc/dovecot/conf.d/. See <filter>.
About: Examples
The <Test_Dovecot> file contains various examples and tests.
About: TODO
Support for multiline values like queries in dict-sql.conf
*)
module Dovecot =
autoload xfm
(******************************************************************
* Group: USEFUL PRIMITIVES
******************************************************************)
(* View: indent *)
let indent = Util.indent
(* View: eol *)
let eol = Util.eol
(* View: empty
Map empty lines. *)
let empty = Util.empty
(* View: comment
Map comments in "#comment" nodes. *)
let comment = Util.comment
(* View: eq *)
let eq = del /[ \t]*=/ " ="
(* Variable: any *)
let any = Rx.no_spaces
(* Variable: value
Match any value after " =".
Should not start and end with spaces. May contain spaces inside *)
let value = any . (Rx.space . any)*
(* View: command_start *)
let command_start = Util.del_str "!"
(******************************************************************
* Group: ENTRIES
******************************************************************)
(* Variable: commands *)
let commands = /include|include_try/
(* Variable: block_names *)
let block_names = /dict|userdb|passdb|protocol|service|plugin|namespace|map|fields|unix_listener|fifo_listener|inet_listener/
(* Variable: keys
Match any possible key except commands and block names. *)
let keys = Rx.word - (commands | block_names)
(* View: entry
Map simple "key = value" entries including "key =" entries with empty value. *)
let entry = [ indent . key keys. eq . (Sep.opt_space . store value)? . eol ]
(* View: command
Map commands started with "!". *)
let command = [ command_start . key commands . Sep.space . store Rx.fspath . eol ]
(*
View: dquote_spaces
Make double quotes mandatory if value contains spaces,
and optional if value doesn't contain spaces.
Based off Quote.dquote_spaces
Parameters:
lns1:lens - the lens before
lns2:lens - the lens after
*)
let dquote_spaces (lns1:lens) (lns2:lens) =
(* bare has no spaces, and is optionally quoted *)
let bare = Quote.do_dquote_opt (store /[^" \t\n]+/)
(* quoted has at least one space, and must be quoted *)
in let quoted = Quote.do_dquote (store /[^"\n]*[ \t]+[^"\n]*/)
in [ lns1 . bare . lns2 ] | [ lns1 . quoted . lns2 ]
let mailbox = indent
. dquote_spaces
(key /mailbox/ . Sep.space)
(Build.block_newlines_spc entry comment . eol)
let block_ldelim_newlines_re = /[ \t]+\{([ \t\n]*\n)?/
let block_newlines (entry:lens) (comment:lens) =
let indent = del Rx.opt_space "\t"
in del block_ldelim_newlines_re Build.block_ldelim_default
. ((entry | comment) . (Util.empty | entry | comment)*)?
. del Build.block_rdelim_newlines_re Build.block_rdelim_newlines_default
(* View: block
Map block enclosed in brackets recursively.
Block may be indented and have optional argument.
Block body may have entries, comments, empty lines, and nested blocks recursively. *)
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 ]
(******************************************************************
* Group: LENS AND FILTER
******************************************************************)
(* View: lns
The Dovecot lens *)
let lns = (comment|empty|entry|command|block)*
(* Variable: filter *)
let filter = incl "/etc/dovecot/dovecot.conf"
. (incl "/etc/dovecot/conf.d/*.conf")
. Util.stdexcl
let xfm = transform lns filter
|