This file is indexed.

/usr/share/augeas/lenses/dist/tests/test_nslcd.aug is in augeas-lenses 1.10.1-2.

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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
(*
Module: Test_Nslcd
  Provides unit tests and examples for the <Nslcd> lens.
*)

module Test_nslcd =

let real_file = "# /etc/nslcd.conf
# nslcd configuration file. See nslcd.conf(5)
# for details.

# Specifies the number of threads to start that can handle requests and perform LDAP queries.
threads 5

# The user and group nslcd should run as.
uid nslcd
gid nslcd

# This option controls the way logging is done.
log syslog info

# The location at which the LDAP server(s) should be reachable.
uri ldaps://XXX.XXX.XXX ldaps://YYY.YYY.YYY

# The search base that will be used for all queries.
base dc=XXX,dc=XXX

# The LDAP protocol version to use.
ldap_version 3

# The DN to bind with for normal lookups.
binddn cn=annonymous,dc=example,dc=net
bindpw secret


# The DN used for password modifications by root.
rootpwmoddn cn=admin,dc=example,dc=com

# The password used for password modifications by root.
rootpwmodpw XXXXXX


# SASL authentication options
sasl_mech OTP
sasl_realm realm
sasl_authcid authcid
sasl_authzid dn:cn=annonymous,dc=example,dc=net
sasl_secprops noanonymous,noplain,minssf=0,maxssf=2,maxbufsize=65535
sasl_canonicalize yes

# Kerberos authentication options
krb5_ccname ccname

# Search/mapping options

# Specifies the base distinguished name (DN) to use as search base.
base dc=people,dc=example,dc=com
base dc=morepeople,dc=example,dc=com
base alias dc=aliases,dc=example,dc=com
base alias dc=morealiases,dc=example,dc=com
base group dc=group,dc=example,dc=com
base group dc=moregroup,dc=example,dc=com
base passwd dc=users,dc=example,dc=com

# Specifies the search scope (subtree, onelevel, base or children).
scope sub
scope passwd sub
scope aliases sub

# Specifies the policy for dereferencing aliases.
deref never

# Specifies whether automatic referral chasing should be enabled.
referrals yes

# The FILTER is an LDAP search filter to use for a specific map.
filter group (objectClass=posixGroup)

# This option allows for custom attributes to be looked up instead of the default RFC 2307 attributes.
map passwd homeDirectory \"${homeDirectory:-/home/$uid}\"
map passwd loginShell \"${loginShell:-/bin/bash}\"
map shadow userPassword myPassword

# Timing/reconnect options

# Specifies the time limit (in seconds) to use when connecting to the directory server.
bind_timelimit 30

# Specifies the time limit (in seconds) to wait for a response from the LDAP server.
timelimit 5

# Specifies the period if inactivity (in seconds) after which the connection to the LDAP server will be closed.
idle_timelimit 10

# Specifies the number of seconds to sleep when connecting to all LDAP servers fails.
reconnect_sleeptime 10

# Specifies the time after which the LDAP server is considered to be permanently unavailable.
reconnect_retrytime 10

# SSL/TLS options

# Specifies whether to use SSL/TLS or not (the default is not to).
ssl start_tls
# Specifies what checks to perform on a server-supplied certificate.
tls_reqcert never
# Specifies the directory containing X.509 certificates for peer authentication.
tls_cacertdir /etc/ssl/ca
# Specifies the path to the X.509 certificate for peer authentication.
tls_cacertfile /etc/ssl/certs/ca-certificates.crt
# Specifies the path to an entropy source.
tls_randfile /dev/random
# Specifies the ciphers to use for TLS.
tls_ciphers TLSv1
# Specifies the path to the file containing the local certificate for client TLS authentication.
tls_cert /etc/ssl/certs/cert.pem
# Specifies the path to the file containing the private key for client TLS authentication.
tls_key /etc/ssl/private/cert.pem

