import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
+import java.util.Set;
import javax.naming.ldap.LdapName;
import javax.security.auth.Subject;
import org.apache.commons.httpclient.auth.AuthPolicy;
import org.apache.commons.httpclient.auth.CredentialsProvider;
-import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.params.DefaultHttpParams;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.httpclient.params.HttpParams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.argeo.cms.CmsException;
-import org.argeo.cms.internal.http.NodeHttp;
import org.argeo.cms.internal.http.client.HttpCredentialProvider;
import org.argeo.cms.internal.http.client.SpnegoAuthScheme;
import org.argeo.naming.DnsBrowser;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.cm.ConfigurationException;
import org.osgi.service.cm.ManagedServiceFactory;
+import org.osgi.service.useradmin.Authorization;
import org.osgi.service.useradmin.UserAdmin;
import org.osgi.util.tracker.ServiceTracker;
-import bitronix.tm.BitronixTransactionManager;
-import bitronix.tm.resource.ehcache.EhCacheXAResourceProducer;
-
/**
* Aggregates multiple {@link UserDirectory} and integrates them with system
* roles.
// JTA
private final ServiceTracker<TransactionManager, TransactionManager> tmTracker;
- private final String cacheName = UserDirectory.class.getName();
+ // private final String cacheName = UserDirectory.class.getName();
// GSS API
private Path nodeKeyTab = KernelUtils.getOsgiInstancePath(KernelConstants.NODE_KEY_TAB_PATH);
private GSSCredential acceptorCredentials;
private boolean singleUser = false;
+ private boolean systemRolesAvailable = false;
public NodeUserAdmin(String systemRolesBaseDn) {
super(systemRolesBaseDn);
log.debug("User directory " + userDirectory.getBaseDn() + " [" + u.getScheme() + "] enabled."
+ (realm != null ? " " + realm + " realm." : ""));
- if (!isSystemRolesBaseDn(baseDn)) {
+ 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
return "Node User Admin";
}
+ @Override
+ protected void addAbstractSystemRoles(Authorization rawAuthorization, Set<String> sysRoles) {
+ if (rawAuthorization.getName() == null) {
+ sysRoles.add(NodeConstants.ROLE_ANONYMOUS);
+ } else {
+ sysRoles.add(NodeConstants.ROLE_USER);
+ }
+ }
+
protected void postAdd(AbstractUserDirectory userDirectory) {
// JTA
TransactionManager tm = tmTracker.getService();
if (tm == null)
throw new CmsException("A JTA transaction manager must be available.");
userDirectory.setTransactionManager(tm);
- if (tmTracker.getService() instanceof BitronixTransactionManager)
- EhCacheXAResourceProducer.registerXAResource(cacheName, userDirectory.getXaResource());
+// if (tmTracker.getService() instanceof BitronixTransactionManager)
+// EhCacheXAResourceProducer.registerXAResource(cacheName, userDirectory.getXaResource());
Object realm = userDirectory.getProperties().get(UserAdminConf.realm.name());
if (realm != null) {
// schemes.add(AuthPolicy.BASIC);// incompatible with Basic
params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, schemes);
params.setParameter(CredentialsProvider.PROVIDER, new HttpCredentialProvider());
- params.setParameter(HttpMethodParams.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
+ params.setParameter(HttpMethodParams.COOKIE_POLICY, KernelConstants.COOKIE_POLICY_BROWSER_COMPATIBILITY);
// params.setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
}
}
protected void preDestroy(AbstractUserDirectory userDirectory) {
- if (tmTracker.getService() instanceof BitronixTransactionManager)
- EhCacheXAResourceProducer.unregisterXAResource(cacheName, userDirectory.getXaResource());
+// if (tmTracker.getService() instanceof BitronixTransactionManager)
+// EhCacheXAResourceProducer.unregisterXAResource(cacheName, userDirectory.getXaResource());
Object realm = userDirectory.getProperties().get(UserAdminConf.realm.name());
if (realm != null) {