#
#   Licensed to the Apache Software Foundation (ASF) under one
#   or more contributor license agreements.  See the NOTICE file
#   distributed with this work for additional information
#   regarding copyright ownership.  The ASF licenses this file
#   to you under the Apache License, Version 2.0 (the
#   "License"); you may not use this file except in compliance
#   with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing,
#   software distributed under the License is distributed on an
#   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#   KIND, either express or implied.  See the License for the
#   specific language governing permissions and limitations
#   under the License.
#
#
# Apache Fortress OpenLDAP slapd.conf default settings.
# Note: Directives that begin with '@' are substitution parms that get automatically replaced.

include		@SCHEMA_PATH@/core.schema
include		@SCHEMA_PATH@/ppolicy.schema
include		@SCHEMA_PATH@/cosine.schema
include		@SCHEMA_PATH@/inetorgperson.schema
include		@SCHEMA_PATH@/rfc2307bis.schema
include		@SCHEMA_PATH@/openldap.schema
include		@SCHEMA_PATH@/fortress.schema
@IS_RBAC_ACCELERATOR@include		@SCHEMA_PATH@/rbac.schema

### SSL Configuration
@IS_SSL@TLSCACertificateFile @CA_CERT_FILEW@
@IS_SSL@TLSCertificateFile @CERT_FILEW@
@IS_SSL@TLSCertificateKeyFile @CERT_KEY_FILEW@

disallow bind_anon
idletimeout 0
sizelimit 5000
timelimit 60
threads 8
loglevel 32768
gentlehup on
sortvals  roleOccupant
pidfile		@PID_PATH@/slapd.pid
argsfile	@PID_PATH@/slapd.args
modulepath	@SLAPD_MODULE_PATH@
moduleload	@DB_MODULE_NM@
moduleload	ppolicy.la
moduleload  accesslog.la
@RBAC_MODULE@
@DDS_MODULE@
@MONITOR_MODULE@

# Global ACLS:
# RootDSE is always readable
access to dn.base="" by * read

# For tooling:
access to dn.base="cn=subschema"
  by * read

password-hash {SSHA}

#######################################################################
# Access Log DB Settings
#######################################################################
database	 @DB_TYPE@
@LOG_RDRS@
@LOG_SIZE@
suffix		"@LOG_SUFFIX@"
rootdn      "@LOG_ROOT_DN@"
rootpw      "@LOG_ROOT_PW@"
index objectClass,reqDN,reqAuthzID,reqStart,reqAttr eq
directory	"@HISTORY_DB_PATH@"
access to *
    by dn.base="@LOG_ROOT_DN@" write
@LOG_DBNOSYNCH@
@LOG_CHECKPOINT@
@LOG_BDB_CACHE_SIZE@

# Accesslog is readable by replicator and fortress:
access to dn.subtree="@LOG_SUFFIX@"
        by dn.exact="cn=replicator,dc=admin,@SUFFIX@" read
        by dn.exact="cn=fortress-admin,dc=admin,@SUFFIX@" read
        by * break

#######################################################################
# Default DB Settings
#######################################################################
database	@DB_TYPE@
@DFLT_RDRS@
@DFLT_SIZE@
suffix      "@SUFFIX@"
rootdn      "@ROOT_DN@"
rootpw      "@ROOT_PW@"

index uidNumber,gidNumber,objectclass eq
index cn,sn,ftObjNm,ftOpNm,ftRoleName,uid,ou eq,sub
index ftId,ftPermName,ftRoles,ftUsers,ftRA,ftARA eq
index roleOccupant eq

directory	"@DEFAULT_DB_PATH@"
overlay accesslog
logdb   "@LOG_SUFFIX@"
@DFLT_DBNOSYNCH@
@DFLT_CHECKPOINT@
@DFLT_BDB_CACHE_SIZE@
@DFLT_BDB_CACHE_IDLE_SIZE@

# The fortress admin needs write access to the whole DIT
access to dn.subtree="@SUFFIX@"
        by dn.exact="cn=fortress-admin,dc=admin,@SUFFIX@" write
        by * break

# Accesslog is readable by replicator and fortress:
access to dn.subtree="@LOG_SUFFIX@"
        by dn.exact="cn=replicator,dc=admin,@SUFFIX@" read
        by dn.exact="cn=fortress-admin,dc=admin,@SUFFIX@" read
        by * break

# Allow anonymous ability to bind:
access to dn.subtree="@SUFFIX@" attrs=userPassword
  by anonymous auth
  by * break