# Other options
pagesize 100
nss_initgroups_ignoreusers user1,user2,user3
nss_min_uid 1000
nss_nested_groups yes
nss_getgrent_skipmembers yes
nss_disable_enumeration yes
validnames /^[a-z0-9._@$()]([a-z0-9._@$() \\~-]*[a-z0-9._@$()~-])?$/i
ignorecase yes
pam_authc_ppolicy yes
pam_authz_search (&(objectClass=posixAccount)(uid=$username)(|(authorizedService=$service)(!(authorizedService=*))))
pam_password_prohibit_message \"MESSAGE LONG AND WITH SPACES\"
reconnect_invalidate nfsidmap,db2,db3
cache dn2uid 1s 2h

"

test Nslcd.lns get real_file =
 { "#comment" = "/etc/nslcd.conf" }
  { "#comment" = "nslcd configuration file. See nslcd.conf(5)" }
  { "#comment" = "for details." }
  {  }
  { "#comment" = "Specifies the number of threads to start that can handle requests and perform LDAP queries." }
  { "threads" = "5" }
  {  }
  { "#comment" = "The user and group nslcd should run as." }
  { "uid" = "nslcd" }
  { "gid" = "nslcd" }
  {  }
  { "#comment" = "This option controls the way logging is done." }
  { "log" = "syslog info" }
  {  }
  { "#comment" = "The location at which the LDAP server(s) should be reachable." }
  { "uri"
    { "1" = "ldaps://XXX.XXX.XXX" }
    { "2" = "ldaps://YYY.YYY.YYY" }
  }
  {  }
  { "#comment" = "The search base that will be used for all queries." }
  { "base" = "dc=XXX,dc=XXX" }
  {  }
  { "#comment" = "The LDAP protocol version to use." }
  { "ldap_version" = "3" }
  {  }
  { "#comment" = "The DN to bind with for normal lookups." }
  { "binddn" = "cn=annonymous,dc=example,dc=net" }
  { "bindpw" = "secret" }
  {  }
  {  }
  { "#comment" = "The DN used for password modifications by root." }
  { "rootpwmoddn" = "cn=admin,dc=example,dc=com" }
  {  }
  { "#comment" = "The password used for password modifications by root." }
  { "rootpwmodpw" = "XXXXXX" }
  {  }
  {  }
  { "#comment" = "SASL authentication options" }
  { "sasl_mech" = "OTP" }
  { "sasl_realm" = "realm" }
  { "sasl_authcid" = "authcid" }
  { "sasl_authzid" = "dn:cn=annonymous,dc=example,dc=net" }
  { "sasl_secprops" = "noanonymous,noplain,minssf=0,maxssf=2,maxbufsize=65535" }
  { "sasl_canonicalize" = "yes" }
  {  }
  { "#comment" = "Kerberos authentication options" }
  { "krb5_ccname" = "ccname" }
  {  }
  { "#comment" = "Search/mapping options" }
  {  }
  { "#comment" = "Specifies the base distinguished name (DN) to use as search base." }
  { "base" = "dc=people,dc=example,dc=com" }
  { "base" = "dc=morepeople,dc=example,dc=com" }
  { "base"
    { "alias" = "dc=aliases,dc=example,dc=com" }
  }
  { "base"
    { "alias" = "dc=morealiases,dc=example,dc=com" }
  }
  { "base"
    { "group" = "dc=group,dc=example,dc=com" }
  }
  { "base"
    { "group" = "dc=moregroup,dc=example,dc=com" }
  }
  { "base"
    { "passwd" = "dc=users,dc=example,dc=com" }
  }
  {  }
  { "#comment" = "Specifies the search scope (subtree, onelevel, base or children)." }
  { "scope" = "sub" }
  { "scope"
    { "passwd" = "sub" }
  }
  { "scope"
    { "aliases" = "sub" }
  }
  {  }
  { "#comment" = "Specifies the policy for dereferencing aliases." }
  { "deref" = "never" }
  {  }
  { "#comment" = "Specifies whether automatic referral chasing should be enabled." }
  { "referrals" = "yes" }
  {  }
  { "#comment" = "The FILTER is an LDAP search filter to use for a specific map." }
  { "filter"
    { "group" = "(objectClass=posixGroup)" }
  }
  {  }
  { "#comment" = "This option allows for custom attributes to be looked up instead of the default RFC 2307 attributes." }
  { "map"
    { "passwd"
      { "homeDirectory" = "\"${homeDirectory:-/home/$uid}\"" }
    }
  }
  { "map"
    { "passwd"
      { "loginShell" = "\"${loginShell:-/bin/bash}\"" }
    }
  }
  { "map"
    { "shadow"
      { "userPassword" = "myPassword" }
    }
  }
  {  }
  { "#comment" = "Timing/reconnect options" }
  {  }
  { "#comment" = "Specifies the time limit (in seconds) to use when connecting to the directory server." }
  { "bind_timelimit" = "30" }
  {  }
  { "#comment" = "Specifies the time limit (in seconds) to wait for a response from the LDAP server." }
  { "timelimit" = "5" }
  {  }
  { "#comment" = "Specifies the period if inactivity (in seconds) after which the connection to the LDAP server will be closed." }
  { "idle_timelimit" = "10" }
  {  }
  { "#comment" = "Specifies the number of seconds to sleep when connecting to all LDAP servers fails." }
  { "reconnect_sleeptime" = "10" }
  {  }
  { "#comment" = "Specifies the time after which the LDAP server is considered to be permanently unavailable." }
  { "reconnect_retrytime" = "10" }
  {  }
  { "#comment" = "SSL/TLS options" }
  {  }
  { "#comment" = "Specifies whether to use SSL/TLS or not (the default is not to)." }
  { "ssl" = "start_tls" }
  { "#comment" = "Specifies what checks to perform on a server-supplied certificate." }
  { "tls_reqcert" = "never" }
  { "#comment" = "Specifies the directory containing X.509 certificates for peer authentication." }
  { "tls_cacertdir" = "/etc/ssl/ca" }
  { "#comment" = "Specifies the path to the X.509 certificate for peer authentication." }
  { "tls_cacertfile" = "/etc/ssl/certs/ca-certificates.crt" }
  { "#comment" = "Specifies the path to an entropy source." }
  { "tls_randfile" = "/dev/random" }
  { "#comment" = "Specifies the ciphers to use for TLS." }
  { "tls_ciphers" = "TLSv1" }
  { "#comment" = "Specifies the path to the file containing the local certificate for client TLS authentication." }
  { "tls_cert" = "/etc/ssl/certs/cert.pem" }
  { "#comment" = "Specifies the path to the file containing the private key for client TLS authentication." }
  { "tls_key" = "/etc/ssl/private/cert.pem" }
  {  }
  { "#comment" = "Other options" }
  { "pagesize" = "100" }
  { "nss_initgroups_ignoreusers"
    { "1" =  "user1" }
    { "2" =  "user2" }
    { "3" =  "user3" }
  }
  { "nss_min_uid" = "1000" }
  { "nss_nested_groups" = "yes" }
  { "nss_getgrent_skipmembers" = "yes" }
  { "nss_disable_enumeration" = "yes" }
  { "validnames" = "/^[a-z0-9._@$()]([a-z0-9._@$() \~-]*[a-z0-9._@$()~-])?$/i" }
  { "ignorecase" = "yes" }
  { "pam_authc_ppolicy" = "yes" }
  { "pam_authz_search" = "(&(objectClass=posixAccount)(uid=$username)(|(authorizedService=$service)(!(authorizedService=*))))" }
  { "pam_password_prohibit_message" = "MESSAGE LONG AND WITH SPACES" }
  { "reconnect_invalidate" = "nfsidmap,db2,db3" }
  { "cache" = "dn2uid 1s 2h" }
  {  }
