-
Notifications
You must be signed in to change notification settings - Fork 11
/
README.profile
517 lines (425 loc) · 17.1 KB
/
README.profile
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
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
oVirt LDAP authentication and authorization extension - PROFILE CONFIGURATION
=============================================================================
OUTLINE
-------
FORMAT
The format of profile is properties file. Every rule[1] of Java property file
applies.
[1] http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html#load%28java.io.Reader%29
SORTING
Sort hint is marked as @SORT@, it is alphabetic sort not number sort. Content
is not important.
INCLUDES
Property file can include other property files. In order to include more than
one file use include.@SORT@ directive. Files are relative to them-selves, unless
specified within <> brackets, these are read from search directories.
Examples:
include.1 = <file1>
include.2 = file2
VARIABLES
Recursive value substitution is available, format is ${namespace:name}, where
namespace is:
- local
processed during read, variables:
_basedir - directory where property file resides.
- global
processed after all files are processed, can reference to any
property.
- sys
Reference to system property.
- seq
Sequence context, (key, value) pair, where value usually string. These are
marked as @VAR@ across this document.
SEQ VARIABLES
authn_enable
set if authn is initialized.
authz_enable
set if authz is initialized.
capability_recursiveGroupResolution
true if directory resolves groups recursively.
capability_credentialsChange
true if directory supports password modify extended request (RFC-3062).
dn
dn of input/output object.
filter
requested filter.
maxFilterSize
maximum filter size, set by profile.
namespace
namespace of input/output.
namespaces
a list of namespaces to use.
namespaceDefault
a default namespace to use if cannot be found within available
namespaces.
password
password to use.
passwordNew
used for credentials change.
query
query instance output.
sensitiveKeys
holds a comma separated list of variables that
are not to be dumped.
user
user of input/output.
ATTRIBUTES
Attribute with suffix of .@ATTRIBUTE@ can contain attributes of referenced Java
object. Only setXXXX() setters are supported, first letter of setter is
lower case. Lists are also supported using comma separated strings. Enum
should use their native names. In order to call setter multiple time, the notation
of .@ATTRIBUTE@.@SORT@ is supported.
Examples:
The following will call LDAPConnectionPool.setMaxWaitTimeMillis(1000):
pool.default.connection-pool.maxWaitTimeMillis = 1000
The following will call DIGESTMD5BindRequestProperties.setAllowedQoP(AUTH, AUTH_CONF, AUTH_INT):
pool.default.auth.digest-md5.allowedQoP = AUTH, AUTH_CONF, AUTH_INT
SEQUENCES
---------
NOTE: Sequence names can be altered by extension configuration.
namespace
Sequence name of namespace query.
Used during initialization to determine namespaces.
Output:
query
namespaces (list)
namespaceDefault
authn
Sequence name of authentication.
Input:
user
password
Output:
authTranslatedMessage
PrincipalRecord_PRINCIPAL
message
credentials-change
Sequence name of credentials change.
Input:
user
password
passwordNew
resolve-principal
Sequence name of resolve principal.
Used during user login to fetch properties of principal name.
Input:
PrincipalRecord_PRINCIPAL
Output:
query*
resolve-groups
Sequence name of resolve groups out of DN.
Used during user login to fetch groups recursively.
Used during directory sync.
Input:
dn
dnType - principal|group
Output:
query*
query-principals
Sequence name of query principal.
Used during administrative tasks.
Input:
namespace
filter
Output:
query
query-groups
Sequence name of query groups.
Used during administrative tasks.
Input:
namespace
filter
Output:
query
MODEL
-----
POOL
Pool of LDAP connections, based on specific policy.
# Default settings
pool.default.*
# Specific settings
pool.@ID@.*
# CONNECTION OPTIONS
pool.default.connection-options.abandonOnTimeout = true
pool.default.connection-options.connectTimeoutMillis = 5000
pool.default.connection-options.responseTimeoutMillis = 60000
# Class: LDAPConnectionOptions.
# Documentation and options at:
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/LDAPConnectionOptions.html
pool.default.connection-options.@ATTRIBUTE@ = value
# POOL OPTIONS
pool.default.connection-pool.initialConnections = 4
pool.default.connection-pool.maxConnections = 20
pool.default.connection-pool.initialConnectThreads = 1
# Class: LDAPConnectionPool.
# Documentation and options at:
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/LDAPConnectionPool.html
pool.default.connection-pool.@ATTRIBUTE@ = value
# SOCKET FACTORY
pool.default.socketfactory.type = resolver
# standard java
pool.default.socketfactory.java
# jndi resolver hack
# Automatically detects usage of IP version for DNS resultion from default gateway
pool.default.socketfactory.resolver.detectIPVersion = true
# Enables support for IPv4 DNS resolution
# (it's applied if automatic detection doesn't work in the specific environment or if it's disabled)
pool.default.socketfactory.resolver.supportIPv4 = false
# Enables support for IPv6 DNS resolution
# (it's applied if automatic detection doesn't work in the specific environment or if it's disabled)
pool.default.socketfactory.resolver.supportIPv6 = false
# Cache lifetime of resolved addresses
pool.default.socketfactory.resolver.cacheTTL = 10000
# jndi URL to use
pool.default.socketfactory.resolver.uRL = dns://
# jndi properties to use, prefix is truncated.
pool.default.socketfactory.resolver.jndi-properties.@PROPERTY@ = @STRING@
# permit plain address usage
pool.default.socketfactory.resolver.enableAddressOnly = false
# SSL
pool.default.ssl.enable = false
pool.default.ssl.startTLS = false
pool.default.ssl.host-name-verify.enable = true
pool.default.ssl.host-name-verify.wildcards = true
pool.default.ssl.insecure = false
pool.default.ssl.protocol = TLSv1.2
pool.default.ssl.startTLSProtocol = TLSv1.2
pool.default.ssl.truststore.provider = (JRE default)
pool.default.ssl.truststore.type = (JRE default)
pool.default.ssl.truststore.file = (JRE default)
pool.default.ssl.truststore.password = (JRE default)|changeit
pool.default.ssl.keystore.provider = (JRE default)
pool.default.ssl.keystore.type = (JRE default)
pool.default.ssl.keystore.file = @FILE@
pool.default.ssl.keystore.password = changeit
pool.default.ssl.trustmanager.algorithm = (JRE default)
pool.default.ssl.keymanager.algorithm = (JRE default)
# SERVERSET
# Documentation at:
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/SingleServerSet.html
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/RoundRobinServerSet.html
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/FailoverServerSet.html
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/FastestConnectServerSet.html
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/FewestConnectionsServerSet.html
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/RoundRobinDNSServerSet.html
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/DNSSRVRecordServerSet.html
pool.default.serverset.type = single
pool.default.serverset.single.server = @STRING@
pool.default.serverset.single.port = 389
pool.default.serverset.{round-robin|failover|fastest-connect|fewest-connections}.@[email protected] = @STRING@
pool.default.serverset.{round-robin|failover|fastest-connect|fewest-connections}.@[email protected] = 389
pool.default.serverset.dns-round-robin.server = @STRING@
pool.default.serverset.dns-round-robin.port = 389
pool.default.serverset.dns-round-robin.selectionMode = RANDOM
pool.default.serverset.dns-round-robin.dnsRecordTypes = A
pool.default.serverset.dns-round-robin.cacheTimeoutMillis = @INT@
# jndi properties to use, prefix is truncated.
pool.default.serverset.dns-round-robin.jndi-properties.@PROPERTY@ = @STRING@
pool.default.serverset.srvrecord.service = ldap
pool.default.serverset.srvrecord.protocol = tcp
pool.default.serverset.srvrecord.domain = @STRING@
pool.default.serverset.srvrecord.ttlMillis = @INT@
# jndi properties to use, prefix is truncated.
pool.default.serverset.srvrecord.jndi-properties.@PROPERTY@ = @STRING@
# domain conversion
pool.default.serverset.srvrecord.domain-conversion.type = none
pool.default.serverset.srvrecord.domain-conversion.regex.pattern = @PATTERN@
pool.default.serverset.srvrecord.domain-conversion.regex.flags = @FLAGS@ # a for all
pool.default.serverset.srvrecord.domain-conversion.regex.replacement = @REPLACEMENT@
# domain conversion pre processing
pool.default.serverset.srvrecord.domain-conversion.prep.* = ...
# AUTHENTICATION
pool.default.auth.type = none
pool.default.auth.none
pool.default.auth.simple.bindDN = @STRING@
pool.default.auth.simple.password = @STRING@
pool.default.auth.external
pool.default.auth.sasl-anonymous
pool.default.auth.sasl-plain.authenticationID = @STRING@
pool.default.auth.sasl-plain.password = @STRING@
pool.default.auth.cram-md5.authenticationID = @STRING@
pool.default.auth.cram-md5.password = @STRING@
# Class: DIGESTMD5BindRequestProperties
# Documentation and options at:
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/DIGESTMD5BindRequest.html
pool.default.auth.digest-md5.@ATTRIBUTE@ = value
authenticationID = @STRING@
password = @STRING@
# Class: GSSAPIBindRequestProperties
# Documentation and options at:
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/GSSAPIBindRequestProperties.html
pool.default.auth.gssapi.@ATTRIBUTE@ = value
authenticationID = @STRING@
password = @STRING@
# DC RESOLVE
# enable so core will resolve dc=x,d=y component using srv record
# instead of chasing referrals.
pool.default.dc-resolve.enable = false
# pool properties may be overridden
pool.default.dc-resolve.default.@POOL_PROPERTY@ = @VALUE@
# pool properties may be overridden per domain
# notice: domain dots are converted to underscores.
pool.default.dc-resolve.@DOMAIN_DOT_AS_DASH@.@POOL_PROPERTY@ = @VALUE@
STATS
# statistics interval in milliseconds
stats.interval = 60000
AUTH CHECK
# Default settings
auth-check.default.*
# Specific settings
auth-check.@ID@.*
# Pool to use
auth-check.default.pool = @ID@
# User, most probably sequence variable.
auth-check.default.user = @STRING@
# Password, most probably sequence variable.
auth-check.default.password = @STRING@
# Authentication method, same as pool.auth.
auth-check.default.auth.*
auth-check.default.auth.type = simple
# Enable who am I if available (RFC-4532).
auth-check.default.whoami.enable = true
# Reuse connection after authentication attempt
auth-check.default.reuse-connections = false
ATTRIBUTE MAP
# NOTE: _dn is always alias for object dn.
# Default settings
attrmap.default.*
# Specific settings
attrmap.@POOLID@.*
# Enable attribute.
attrmap.default.attr.@[email protected] = true
# Conversion to use: STRING, BASE64, DATE, REGEX
attrmap.default.attr.@[email protected] = STRING
attrmap.default.attr.@[email protected] = @PATTERN@
attrmap.default.attr.@[email protected] = @REPLACEMENT@
attrmap.default.attr.@[email protected] = @PATTERN@
attrmap.default.attr.@[email protected] = @REPLACEMENT@
# Map attribute.
attrmap.default.attr.@[email protected] = @ATTRIBUTE@
SEARCH
# Default settings
search.default.*
# Specific settings
search.@ID@.*
# Pool id.
search.default.pool = @ID@
# Use paging.
search.default.paging = true
# Default page size.
search.default.pageSize = 100
# Limit.
search.default.limit = (Max Integer)
# Control dc-resolve
search.default.dc-resolve.enable = true
# Override search-requesst.baseDN
search.default.dc-resolve.override =
# SEARCH OPTIONS
# Class: SearchRequest.
# Documentation and options at:
# https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/SearchRequest.html
#
# NOTE:
# all variables are also available as @NAME@_encoded to be safely put within
# filter statement. DO NOT put raw variables.
#
search.default.search-request.@ATTRIBUTE@ = value
filter = @FILTER@
attributes = attr1, attr, ...
INITIALIZATION SEQUENCE
# Run sequence during initialization
# must not fail
sequence-init.init.@SORT@ = @ID@
# Run sequence during open, happens post
# initialization
sequence-init.open.@SORT@ = @ID@
SEQUENCE
# sequence description
sequence.@ID@.@[email protected] = @STRING@
# CONDITION
# Condition type.
sequence.@ID@.@[email protected] = true
# true condition.
sequence.@ID@.@[email protected]
# var-set
# Check if variable is set.
sequence.@ID@.@[email protected] = @VAR@
# compare
# Compare left and right.
# default string conversion and equals
sequence.@ID@.@[email protected] = string|numeric
sequence.@ID@.@[email protected] = @STRING@
sequence.@ID@.@[email protected] = @STRING@
sequence.@ID@.@[email protected] = -1|0|1
# invert result.
sequence.@ID@.@[email protected] = false
# OPCODES
# Opcode type
sequence.@ID@.@[email protected] = noop
# Noop
sequence.@ID@.@[email protected]
# Stop sequence
sequence.@ID@.@[email protected]
# Return from a sequence to previous
sequence.@ID@.@[email protected]
# Call other sequence
sequence.@ID@.@[email protected] = @ID@
# Iterate collection by calling sequence
sequence.@ID@.@[email protected] = @ID@
sequence.@ID@.@[email protected] = @VAR@
sequence.@ID@.@[email protected] = @VAR@ # will hold index default: forEachIndex
sequence.@ID@.@[email protected] = @VAR@ # will hold value default: forEachValue
# Log
# Log message at level (trace, debug, info, warn, error, fatal)
sequence.@ID@.@[email protected] = info
sequence.@ID@.@[email protected] = @STRING@
# Execute auth-check
sequence.@ID@.@[email protected] = @ID@
# Execute LDAP search
# Map attributes to variables.
# Select index of attribute, -1 stores entire list.
sequence.@ID@.@[email protected] = @ID@
sequence.@ID@.@[email protected] = false
sequence.@ID@.@[email protected] = @ID@ # optional sequence to run for each record
sequence.@ID@.@[email protected].@[email protected] = @VAR@
sequence.@ID@.@[email protected].@[email protected] = 0
# Set variable.
sequence.@ID@.@[email protected] = @VAR@
sequence.@ID@.@[email protected] = @STRING@
# Get entry from list.
sequence.@ID@.@[email protected] = @VAR@
sequence.@ID@.@[email protected] = @VAR@ # list content
sequence.@ID@.@[email protected] = @VAR@
# Set list.
sequence.@ID@.@[email protected] = @VAR@
sequence.@ID@.@[email protected].@[email protected] = @STRING@
sequence.@ID@.@[email protected].@[email protected] = @VAR@
sequence.@ID@.@[email protected].@[email protected] = @VAR@ # append list content
# Set system property.
sequence.@ID@.@[email protected] = @STRING@
sequence.@ID@.@[email protected] = @STRING@
# Execute regular expression.
# Apply pattern on value and execute replacements.
# At replacements ${xxx} can be used to replace group names.
sequence.@ID@.@[email protected] = @PATTERN@
sequence.@ID@.@[email protected] = @FLAGS@ # a for all, f for force
sequence.@ID@.@[email protected] = @STRING@
sequence.@ID@.@[email protected].@VAR@ = @REPLACEMENT@
# Execute credentials modify.
sequence.@ID@.@[email protected] = @ID@
sequence.@ID@.@[email protected] = @STRING@
sequence.@ID@.@[email protected] = @STRING@
sequence.@ID@.@[email protected] = @STRING@
# Register attribute map.
sequence.@ID@.@[email protected] = @ID@
# Create pool.
sequence.@ID@.@[email protected] = @ID@
# Open a search.
# Please instance into variable.
sequence.@ID@.@[email protected] = @ID@
sequence.@ID@.@[email protected] = @VAR@
# Get current time
sequence.@ID@.@[email protected] = @ID@
SENSITIVE KEYS
# sensitive components within property name.
sensitive-keys.@SORT@ = password