#
# Copyright (c) 2009-2013, JoshuaTree. All Rights Reserved.
#
#Use this property file to specify environment specific settings.
version=1.0-RC35

# 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=jts
suffix.dc=us
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