(* Test writes *)

(* Test a simple parameter *)
test Nslcd.lns put "pagesize 9999\n" after
   set "/pagesize" "1000" =
   "pagesize 1000\n"

(* Test base parameter *)
test Nslcd.lns put "\n" after
   set "/base" "dc=example,dc=com" =
   "\nbase dc=example,dc=com\n"

test Nslcd.lns put "base dc=change,dc=me\n" after
   set "/base" "dc=example,dc=com" =
   "base dc=example,dc=com\n"

test Nslcd.lns put "\n" after
   set "/base/passwd" "dc=example,dc=com" =
   "\nbase passwd dc=example,dc=com\n"

test Nslcd.lns put "base passwd dc=change,dc=me\n" after
   set "/base[passwd]/passwd" "dc=example,dc=com";
   set "/base[shadow]/shadow" "dc=example,dc=com" =
   "base passwd dc=example,dc=com\nbase shadow dc=example,dc=com\n"

(* Test scope entry *)
test Nslcd.lns put "\n" after
   set "/scope" "sub" =
   "\nscope sub\n"

test Nslcd.lns put "scope one\n" after
   set "/scope" "subtree" =
   "scope subtree\n"

test Nslcd.lns put "\n" after
   set "/scope/passwd" "base" =
   "\nscope passwd base\n"

