]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.util/src/org/argeo/util/directory/ldap/LdapDao.java
Support IPA
[lgpl/argeo-commons.git] / org.argeo.util / src / org / argeo / util / directory / ldap / LdapDao.java
index a2d9e7fc3bbc0c33fbb4cadaff5cbcbdd06349d7..c33b50f65fb9a1a781bb62de4535b63b25198c63 100644 (file)
@@ -35,7 +35,7 @@ public class LdapDao extends AbstractLdapDirectoryDao {
 
        @Override
        public void init() {
-               ldapConnection = new LdapConnection(getDirectory().getUri().toString(), getDirectory().getProperties());
+               ldapConnection = new LdapConnection(getDirectory().getUri().toString(), getDirectory().cloneConfigProperties());
        }
 
        public void destroy() {
@@ -66,26 +66,35 @@ public class LdapDao extends AbstractLdapDirectoryDao {
 //     }
 
        @Override
-       public Boolean daoHasEntry(LdapName dn) {
+       public Boolean entryExists(LdapName dn) {
                try {
-                       return daoGetEntry(dn) != null;
+                       return doGetEntry(dn) != null;
                } catch (NameNotFoundException e) {
                        return false;
                }
        }
 
        @Override
-       public LdapEntry daoGetEntry(LdapName name) throws NameNotFoundException {
+       public LdapEntry doGetEntry(LdapName name) throws NameNotFoundException {
                try {
                        Attributes attrs = ldapConnection.getAttributes(name);
                        if (attrs.size() == 0)
                                return null;
 //                     int roleType = roleType(name);
                        LdapEntry res;
-                       if (isGroup(name))
+                       Rdn technicalRdn = LdapNameUtils.getParentRdn(name);
+                       if (getDirectory().getGroupBaseRdn().equals(technicalRdn))
                                res = newGroup(name, attrs);
-                       else
+                       else if (getDirectory().getSystemRoleBaseRdn().equals(technicalRdn))
+                               res = newGroup(name, attrs);
+                       else if (getDirectory().getUserBaseRdn().equals(technicalRdn))
                                res = newUser(name, attrs);
+                       else
+                               res = new DefaultLdapEntry(getDirectory(), name, attrs);
+//                     if (isGroup(name))
+//                             res = newGroup(name, attrs);
+//                     else
+//                             res = newUser(name, attrs);
 //                     else
 //                             throw new IllegalArgumentException("Unsupported LDAP type for " + name);
                        return res;
@@ -96,17 +105,17 @@ public class LdapDao extends AbstractLdapDirectoryDao {
                }
        }
 
-       protected boolean isGroup(LdapName dn) {
-               Rdn technicalRdn = LdapNameUtils.getParentRdn(dn);
-               if (getDirectory().getGroupBaseRdn().equals(technicalRdn)
-                               || getDirectory().getSystemRoleBaseRdn().equals(technicalRdn))
-                       return true;
-               else if (getDirectory().getUserBaseRdn().equals(technicalRdn))
-                       return false;
-               else
-                       throw new IllegalArgumentException(
-                                       "Cannot dind role type, " + technicalRdn + " is not a technical RDN for " + dn);
-       }
+//     protected boolean isGroup(LdapName dn) {
+//             Rdn technicalRdn = LdapNameUtils.getParentRdn(dn);
+//             if (getDirectory().getGroupBaseRdn().equals(technicalRdn)
+//                             || getDirectory().getSystemRoleBaseRdn().equals(technicalRdn))
+//                     return true;
+//             else if (getDirectory().getUserBaseRdn().equals(technicalRdn))
+//                     return false;
+//             else
+//                     throw new IllegalArgumentException(
+//                                     "Cannot find role type, " + technicalRdn + " is not a technical RDN for " + dn);
+//     }
 
        @Override
        public List<LdapEntry> doGetEntries(LdapName searchBase, String f, boolean deep) {
@@ -210,6 +219,8 @@ public class LdapDao extends AbstractLdapDirectoryDao {
                try {
                        String searchFilter = "(|(" + objectClass + "=" + LdapObjs.organizationalUnit.name() + ")(" + objectClass
                                        + "=" + LdapObjs.organization.name() + "))";
+//                     String searchFilter = "(|(" + objectClass + "=" + LdapObjs.organizationalUnit.name() + ")(" + objectClass
+//                                     + "=" + LdapObjs.organization.name() + ")(cn=accounts)(cn=users)(cn=groups))";
 
                        SearchControls searchControls = new SearchControls();
                        searchControls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
@@ -237,6 +248,10 @@ public class LdapDao extends AbstractLdapDirectoryDao {
        @Override
        public HierarchyUnit doGetHierarchyUnit(LdapName dn) {
                try {
+                       if (getDirectory().getBaseDn().equals(dn))
+                               return getDirectory();
+                       if (!dn.startsWith(getDirectory().getBaseDn()))
+                               throw new IllegalArgumentException(dn + " does not start with base DN " + getDirectory().getBaseDn());
                        Attributes attrs = ldapConnection.getAttributes(dn);
                        return new LdapHierarchyUnit(getDirectory(), dn, attrs);
                } catch (NamingException e) {