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

# 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
