Better deal with multiple user directories.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / auth / UserAdminUtils.java
index 3dbc7ad52fa03a7792afecaf6cd53757604bba7e..ad53086f5c206249d4b066fc7f5f90b0e087ab2b 100644 (file)
@@ -7,7 +7,6 @@ import javax.naming.ldap.LdapName;
 import javax.naming.ldap.Rdn;
 
 import org.argeo.api.NodeConstants;
-import org.argeo.cms.CmsException;
 import org.argeo.naming.LdapAttrs;
 import org.osgi.service.useradmin.Role;
 import org.osgi.service.useradmin.User;
@@ -59,7 +58,7 @@ public class UserAdminUtils {
                                || last.getType().toLowerCase().equals(LdapAttrs.cn.name()))
                        return (String) last.getValue();
                else
-                       throw new CmsException("Cannot retrieve user local id, non valid dn: " + dn);
+                       throw new IllegalArgumentException("Cannot retrieve user local id, non valid dn: " + dn);
        }
 
        /**
@@ -129,7 +128,7 @@ public class UserAdminUtils {
                try {
                        return new LdapName(dn);
                } catch (InvalidNameException e) {
-                       throw new CmsException("Cannot parse LDAP name " + dn, e);
+                       throw new IllegalArgumentException("Cannot parse LDAP name " + dn, e);
                }
        }
 
@@ -148,7 +147,8 @@ public class UserAdminUtils {
                        int i = 0;
                        loop: while (i < rdns.size()) {
                                Rdn currrRdn = rdns.get(i);
-                               if (!LdapAttrs.dc.name().equals(currrRdn.getType()))
+                               if (LdapAttrs.uid.name().equals(currrRdn.getType()) || LdapAttrs.cn.name().equals(currrRdn.getType())
+                                               || LdapAttrs.ou.name().equals(currrRdn.getType()))
                                        break loop;
                                else {
                                        String currVal = (String) currrRdn.getValue();
@@ -158,7 +158,7 @@ public class UserAdminUtils {
                        }
                        return dname;
                } catch (InvalidNameException e) {
-                       throw new CmsException("Unable to get domain name for " + dn, e);
+                       throw new IllegalArgumentException("Unable to get domain name for " + dn, e);
                }
        }