]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java
Improve LDIF user admin.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / NodeUserAdmin.java
index 416ecef6ba9942413511b595b504c0f5e449c691..31295ae89fac8f58b04fe3ba0ed78247a229c086 100644 (file)
@@ -3,7 +3,6 @@ package org.argeo.cms.internal.kernel;
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Dictionary;
@@ -23,10 +22,10 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.cms.CmsException;
 import org.argeo.cms.KernelHeader;
-import org.argeo.osgi.useradmin.UserDirectory;
-import org.argeo.osgi.useradmin.UserAdminConf;
 import org.argeo.osgi.useradmin.LdapUserAdmin;
 import org.argeo.osgi.useradmin.LdifUserAdmin;
+import org.argeo.osgi.useradmin.UserAdminConf;
+import org.argeo.osgi.useradmin.UserDirectory;
 import org.argeo.osgi.useradmin.UserDirectoryException;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.service.useradmin.Authorization;
@@ -75,17 +74,23 @@ public class NodeUserAdmin implements UserAdmin {
                        URI u;
                        try {
                                u = new URI(uri);
+                               if (u.getPath() == null)
+                                       throw new CmsException("URI " + uri
+                                                       + " must have a path in order to determine base DN");
                                if (u.getScheme() == null) {
-                                       if (uri.startsWith("/"))
-                                               u = new File(uri).getAbsoluteFile().toURI();
+                                       if (uri.startsWith("/") || uri.startsWith("./")
+                                                       || uri.startsWith("../"))
+                                               u = new File(uri).getCanonicalFile().toURI();
                                        else if (!uri.contains("/"))
-                                               u = new File(nodeBaseDir, uri).getAbsoluteFile()
+                                               u = new File(nodeBaseDir, uri).getCanonicalFile()
                                                                .toURI();
                                        else
                                                throw new CmsException("Cannot interpret " + uri
                                                                + " as an uri");
+                               } else if (u.getScheme().equals("file")) {
+                                       u = new File(u).getCanonicalFile().toURI();
                                }
-                       } catch (URISyntaxException e) {
+                       } catch (Exception e) {
                                throw new CmsException(
                                                "Cannot interpret " + uri + " as an uri", e);
                        }
@@ -122,8 +127,8 @@ public class NodeUserAdmin implements UserAdmin {
 
                Dictionary<String, ?> nodeRolesProperties = UserAdminConf
                                .uriAsProperties(nodeRolesUri);
-               if (!nodeRolesProperties.get(UserAdminConf.baseDn.property())
-                               .equals(baseNodeRoleDn)) {
+               if (!nodeRolesProperties.get(UserAdminConf.baseDn.property()).equals(
+                               baseNodeRoleDn)) {
                        throw new CmsException("Invalid base dn for node roles");
                        // TODO deal with "mounted" roles with a different baseDN
                }
@@ -135,7 +140,7 @@ public class NodeUserAdmin implements UserAdmin {
                }
                nodeRoles.setExternalRoles(this);
                nodeRoles.init();
-               addUserAdmin(baseNodeRoleDn, (UserAdmin)nodeRoles);
+               addUserAdmin(baseNodeRoleDn, (UserAdmin) nodeRoles);
                if (log.isTraceEnabled())
                        log.trace("Node roles enabled.");
        }
@@ -175,7 +180,9 @@ public class NodeUserAdmin implements UserAdmin {
 
        @Override
        public boolean removeRole(String name) {
-               return findUserAdmin(name).removeRole(name);
+               boolean actuallyDeleted = findUserAdmin(name).removeRole(name);
+               nodeRoles.removeRole(name);
+               return actuallyDeleted;
        }
 
        @Override