# For audit trail:
# Allow users access to modify their own pw & fortress audit attrs.
access to dn.subtree="@SUFFIX@" attrs=userPassword,ftModifier,ftModCode,ftModId
  by self =wx
  by * none

# Allow users compare access to a fortress perm op name:
access to dn.subtree="@SUFFIX@" attrs=ftOpNm
  by users compare

#######################################################################
# More Audit Log Settings
#######################################################################
@LOGOPS@
logoldattr ftModifier ftModCode ftModId ftRC ftRA ftARC ftARA ftCstr ftId ftPermName ftObjNm ftOpNm ftObjId ftGroups ftRoles ftUsers ftType
logpurge 5+00:00 1+00:00

#######################################################################
# PW Policy Settings
#######################################################################
# Enable the Password Policy overlay to enforce password policies on this database.
overlay     ppolicy
ppolicy_default "cn=PasswordPolicy,@POLICIES_DN@"
ppolicy_use_lockout
ppolicy_hash_cleartext

#######################################################################
# RBAC Session database
#######################################################################
@IS_RBAC_ACCELERATOR@database mdb
@IS_RBAC_ACCELERATOR@suffix     "@SESSIONS_DN@"
@IS_RBAC_ACCELERATOR@rootdn	    "cn=manager,@SESSIONS_DN@"
@IS_RBAC_ACCELERATOR@rootpw	    @LOG_ROOT_PW@
@IS_RBAC_ACCELERATOR@index  rbacSessid  eq
@IS_RBAC_ACCELERATOR@directory  "@RBACSESS_DB_PATH@"
@IS_RBAC_ACCELERATOR@overlay     dds
@IS_RBAC_ACCELERATOR@dds-default-ttl 3600
@IS_RBAC_ACCELERATOR@dds-max-dynamicObjects	100000
@IS_RBAC_ACCELERATOR@@DFLT_DBNOSYNCH@
@IS_RBAC_ACCELERATOR@@DFLT_CHECKPOINT@

#######################################################################
# RBAC audit database
#######################################################################
@IS_RBAC_ACCELERATOR@database	mdb
@IS_RBAC_ACCELERATOR@suffix		"@AUDITS_DN@"
@IS_RBAC_ACCELERATOR@rootdn		"cn=manager,@AUDITS_DN@"
@IS_RBAC_ACCELERATOR@rootpw		@LOG_ROOT_PW@
@IS_RBAC_ACCELERATOR@directory	"@AUDIT_DB_PATH@"
@IS_RBAC_ACCELERATOR@@DFLT_DBNOSYNCH@
@IS_RBAC_ACCELERATOR@@DFLT_CHECKPOINT@

#######################################################################
# RBAC database
#######################################################################
@IS_RBAC_ACCELERATOR@database	mdb
@IS_RBAC_ACCELERATOR@suffix		"@RBAC_DN@"
@IS_RBAC_ACCELERATOR@rootdn		"cn=manager,@RBAC_DN@"
@IS_RBAC_ACCELERATOR@rootpw		@LOG_ROOT_PW@
@IS_RBAC_ACCELERATOR@directory	"@RBACOVERLAY_DB_PATH@"
@IS_RBAC_ACCELERATOR@overlay	rbac
@IS_RBAC_ACCELERATOR@rbac-default-users-base-dn "@USERS_DN@"
@IS_RBAC_ACCELERATOR@rbac-default-roles-base-dn "@ROLES_DN@"
@IS_RBAC_ACCELERATOR@rbac-default-permissions-base-dn "@PERMS_DN@"
@IS_RBAC_ACCELERATOR@rbac-default-sessions-base-dn "@SESSIONS_DN@"
@IS_RBAC_ACCELERATOR@rbac-default-audit-base-dn "@AUDITS_DN@"
@IS_RBAC_ACCELERATOR@rbac-admin "@ROOT_DN@"
@IS_RBAC_ACCELERATOR@rbac-pwd "@ROOT_PW@"
@IS_RBAC_ACCELERATOR@rbac-session-admin "cn=manager,@SESSIONS_DN@"
@IS_RBAC_ACCELERATOR@rbac-session-admin-pwd @LOG_ROOT_PW@
#@IS_RBAC_ACCELERATOR@rbac-default-tenant-id "@SUFFIX_NAME@"

#######################################################################
# Monitor database
#######################################################################
@IS_RBAC_ACCELERATOR@database monitor