Upload Tizen:Main source
[external/augeas.git] / lenses / slapd.aug
1 (* Slapd module for Augeas
2    Author: Free Ekanayaka <free@64studio.com>
3
4    Reference: man slapd.conf(5), man slapd.access (5)
5
6 *)
7
8 module Slapd =
9   autoload xfm
10
11 (************************************************************************
12  *                           USEFUL PRIMITIVES
13  *************************************************************************)
14
15 let eol         = Util.eol
16 let spc         = Util.del_ws_spc
17 let sep         = del /[ \t\n]+/ " "
18
19 let sto_to_eol  = store /([^ \t\n].*[^ \t\n]|[^ \t\n])/
20 let sto_to_spc  = store /[^\\# \t\n]+/
21 let sto_to_by   = store (/[^\\# \t\n]+/ - "by")
22
23 (************************************************************************
24  *                           ACCESS TO
25  *************************************************************************)
26
27 let access_re   = "access to"
28 let who         = [ spc . label "who"     . sto_to_spc ]
29 let what        = [ spc . label "what"    . sto_to_spc ]
30
31 (* TODO: parse the control field, see man slapd.access (5) *)
32 let control     = [ spc . label "control" . sto_to_by  ]
33 let by          = [ sep . key "by". who . what. control? ]
34
35 let access      = [ key access_re . spc. sto_to_spc . by+ . eol ]
36
37 (************************************************************************
38  *                             GLOBAL
39  *************************************************************************)
40
41 (* TODO: parse special field separately, see man slapd.conf (5) *)
42 let global_re   = "allow"
43                 | "argsfile"
44                 | "attributeoptions"
45                 | "attributetype"
46                 | "authz-policy"
47                 | "ldap"
48                 | "dn"
49                 | "concurrency"
50                 | "cron_max_pending"
51                 | "conn_max_pending_auth"
52                 | "defaultsearchbase"
53                 | "disallow"
54                 | "ditcontentrule"
55                 | "gentlehup"
56                 | "idletimeout"
57                 | "include"
58                 | "index_substr_if_minlen"
59                 | "index_substr_if_maxlen"
60                 | "index_substr_any_len"
61                 | "index_substr_any_step"
62                 | "localSSF"
63                 | "loglevel"
64                 | "moduleload"
65                 | "modulepath"
66                 | "objectclass"
67                 | "objectidentifier"
68                 | "password-hash"
69                 | "password-crypt-salt-format"
70                 | "pidfile"
71                 | "referral"
72                 | "replica-argsfile"
73                 | "replica-pidfile"
74                 | "replicationinterval"
75                 | "require"
76                 | "reverse-lookup"
77                 | "rootDSE"
78                 | "sasl-host "
79                 | "sasl-realm"
80                 | "sasl-secprops"
81                 | "schemadn"
82                 | "security"
83                 | "sizelimit"
84                 | "sockbuf_max_incoming "
85                 | "sockbuf_max_incoming_auth"
86                 | "threads"
87                 | "timelimit time"
88                 | "tool-threads"
89                 | "TLSCipherSuite"
90                 | "TLSCACertificateFile"
91                 | "TLSCACertificatePath"
92                 | "TLSCertificateFile"
93                 | "TLSCertificateKeyFile"
94                 | "TLSDHParamFile"
95                 | "TLSRandFile"
96                 | "TLSVerifyClient"
97                 | "TLSCRLCheck"
98                 | "backend"
99
100 let global     = Spacevars.entry global_re
101
102 (************************************************************************
103  *                             DATABASE
104  *************************************************************************)
105
106 (* TODO: support all types of database backend *)
107 let database_hdb = "cachesize"
108                 | "cachefree"
109                 | "checkpoint"
110                 | "dbconfig"
111                 | "dbnosync"
112                 | "directory"
113                 | "dirtyread"
114                 | "idlcachesize"
115                 | "index"
116                 | "linearindex"
117                 | "lockdetect"
118                 | "mode"
119                 | "searchstack"
120                 | "shm_key"
121
122 let database_re = "suffix"
123                 | "lastmod"
124                 | "limits"
125                 | "maxderefdepth"
126                 | "overlay"
127                 | "readonly"
128                 | "replica uri"
129                 | "replogfile"
130                 | "restrict"
131                 | "rootdn"
132                 | "rootpw"
133                 | "suffix"
134                 | "subordinate"
135                 | "syncrepl rid"
136                 | "updatedn"
137                 | "updateref"
138                 | database_hdb
139
140 let database    = [ key "database"
141                   . spc
142                   . sto_to_eol
143                   . eol
144                   . Spacevars.lns (Spacevars.entry database_re|access) ]
145
146 (************************************************************************
147  *                              LENS
148  *************************************************************************)
149
150 let lns         = Spacevars.lns (global|access) . (database)*
151
152 let filter      = incl "/etc/ldap/slapd.conf"
153                 . incl "/etc/openldap/slapd.conf"
154
155 let xfm         = transform lns filter