Fix initialisation of user admin
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 21 May 2018 16:58:18 +0000 (18:58 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 21 May 2018 16:58:18 +0000 (18:58 +0200)
org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java

index dc9d33a3b5fa9bcb7751fb269c288786ba003b7e..e8977fa37466858eb32698ae2db94b2e03db3f3f 100644 (file)
@@ -86,6 +86,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
        private GSSCredential acceptorCredentials;
 
        private boolean singleUser = false;
+       private boolean systemRolesAvailable = false;
 
        public NodeUserAdmin(String systemRolesBaseDn) {
                super(systemRolesBaseDn);
@@ -137,15 +138,21 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
                        log.debug("User directory " + userDirectory.getBaseDn() + " [" + u.getScheme() + "] enabled."
                                        + (realm != null ? " " + realm + " realm." : ""));
 
-               // if (isSystemRolesBaseDn(baseDn)) {
-               if (userAdminReg != null)
-                       userAdminReg.unregister();
-               // register self as main user admin
-               Dictionary<String, Object> userAdminregProps = currentState();
-               userAdminregProps.put(NodeConstants.CN, NodeConstants.DEFAULT);
-               userAdminregProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE);
-               userAdminReg = bc.registerService(UserAdmin.class, this, userAdminregProps);
-               // }
+               if (isSystemRolesBaseDn(baseDn))
+                       systemRolesAvailable = true;
+
+               // start publishing only when system roles are available
+               if (systemRolesAvailable) {
+                       // The list of baseDns is published as properties
+                       // TODO clients should rather reference USerDirectory services
+                       if (userAdminReg != null)
+                               userAdminReg.unregister();
+                       // register self as main user admin
+                       Dictionary<String, Object> userAdminregProps = currentState();
+                       userAdminregProps.put(NodeConstants.CN, NodeConstants.DEFAULT);
+                       userAdminregProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE);
+                       userAdminReg = bc.registerService(UserAdmin.class, this, userAdminregProps);
+               }
        }
 
        @Override