test Nslcd.lns put "scope shadow onelevel\n" after
   set "/scope[passwd]/passwd" "subtree";
   set "/scope[shadow]/shadow" "base" =
   "scope shadow base\nscope passwd subtree\n"

(* Test filter entry *)
test Nslcd.lns put "\n" after
   set "/filter/passwd" "(objectClass=posixAccount)" =
   "\nfilter passwd (objectClass=posixAccount)\n"

test Nslcd.lns put "filter shadow (objectClass=posixAccount)\n" after
   set "/filter[passwd]/passwd" "(objectClass=Account)";
   set "/filter[shadow]/shadow" "(objectClass=Account)" =
   "filter shadow (objectClass=Account)\nfilter passwd (objectClass=Account)\n"

(* Test map entry *)
test Nslcd.lns put "map passwd loginShell ab\n" after
   set "/map/passwd/loginShell" "bc" =
   "map passwd loginShell bc\n"

test Nslcd.lns put "map passwd loginShell ab\n" after
   set "/map[2]/passwd/homeDirectory" "bc" =
   "map passwd loginShell ab\nmap passwd homeDirectory bc\n"

test Nslcd.lns put "map passwd loginShell ab\n" after
   set "/map[passwd/homeDirectory]/passwd/homeDirectory" "bc" =
   "map passwd loginShell ab\nmap passwd homeDirectory bc\n"

test Nslcd.lns put "map passwd loginShell ab\nmap passwd homeDirectory ab\n" after
   set "/map[passwd/homeDirectory]/passwd/homeDirectory" "bc" =
   "map passwd loginShell ab\nmap passwd homeDirectory bc\n"


(* Test simple entries *)
let simple = "uid nslcd\n"

test Nslcd.lns get simple =
{ "uid" = "nslcd" }

(* Test simple entries with spaces at the end *)
let simple_spaces = "uid nslcd   \n"

test Nslcd.lns get simple_spaces =
{ "uid" = "nslcd" }

(* Test multi valued entries *)

let multi_valued = "cache 1 2    \n"

test Nslcd.lns get multi_valued =
{ "cache" = "1 2" }

let multi_valued_real = "map passwd homeDirectory ${homeDirectory:-/home/$uid}\n"

test Nslcd.lns get multi_valued_real =
{ "map"
  { "passwd"
    { "homeDirectory" = "${homeDirectory:-/home/$uid}" }
  }
}

(* Test multiline *)

let simple_multiline = "uid nslcd\ngid nslcd\n"

test Nslcd.lns get simple_multiline =
{"uid" = "nslcd"}
{"gid" = "nslcd"}


let multiline_separators  = "\n\n  \nuid nslcd    \ngid nslcd          \n"

test Nslcd.lns get multiline_separators =
{}
{}
{}
{"uid" = "nslcd"}
{"gid" = "nslcd"}