Index: lams_admin/conf/language/lams/ApplicationResources.properties =================================================================== RCS file: /usr/local/cvsroot/lams_admin/conf/language/lams/ApplicationResources.properties,v diff -u -r1.45 -r1.46 --- lams_admin/conf/language/lams/ApplicationResources.properties 18 Nov 2008 05:21:07 -0000 1.45 +++ lams_admin/conf/language/lams/ApplicationResources.properties 18 Nov 2008 07:19:53 -0000 1.46 @@ -371,6 +371,8 @@ label.database.version =Database Version config.ldap.search.filter = Search Filter config.ldap.base.dn = Base Distinguished Name +config.ldap.bind.user.dn = Bind User Distinguished Name +config.ldap.bind.user.password = Bind User Password #======= End labels: Exported 361 labels for en AU ===== Index: lams_admin/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== RCS file: /usr/local/cvsroot/lams_admin/conf/language/lams/ApplicationResources_en_AU.properties,v diff -u -r1.43 -r1.44 --- lams_admin/conf/language/lams/ApplicationResources_en_AU.properties 18 Nov 2008 05:21:07 -0000 1.43 +++ lams_admin/conf/language/lams/ApplicationResources_en_AU.properties 18 Nov 2008 07:19:53 -0000 1.44 @@ -371,6 +371,8 @@ label.database.version =Database Version config.ldap.search.filter = Search Filter config.ldap.base.dn = Base Distinguished Name +config.ldap.bind.user.dn = Bind User Distinguished Name +config.ldap.bind.user.password = Bind User Password #======= End labels: Exported 361 labels for en AU ===== Index: lams_admin/conf/language/rams/ApplicationResources.properties =================================================================== RCS file: /usr/local/cvsroot/lams_admin/conf/language/rams/Attic/ApplicationResources.properties,v diff -u -r1.11 -r1.12 --- lams_admin/conf/language/rams/ApplicationResources.properties 18 Nov 2008 05:21:07 -0000 1.11 +++ lams_admin/conf/language/rams/ApplicationResources.properties 18 Nov 2008 07:19:53 -0000 1.12 @@ -389,6 +389,8 @@ label.database.version = Database Version config.ldap.search.filter = Search Filter config.ldap.base.dn = Base Distinguished Name +config.ldap.bind.user.dn = Bind User Distinguished Name +config.ldap.bind.user.password = Bind User Password #======= End labels: Exported 378 labels for en AU ===== Index: lams_admin/conf/language/rams/ApplicationResources_en_AU.properties =================================================================== RCS file: /usr/local/cvsroot/lams_admin/conf/language/rams/Attic/ApplicationResources_en_AU.properties,v diff -u -r1.10 -r1.11 --- lams_admin/conf/language/rams/ApplicationResources_en_AU.properties 18 Nov 2008 05:21:07 -0000 1.10 +++ lams_admin/conf/language/rams/ApplicationResources_en_AU.properties 18 Nov 2008 07:19:53 -0000 1.11 @@ -389,6 +389,8 @@ label.database.version = Database Version config.ldap.search.filter = Search Filter config.ldap.base.dn = Base Distinguished Name +config.ldap.bind.user.dn = Bind User Distinguished Name +config.ldap.bind.user.password = Bind User Password #======= End labels: Exported 378 labels for en AU ===== Index: lams_central/src/java/org/lamsfoundation/lams/security/LDAPAuthenticator.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/security/LDAPAuthenticator.java,v diff -u -r1.15 -r1.16 --- lams_central/src/java/org/lamsfoundation/lams/security/LDAPAuthenticator.java 18 Nov 2008 05:21:07 -0000 1.15 +++ lams_central/src/java/org/lamsfoundation/lams/security/LDAPAuthenticator.java 18 Nov 2008 07:19:53 -0000 1.16 @@ -105,6 +105,12 @@ env.setProperty(Context.SECURITY_PROTOCOL, securityProtocol); } + // setup initial bind user credentials if configured + if (StringUtils.isNotBlank(Configuration.get(ConfigurationKeys.LDAP_BIND_USER_DN))) { + env.setProperty(Context.SECURITY_PRINCIPAL, Configuration.get(ConfigurationKeys.LDAP_BIND_USER_DN)); + env.setProperty(Context.SECURITY_CREDENTIALS, Configuration.get(ConfigurationKeys.LDAP_BIND_USER_PASSWORD)); + } + String login = ""; String dn = ""; boolean isValid = false; @@ -141,16 +147,19 @@ if (StringUtils.equals(login, username)) { // now we can try to authenticate dn = result.getNameInNamespace(); + setAttrs(attrs); ctx.close(); break; } } if (StringUtils.isBlank(login)) { - log.error("===> No LDAP user found with username: " + username); + log.error("===> No LDAP user found with username: " + username + + ". This could mean that the user doesn't exist or that an initial bind user is required."); } + // authenticate env.setProperty(Context.SECURITY_PRINCIPAL, dn); - env.put(Context.SECURITY_CREDENTIALS, credential); + env.setProperty(Context.SECURITY_CREDENTIALS, credential.toString()); ctx = new InitialLdapContext(env, null); // if no exception, success @@ -159,18 +168,15 @@ // start checking whether we need to update user depending on its // attributes - Attributes attrs = ctx.getAttributes(dn); - setAttrs(attrs); - if (log.isDebugEnabled()) { - NamingEnumeration enumAttrs = attrs.getAll(); + NamingEnumeration enumAttrs = this.attrs.getAll(); while (enumAttrs.hasMoreElements()) { log.debug(enumAttrs.next()); } } // check user is disabled in ldap - if (getLdapService().getDisabledBoolean(attrs)) { + if (getLdapService().getDisabledBoolean(this.attrs)) { log.debug("===> User is disabled in LDAP."); User user = getService().getUserByLogin(username); if (user != null) { @@ -183,8 +189,8 @@ User user = getService().getUserByLogin(username); if (user != null) { // update user's attributes and org membership - getLdapService().updateLDAPUser(user, attrs); - getLdapService().addLDAPUser(attrs, user.getUserId()); + getLdapService().updateLDAPUser(user, this.attrs); + getLdapService().addLDAPUser(this.attrs, user.getUserId()); } } Index: lams_common/db/sql/insert_lams_unix_config_data.sql =================================================================== RCS file: /usr/local/cvsroot/lams_common/db/sql/insert_lams_unix_config_data.sql,v diff -u -r1.32 -r1.33 --- lams_common/db/sql/insert_lams_unix_config_data.sql 18 Nov 2008 05:21:07 -0000 1.32 +++ lams_common/db/sql/insert_lams_unix_config_data.sql 18 Nov 2008 07:19:53 -0000 1.33 @@ -113,9 +113,15 @@ values ('LDAPSearchFilter','(cn={0})', 'config.ldap.search.filter', 'config.header.ldap', 'STRING', 0); insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) -values ('LDAPBaseDN',',ou=Users,dc=melcoe,dc=mq,dc=edu,dc=au', 'config.ldap.base.dn', 'config.header.ldap', 'STRING', 0); +values ('LDAPBaseDN','ou=Users,dc=melcoe,dc=mq,dc=edu,dc=au', 'config.ldap.base.dn', 'config.header.ldap', 'STRING', 0); insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) +values ('LDAPBindUserDN','', 'config.ldap.bind.user.dn', 'config.header.ldap', 'STRING', 0); + +insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) +values ('LDAPBindUserPassword','', 'config.ldap.bind.user.password', 'config.header.ldap', 'STRING', 0); + +insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) values ('LDAPSecurityProtocol','', 'config.ldap.security.protocol', 'config.header.ldap', 'STRING', 0); insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) Index: lams_common/db/sql/insert_lams_windows_config_data.sql =================================================================== RCS file: /usr/local/cvsroot/lams_common/db/sql/insert_lams_windows_config_data.sql,v diff -u -r1.27 -r1.28 --- lams_common/db/sql/insert_lams_windows_config_data.sql 18 Nov 2008 05:21:07 -0000 1.27 +++ lams_common/db/sql/insert_lams_windows_config_data.sql 18 Nov 2008 07:19:53 -0000 1.28 @@ -116,6 +116,12 @@ values ('LDAPBaseDN',',ou=Users,dc=melcoe,dc=mq,dc=edu,dc=au', 'config.ldap.base.dn', 'config.header.ldap', 'STRING', 0); insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) +values ('LDAPBindUserDN','', 'config.ldap.bind.user.dn', 'config.header.ldap', 'STRING', 0); + +insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) +values ('LDAPBindUserPassword','', 'config.ldap.bind.user.password', 'config.header.ldap', 'STRING', 0); + +insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) values ('LDAPSecurityProtocol','', 'config.ldap.security.protocol', 'config.header.ldap', 'STRING', 0); insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) Index: lams_common/db/sql/insert_rams_unix_config_data.sql =================================================================== RCS file: /usr/local/cvsroot/lams_common/db/sql/Attic/insert_rams_unix_config_data.sql,v diff -u -r1.19 -r1.20 --- lams_common/db/sql/insert_rams_unix_config_data.sql 18 Nov 2008 05:21:07 -0000 1.19 +++ lams_common/db/sql/insert_rams_unix_config_data.sql 18 Nov 2008 07:19:53 -0000 1.20 @@ -116,6 +116,12 @@ values ('LDAPBaseDN',',ou=Users,dc=melcoe,dc=mq,dc=edu,dc=au', 'config.ldap.base.dn', 'config.header.ldap', 'STRING', 0); insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) +values ('LDAPBindUserDN','', 'config.ldap.bind.user.dn', 'config.header.ldap', 'STRING', 0); + +insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) +values ('LDAPBindUserPassword','', 'config.ldap.bind.user.password', 'config.header.ldap', 'STRING', 0); + +insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) values ('LDAPSecurityProtocol','', 'config.ldap.security.protocol', 'config.header.ldap', 'STRING', 0); insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) Index: lams_common/db/sql/insert_rams_windows_config_data.sql =================================================================== RCS file: /usr/local/cvsroot/lams_common/db/sql/Attic/insert_rams_windows_config_data.sql,v diff -u -r1.16 -r1.17 --- lams_common/db/sql/insert_rams_windows_config_data.sql 18 Nov 2008 05:21:07 -0000 1.16 +++ lams_common/db/sql/insert_rams_windows_config_data.sql 18 Nov 2008 07:19:53 -0000 1.17 @@ -116,6 +116,12 @@ values ('LDAPBaseDN',',ou=Users,dc=melcoe,dc=mq,dc=edu,dc=au', 'config.ldap.base.dn', 'config.header.ldap', 'STRING', 0); insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) +values ('LDAPBindUserDN','', 'config.ldap.bind.user.dn', 'config.header.ldap', 'STRING', 0); + +insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) +values ('LDAPBindUserPassword','', 'config.ldap.bind.user.password', 'config.header.ldap', 'STRING', 0); + +insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) values ('LDAPSecurityProtocol','', 'config.ldap.security.protocol', 'config.header.ldap', 'STRING', 0); insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch0013_updateFrom21.sql =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch0013_updateFrom21.sql,v diff -u -r1.15 -r1.16 --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch0013_updateFrom21.sql 18 Nov 2008 05:21:07 -0000 1.15 +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch0013_updateFrom21.sql 18 Nov 2008 07:19:53 -0000 1.16 @@ -74,6 +74,12 @@ UPDATE lams_configuration SET config_value='LDAPSearchFilter', description_key='config.ldap.search.filter' WHERE config_key='LDAPPrincipalDNPrefix'; UPDATE lams_configuration SET config_value='LDAPBaseDN', description_key='config.ldap.base.dn' WHERE config_key='LDAPPrincipalDNSuffix'; +-- LDEV-2029 - configurable initial bind user for ldap +insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) +values ('LDAPBindUserDN','', 'config.ldap.bind.user.dn', 'config.header.ldap', 'STRING', 0); +insert into lams_configuration (config_key, config_value, description_key, header_name, format, required) +values ('LDAPBindUserPassword','', 'config.ldap.bind.user.password', 'config.header.ldap', 'STRING', 0); + ----------------------Put all sql statements above here------------------------- -- If there were no errors, commit and restore autocommit to on Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/LdapService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/LdapService.java,v diff -u -r1.15 -r1.16 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/LdapService.java 18 Nov 2008 05:21:07 -0000 1.15 +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/LdapService.java 18 Nov 2008 07:19:53 -0000 1.16 @@ -434,6 +434,12 @@ if (StringUtils.equals("ssl", securityProtocol)) { env.setProperty(Context.SECURITY_PROTOCOL, securityProtocol); } + + // setup initial bind user credentials if configured + if (StringUtils.isNotBlank(Configuration.get(ConfigurationKeys.LDAP_BIND_USER_DN))) { + env.setProperty(Context.SECURITY_PRINCIPAL, Configuration.get(ConfigurationKeys.LDAP_BIND_USER_DN)); + env.setProperty(Context.SECURITY_CREDENTIALS, Configuration.get(ConfigurationKeys.LDAP_BIND_USER_PASSWORD)); + } // get base DN to search on String baseDN = Configuration.get(ConfigurationKeys.LDAP_BASE_DN);