+ public void updated(String pid, Dictionary<String, ?> properties) throws ConfigurationException {
+ String uri = (String) properties.get(UserAdminConf.uri.name());
+ Object realm = properties.get(UserAdminConf.realm.name());
+ URI u;
+ try {
+ if (uri == null) {
+ String baseDn = (String) properties.get(UserAdminConf.baseDn.name());
+ u = KernelUtils.getOsgiInstanceUri(KernelConstants.DIR_NODE + '/' + baseDn + ".ldif");
+ } else if (realm != null) {
+ u = null;
+ } else {
+ u = new URI(uri);
+ }
+ } catch (URISyntaxException e) {
+ throw new IllegalArgumentException("Badly formatted URI " + uri, e);
+ }
+
+ // Create
+ AbstractUserDirectory userDirectory;
+ if (realm != null || UserAdminConf.SCHEME_LDAP.equals(u.getScheme())
+ || UserAdminConf.SCHEME_LDAPS.equals(u.getScheme())) {
+ userDirectory = new LdapUserAdmin(properties);
+ } else if (UserAdminConf.SCHEME_FILE.equals(u.getScheme())) {
+ userDirectory = new LdifUserAdmin(u, properties);
+ } else if (UserAdminConf.SCHEME_OS.equals(u.getScheme())) {
+ userDirectory = new OsUserDirectory(u, properties);
+ singleUser = true;
+ } else {
+ throw new IllegalArgumentException("Unsupported scheme " + u.getScheme());
+ }
+ addUserDirectory(userDirectory);
+
+ // OSGi
+ LdapName baseDn = userDirectory.getBaseDn();
+ Hashtable<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);
+ Activator.registerService(UserDirectory.class, userDirectory, regProps);
+ userManager.addUserDirectory(userDirectory, regProps);
+ pidToBaseDn.put(pid, baseDn);
+ // pidToServiceRegs.put(pid, reg);
+
+ if (log.isDebugEnabled()) {
+ log.debug("User directory " + userDirectory.getBaseDn() + (u != null ? " [" + u.getScheme() + "]" : "")
+ + " enabled." + (realm != null ? " " + realm + " realm." : ""));
+ }
+
+ if (isSystemRolesBaseDn(baseDn)) {
+ // publishes only when system roles are available
+ Dictionary<String, Object> userAdminregProps = new Hashtable<>();
+ userAdminregProps.put(CmsConstants.CN, CmsConstants.DEFAULT);
+ userAdminregProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE);
+ Activator.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);
+// }