- public void destroy() {
- for (LdapName name : userAdmins.keySet()) {
- if (userAdmins.get(name) instanceof UserDirectory) {
- UserDirectory userDirectory = (UserDirectory) userAdmins
- .get(name);
- userDirectory.destroy();
- }
+ // Create
+ AbstractUserDirectory userDirectory = u.getScheme().equals("ldap") ? new LdapUserAdmin(properties)
+ : new LdifUserAdmin(u, properties);
+ Object realm = userDirectory.getProperties().get(UserAdminConf.realm.name());
+ addUserDirectory(userDirectory);
+
+ // OSGi
+ LdapName baseDn = userDirectory.getBaseDn();
+ Dictionary<String, Object> regProps = new Hashtable<>();
+ regProps.put(Constants.SERVICE_PID, pid);
+ if (isSystemRolesBaseDn(baseDn))
+ regProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE);
+ regProps.put(UserAdminConf.baseDn.name(), baseDn);
+ ServiceRegistration<UserDirectory> reg = bc.registerService(UserDirectory.class, userDirectory, regProps);
+ pidToBaseDn.put(pid, baseDn);
+ pidToServiceRegs.put(pid, reg);
+
+ if (log.isDebugEnabled())
+ 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);