#
# 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.
# 
#ConfigurationFile for LDAP Auth
#ConfigKey 'ldap_config_path' must be set in DataBase Configration of OM and point to this file
#o.becherer,14.01.2009

#specify the LDAP Server type
# This parameter specifies the type of LDAP server your are defining
# 
# Supported values are "OpenLDAP" and "AD" for Active Directory (defaults to AD).
ldap_server_type=OpenLDAP

#LDAP URL
# This is the URL used to access your LDAP server.

# can be a simple URL like: 
#   ldap_conn_url=ldap://myldap.myorg.com
# or a list of simple URL separated by a space as in: 
#   ldap_conn_url=ldap://myldap.myorg.com ldap://myldap2.myorg.com 
# if you want to use "ldaps://" links, please be aware that you need to import your CA certificate
#  to a java keystore and add the -Djavax.net.ssl.keyStore, -Djavax.net.ssl.keyStorePassword,
#  -Djavax.net.ssl.trustStore and -Djavax.net.ssl.trustStorePassword parameters to your 
#  JAVA_OPT environment
ldap_conn_url=ldap://dc2.medint.local:389

#Login distinguished name (DN) for Authentification on LDAP Server - keep emtpy if not requiered
# Use DN with with ":" instead of "=". The conversion will be done in OM
ldap_admin_dn=CN:dummy,OU:external users,OU:Other,DC:medint,DC:local

#Loginpass for Authentification on LDAP Server - keep emtpy if not requiered
ldap_passwd=dummy07

#base to search for userdata(of user, that wants to login)
# Use DN with with ":" instead of "=". The conversion will be done in OM
ldap_search_base=OU:Company,DC:medint,DC:local

# Fieldnames (can differ between Ldap servers) 
field_user_principal=uid

# Ldap auth type(SIMPLE,NONE)
#  When using SIMPLE a simple bind is performed on the LDAP server to check user authentication
#  When using NONE, the Ldap server is not used for authentication
ldap_auth_type=SIMPLE

# Ldap-password synchronization to OM DB
#  Set this to 'yes' if you want OM to synchronize the user Ldap-password to OM's internal DB
#  This enables local login of users if the ldap server is offline.
#  If you want to disable the feature, set this to 'no'.
#  Defautl value is 'yes'
ldap_sync_password_to_om=yes


# Ldap user attributes mapping
# Set the following internal OM user attributes to their corresponding Ldap-attribute
ldap_user_attr_lastname=sn
ldap_user_attr_firstname=givenName
ldap_user_attr_mail=mail
ldap_user_attr_street=streetAddress
ldap_user_attr_additionalname=description
ldap_user_attr_fax=facsimileTelephoneNumber
ldap_user_attr_zip=postalCode
ldap_user_attr_country=co
ldap_user_attr_town=l
ldap_user_attr_phone=telephoneNumber

# optional, only absolute URLs make sense
#ldap_user_picture_uri=picture_uri

# optional
# the timezone has to mach an entry in the OpenMeetings table "omtimezones" otherwise the user will get
# the timezone defined in the value of the conf_key "default.timezone" in OpenMeetings "configurations" table
#ldap_user_timezone=timezone

# Ldap ignore upper/lower case, convert all input to lower case
ldap_use_lower_case=false
