You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2014/10/17 19:48:00 UTC

svn commit: r1632641 - in /openmeetings: branches/3.0.x/src/main/java/org/apache/openmeetings/ldap/ branches/3.0.x/src/main/webapp/conf/ trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/ trunk/singlewebapp/openmeetin...

Author: solomax
Date: Fri Oct 17 17:48:00 2014
New Revision: 1632641

URL: http://svn.apache.org/r1632641
Log:
[OPENMEETINGS-1105] parameter to specify deref mode is added

Modified:
    openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java
    openmeetings/branches/3.0.x/src/main/webapp/conf/om_ldap.cfg
    openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/conf/om_ldap.cfg

Modified: openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java?rev=1632641&r1=1632640&r2=1632641&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java (original)
+++ openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java Fri Oct 17 17:48:00 2014
@@ -37,8 +37,11 @@ import org.apache.directory.api.ldap.mod
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
+import org.apache.directory.api.ldap.model.message.AliasDerefMode;
+import org.apache.directory.api.ldap.model.message.SearchRequestImpl;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.ldap.client.api.EntryCursorImpl;
 import org.apache.directory.ldap.client.api.LdapConnection;
 import org.apache.directory.ldap.client.api.LdapNetworkConnection;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
@@ -68,7 +71,7 @@ import org.springframework.beans.factory
  */
 public class LdapLoginManagement {
 	private static final Logger log = Red5LoggerFactory.getLogger(LdapLoginManagement.class, webAppRootKey);
-	// ConfigConstants
+	// Config constants
 	private static final String CONFIGKEY_LDAP_HOST = "ldap_conn_host";
 	private static final String CONFIGKEY_LDAP_PORT = "ldap_conn_port";
 	private static final String CONFIGKEY_LDAP_SECURE = "ldap_conn_secure";
@@ -85,6 +88,7 @@ public class LdapLoginManagement {
 	private static final String CONFIGKEY_LDAP_SEARCH_SCOPE = "ldap_search_scope";
 	private static final String CONFIGKEY_LDAP_USERDN_FORMAT = "ldap_userdn_format";
 	private static final String CONFIGKEY_LDAP_USE_ADMIN_4ATTRS = "ldap_use_admin_to_get_attrs";
+	private static final String CONFIGKEY_LDAP_DEREF_MODE = "ldap_deref_mode";
 	
 	// LDAP custom attribute mapping keys
 	private static final String CONFIGKEY_LDAP_KEY_LASTNAME = "ldap_user_attr_lastname";
@@ -199,7 +203,7 @@ public class LdapLoginManagement {
 		try {
 			type = AuthType.valueOf(ldap_auth_type);
 		} catch (Exception e) {
-			log.error("ConfigKey in Ldap Config contains invalid auth type : '%s' -> Defaulting to %s", ldap_auth_type, type);
+			log.error(String.format("ConfigKey in Ldap Config contains invalid auth type : '%s' -> Defaulting to %s", ldap_auth_type, type));
 		}
 		
 		String ldap_prov_type = config.getProperty(CONFIGKEY_LDAP_PROV_TYPE, "");
@@ -207,7 +211,15 @@ public class LdapLoginManagement {
 		try {
 			prov = Provisionning.valueOf(ldap_prov_type);
 		} catch (Exception e) {
-			log.error("ConfigKey in Ldap Config contains invalid provisionning type : '%s' -> Defaulting to %s", ldap_prov_type, prov);
+			log.error(String.format("ConfigKey in Ldap Config contains invalid provisionning type : '%s' -> Defaulting to %s", ldap_prov_type, prov));
+		}
+		
+		String ldap_deref_mode = config.getProperty(CONFIGKEY_LDAP_DEREF_MODE, "");
+		AliasDerefMode derefMode = AliasDerefMode.DEREF_ALWAYS;
+		try {
+			derefMode = AliasDerefMode.getDerefMode(ldap_deref_mode);
+		} catch (Exception e) {
+			log.error(String.format("ConfigKey in Ldap Config contains invalid deref mode : '%s' -> Defaulting to %s", ldap_deref_mode, derefMode));
 		}
 		
 		if (AuthType.NONE == type && Provisionning.NONE == prov) {
@@ -250,7 +262,14 @@ public class LdapLoginManagement {
 					Dn baseDn = new Dn(config.getProperty(CONFIGKEY_LDAP_SEARCH_BASE, ""));
 					String searchQ = String.format(config.getProperty(CONFIGKEY_LDAP_SEARCH_QUERY, "%s"), user);
 					SearchScope scope = SearchScope.valueOf(config.getProperty(CONFIGKEY_LDAP_SEARCH_SCOPE, SearchScope.ONELEVEL.name()));
-					EntryCursor cursor = conn.search(baseDn, searchQ, scope, "*");
+			        
+					EntryCursor cursor = new EntryCursorImpl(conn.search(
+							new SearchRequestImpl()
+								.setBase(baseDn)
+								.setFilter(searchQ)
+								.setScope(scope)
+								.addAttributes("*")
+								.setDerefAliases(derefMode)));
 					while (cursor.next()) {
 						try {
 							Entry e = cursor.get();

Modified: openmeetings/branches/3.0.x/src/main/webapp/conf/om_ldap.cfg
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/webapp/conf/om_ldap.cfg?rev=1632641&r1=1632640&r2=1632641&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/main/webapp/conf/om_ldap.cfg (original)
+++ openmeetings/branches/3.0.x/src/main/webapp/conf/om_ldap.cfg Fri Oct 17 17:48:00 2014
@@ -58,6 +58,9 @@ ldap_userdn_format=uid=%s,OU=Company,DC=
 # Ldap provisioning type(NONE, AUTOCREATE, AUTOUPDATE)
 ldap_provisionning=AUTOCREATE
 
+# Ldap deref mode (never, searching, finding, always)
+ldap_deref_mode=always
+
 #  Set this to 'true' if you want to use admin_dn to get user attributes
 #  If any other value is set, user_dn will be used
 ldap_use_admin_to_get_attrs=true

Modified: openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java?rev=1632641&r1=1632640&r2=1632641&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java Fri Oct 17 17:48:00 2014
@@ -37,8 +37,11 @@ import org.apache.directory.api.ldap.mod
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
+import org.apache.directory.api.ldap.model.message.AliasDerefMode;
+import org.apache.directory.api.ldap.model.message.SearchRequestImpl;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.ldap.client.api.EntryCursorImpl;
 import org.apache.directory.ldap.client.api.LdapConnection;
 import org.apache.directory.ldap.client.api.LdapNetworkConnection;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
@@ -68,7 +71,7 @@ import org.springframework.beans.factory
  */
 public class LdapLoginManagement {
 	private static final Logger log = Red5LoggerFactory.getLogger(LdapLoginManagement.class, webAppRootKey);
-	// ConfigConstants
+	// Config constants
 	private static final String CONFIGKEY_LDAP_HOST = "ldap_conn_host";
 	private static final String CONFIGKEY_LDAP_PORT = "ldap_conn_port";
 	private static final String CONFIGKEY_LDAP_SECURE = "ldap_conn_secure";
@@ -85,6 +88,7 @@ public class LdapLoginManagement {
 	private static final String CONFIGKEY_LDAP_SEARCH_SCOPE = "ldap_search_scope";
 	private static final String CONFIGKEY_LDAP_USERDN_FORMAT = "ldap_userdn_format";
 	private static final String CONFIGKEY_LDAP_USE_ADMIN_4ATTRS = "ldap_use_admin_to_get_attrs";
+	private static final String CONFIGKEY_LDAP_DEREF_MODE = "ldap_deref_mode";
 	
 	// LDAP custom attribute mapping keys
 	private static final String CONFIGKEY_LDAP_KEY_LASTNAME = "ldap_user_attr_lastname";
@@ -199,7 +203,7 @@ public class LdapLoginManagement {
 		try {
 			type = AuthType.valueOf(ldap_auth_type);
 		} catch (Exception e) {
-			log.error("ConfigKey in Ldap Config contains invalid auth type : '%s' -> Defaulting to %s", ldap_auth_type, type);
+			log.error(String.format("ConfigKey in Ldap Config contains invalid auth type : '%s' -> Defaulting to %s", ldap_auth_type, type));
 		}
 		
 		String ldap_prov_type = config.getProperty(CONFIGKEY_LDAP_PROV_TYPE, "");
@@ -207,7 +211,15 @@ public class LdapLoginManagement {
 		try {
 			prov = Provisionning.valueOf(ldap_prov_type);
 		} catch (Exception e) {
-			log.error("ConfigKey in Ldap Config contains invalid provisionning type : '%s' -> Defaulting to %s", ldap_prov_type, prov);
+			log.error(String.format("ConfigKey in Ldap Config contains invalid provisionning type : '%s' -> Defaulting to %s", ldap_prov_type, prov));
+		}
+		
+		String ldap_deref_mode = config.getProperty(CONFIGKEY_LDAP_DEREF_MODE, "");
+		AliasDerefMode derefMode = AliasDerefMode.DEREF_ALWAYS;
+		try {
+			derefMode = AliasDerefMode.getDerefMode(ldap_deref_mode);
+		} catch (Exception e) {
+			log.error(String.format("ConfigKey in Ldap Config contains invalid deref mode : '%s' -> Defaulting to %s", ldap_deref_mode, derefMode));
 		}
 		
 		if (AuthType.NONE == type && Provisionning.NONE == prov) {
@@ -250,7 +262,14 @@ public class LdapLoginManagement {
 					Dn baseDn = new Dn(config.getProperty(CONFIGKEY_LDAP_SEARCH_BASE, ""));
 					String searchQ = String.format(config.getProperty(CONFIGKEY_LDAP_SEARCH_QUERY, "%s"), user);
 					SearchScope scope = SearchScope.valueOf(config.getProperty(CONFIGKEY_LDAP_SEARCH_SCOPE, SearchScope.ONELEVEL.name()));
-					EntryCursor cursor = conn.search(baseDn, searchQ, scope, "*");
+			        
+					EntryCursor cursor = new EntryCursorImpl(conn.search(
+							new SearchRequestImpl()
+								.setBase(baseDn)
+								.setFilter(searchQ)
+								.setScope(scope)
+								.addAttributes("*")
+								.setDerefAliases(derefMode)));
 					while (cursor.next()) {
 						try {
 							Entry e = cursor.get();

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/conf/om_ldap.cfg
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/conf/om_ldap.cfg?rev=1632641&r1=1632640&r2=1632641&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/conf/om_ldap.cfg (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/conf/om_ldap.cfg Fri Oct 17 17:48:00 2014
@@ -58,6 +58,9 @@ ldap_userdn_format=uid=%s,OU=Company,DC=
 # Ldap provisioning type(NONE, AUTOCREATE, AUTOUPDATE)
 ldap_provisionning=AUTOCREATE
 
+# Ldap deref mode (never, searching, finding, always)
+ldap_deref_mode=always
+
 #  Set this to 'true' if you want to use admin_dn to get user attributes
 #  If any other value is set, user_dn will be used
 ldap_use_admin_to_get_attrs=true