#
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
# Copyright 1998-2014 The OpenLDAP Foundation.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted only as authorized by the OpenLDAP
# Public License.
#
# A copy of this license is available in the file LICENSE in the
# top-level directory of the distribution or, alternatively, at
# <http://www.OpenLDAP.org/license.html>.
#
# Fortress slapd.conf default settings.
# Note: Directives that begin with '@' are substitution parms for Fortress' build.xml 'init-slapd' target.

#Use this property file to specify environment specific settings.
version=1.0-RC38

# Enable this property if computer does not have external connection to Internet:
local.mode=true

tomcat-realm.conf=<Realm className="us.jts.sentry.tomcat.Tc7AccessMgrProxy" debug="0" resourceName="UserDatabase" containerType="Tomcat7" realmClasspath="${user.dir}/conf:${user.dir}/dist/fortressSentry-${version}.jar"/>
tomcat.dir=../apache-tomcat

# If encryption of LDAP passwords is required, this value must be set:.
crypto.prop=abcd12345

# Host name and port of LDAP DIT:
ldap.host=localhost
ldap.port=389
# example suffix, dc=example,dc=com:
suffix.name=openldap
suffix.dc=org
suffix=dc=${suffix.name},dc=${suffix.dc}

# Admin Pool:
root.dn=cn=Manager,${suffix}
# This OpenLDAP admin root password is bound for slapd.conf and was encrypted using 'slappasswd' command:
root.pw={SSHA}pSOV2TpCxj2NMACijkcMko4fGrFopctU
# This OpenLDAP admin root pass is bound for fortress.properties and was encrypted using 'encrypt' target in build.xml:
cfg.root.pw=W7T0G9hylKZQ4K+DF8gfgA==
admin.min.conn=1
admin.max.conn=10

# User Pool:
user.min.conn=1
user.max.conn=10

# Setting properties for jars files overrides (if need to use different versions than in build.xml)
#junit.jar=${lib.dir}/junit-4.9.jar
#log4j.jar=${lib.dir}/log4j-1.2.16.jar
#commons-config.jar=${lib.dir}/commons-configuration-1.6.jar
#commons-lang.jar=${lib.dir}/commons-lang-2.4.jar
#commons-collections.jar=${lib.dir}/commons-collections-3.2.1.jar
#commons-pool.jar=${lib.dir}/commons-pool-1.5.2.jar
#commons-logging.jar=${lib.dir}/commons-logging-1.1.1.jar
#unboundsdk.jar=${lib.dir}/unboundid-ldapsdk-se.jar
#jgraph.jar=${lib.dir}/jgrapht-jdk1.6.jar
