Index: jldap/src/java/edu/amc/sakai/user/SimpleLdapAttributeMapper.java
===================================================================
--- jldap/src/java/edu/amc/sakai/user/SimpleLdapAttributeMapper.java (revision 308434)
+++ jldap/src/java/edu/amc/sakai/user/SimpleLdapAttributeMapper.java (working copy)
@@ -172,6 +172,12 @@
}
}
+ public String getFindUserByAidFilter(String aid) {
+ String eidAttr =
+ attributeMappings.get(AttributeMappingConstants.AUTHENTICATION_ATTR_MAPPING_KEY);
+ return eidAttr + "=" + escapeSearchFilterTerm(aid);
+ }
+
/**
* Performs {@link LDAPEntry}-to-{@Link LdapUserData} attribute
* mappings. Assigns the given {@link LDAPEntry}'s DN to the
Index: jldap/src/java/edu/amc/sakai/user/LdapAttributeMapper.java
===================================================================
--- jldap/src/java/edu/amc/sakai/user/LdapAttributeMapper.java (revision 308434)
+++ jldap/src/java/edu/amc/sakai/user/LdapAttributeMapper.java (working copy)
@@ -63,6 +63,14 @@
public String getFindUserByEidFilter(String eid);
/**
+ * Output a filter string for searching the directory with
+ * the specified user aid as a key.
+ * @param aid a user authentication id.
+ * @return an LDAP search filter
+ */
+ public String getFindUserByAidFilter(String aid);
+
+ /**
* Maps attribites from the specified LDAPEntry
onto
* a {@link LdapUserData}.
*
Index: jldap/src/java/edu/amc/sakai/user/AttributeMappingConstants.java
===================================================================
--- jldap/src/java/edu/amc/sakai/user/AttributeMappingConstants.java (revision 308434)
+++ jldap/src/java/edu/amc/sakai/user/AttributeMappingConstants.java (working copy)
@@ -38,6 +38,11 @@
public static final String LOGIN_ATTR_MAPPING_KEY = "login";
/** Key into {@link #DEFAULT_ATTR_MAPPINGS} representing the logical
+ * name of a user entry's authentication (aka Sakai "AID") attribute
+ */
+ public static final String AUTHENTICATION_ATTR_MAPPING_KEY = "aid";
+
+ /** Key into {@link #DEFAULT_ATTR_MAPPINGS} representing the logical
* name of a user entry's given name attribute
*/
public static final String FIRST_NAME_ATTR_MAPPING_KEY = "firstName";
@@ -68,6 +73,11 @@
public static final String DEFAULT_LOGIN_ATTR = "cn";
/** Default value in {@link #DEFAULT_ATTR_MAPPINGS} representing
+ * the physical name of a user entry's authentication (aka Sakai "AID") attribute
+ */
+ public static final String DEFAULT_AUTHENTICATION_ATTR = "dn";
+
+ /** Default value in {@link #DEFAULT_ATTR_MAPPINGS} representing
* the physical name of a user entry's given name attribute
*/
public static final String DEFAULT_FIRST_NAME_ATTR = "givenName";
@@ -102,6 +112,7 @@
static {
DEFAULT_ATTR_MAPPINGS.put(LOGIN_ATTR_MAPPING_KEY, DEFAULT_LOGIN_ATTR);
+ DEFAULT_ATTR_MAPPINGS.put(AUTHENTICATION_ATTR_MAPPING_KEY, DEFAULT_AUTHENTICATION_ATTR);
DEFAULT_ATTR_MAPPINGS.put(FIRST_NAME_ATTR_MAPPING_KEY, DEFAULT_FIRST_NAME_ATTR);
DEFAULT_ATTR_MAPPINGS.put(PREFERRED_FIRST_NAME_ATTR_MAPPING_KEY, DEFAULT_PREFERRED_FIRST_NAME_ATTR);
DEFAULT_ATTR_MAPPINGS.put(LAST_NAME_ATTR_MAPPING_KEY, DEFAULT_LAST_NAME_ATTR);
Index: jldap/src/java/edu/amc/sakai/user/LdapConnectionManagerConfig.java
===================================================================
--- jldap/src/java/edu/amc/sakai/user/LdapConnectionManagerConfig.java (revision 308434)
+++ jldap/src/java/edu/amc/sakai/user/LdapConnectionManagerConfig.java (working copy)
@@ -233,4 +233,9 @@
* @param maxResultSize The maximum number of results to ever get back from LDAP.
*/
public void setMaxResultSize(int maxResultSize);
+
+ /**
+ * @param enable If true
then perform searches for users by Authentication ID.
+ */
+ public void setEnableAid(boolean enable);
}
Index: jldap/src/java/edu/amc/sakai/user/JLDAPDirectoryProvider.java
===================================================================
--- jldap/src/java/edu/amc/sakai/user/JLDAPDirectoryProvider.java (revision 308434)
+++ jldap/src/java/edu/amc/sakai/user/JLDAPDirectoryProvider.java (working copy)
@@ -32,6 +32,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.user.api.ExternalUserSearchUDP;
+import org.sakaiproject.user.api.AuthenticationIdUDP;
import org.sakaiproject.user.api.User;
import org.sakaiproject.user.api.UserDirectoryProvider;
import org.sakaiproject.user.api.UserEdit;
@@ -57,7 +58,7 @@
* @author David Ross, Albany Medical College
* @author Rishi Pande, Virginia Tech
*/
-public class JLDAPDirectoryProvider implements UserDirectoryProvider, LdapConnectionManagerConfig, ExternalUserSearchUDP, UsersShareEmailUDP
+public class JLDAPDirectoryProvider implements UserDirectoryProvider, LdapConnectionManagerConfig, ExternalUserSearchUDP, AuthenticationIdUDP, UsersShareEmailUDP
{
/** Default LDAP connection port */
public static final int DEFAULT_LDAP_PORT = 389;
@@ -158,6 +159,9 @@
private int searchScope = DEFAULT_SEARCH_SCOPE;
+ /** Should the provider support searching by Authentication ID */
+ private boolean enableAid = false;
+
/**
* User entry attribute mappings. Keys are logical attr names,
* values are physical attr names.
@@ -581,6 +585,34 @@
}
+ public boolean getUserbyAid(String aid, UserEdit user)
+ {
+ // Only do search if we're enabled.
+ if (!(enableAid)) {
+ return false;
+ }
+ LdapUserData foundUserData = getUserByAid(aid, null);
+ if ( foundUserData == null ) {
+ return false;
+ }
+ if ( user != null ) {
+ mapUserDataOntoUserEdit(foundUserData, user);
+ }
+ return true;
+ }
+
+ public LdapUserData getUserByAid(String aid, LDAPConnection conn) {
+ String filter = ldapAttributeMapper.getFindUserByAidFilter(aid);
+ LdapUserData mappedEntry = null;
+ try {
+ mappedEntry = (LdapUserData) searchDirectoryForSingleEntry(filter,
+ conn, null, null, null);
+ } catch (LDAPException e) {
+ M_log.error("Failed to find user for AID: " + aid, e);
+ }
+ return mappedEntry;
+ }
+
/**
* Similar to iterating over users
passing
* each element to {@link #getUser(UserEdit)}, removing the
@@ -817,7 +849,13 @@
"][reusing conn = " + (conn != null) + "]");
}
- LdapUserData foundUserData = getUserByEid(eid, conn);
+ LdapUserData foundUserData;
+ if (enableAid) {
+ foundUserData = getUserByAid(eid, conn);
+ } else {
+ foundUserData = getUserByEid(eid, conn);
+ }
+
if ( foundUserData == null ) {
if ( M_log.isDebugEnabled() ) {
M_log.debug("lookupUserEntryDN(): no directory entried found [eid = " +
@@ -1344,6 +1382,13 @@
/**
* {@inheritDoc}
*/
+ public void setEnableAid(boolean enableAid) {
+ this.enableAid = enableAid;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public int getMaxResultSize() {
return maxResultSize;
}
Index: component/src/webapp/WEB-INF/jldap-beans.xml
===================================================================
--- component/src/webapp/WEB-INF/jldap-beans.xml (revision 308434)
+++ component/src/webapp/WEB-INF/jldap-beans.xml (working copy)
@@ -154,6 +154,13 @@
+
+
+