You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2007/05/24 02:27:07 UTC
svn commit: r541123 [4/25] - in
/directory/apacheds/branches/apacheds-sasl-branch: ./ benchmarks/
bootstrap-extract/ bootstrap-extract/src/ bootstrap-extract/src/main/
bootstrap-extract/src/main/java/ bootstrap-extract/src/main/java/org/
bootstrap-extr...
Modified: directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/subtree/SubentryServiceObjectClassChangeHandlingITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/subtree/SubentryServiceObjectClassChangeHandlingITest.java?view=diff&rev=541123&r1=541122&r2=541123
==============================================================================
--- directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/subtree/SubentryServiceObjectClassChangeHandlingITest.java (original)
+++ directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/subtree/SubentryServiceObjectClassChangeHandlingITest.java Wed May 23 17:26:40 2007
@@ -33,6 +33,7 @@
import javax.naming.directory.SearchResult;
import org.apache.directory.server.core.unit.AbstractAdminTestCase;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
import org.apache.directory.shared.ldap.message.AttributeImpl;
import org.apache.directory.shared.ldap.message.AttributesImpl;
import org.apache.directory.shared.ldap.message.ModificationItemImpl;
@@ -76,7 +77,7 @@
Attributes subentry = new AttributesImpl();
Attribute objectClass = new AttributeImpl( "objectClass" );
objectClass.add( "top" );
- objectClass.add( "subentry" );
+ objectClass.add( SchemaConstants.SUBENTRY_OC );
objectClass.add( "collectiveAttributeSubentry" );
subentry.put( objectClass );
subentry.put( "subtreeSpecification", "{ specificationFilter item:organizationalPerson }" );
Modified: directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/AbstractTriggerServiceTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/AbstractTriggerServiceTest.java?view=diff&rev=541123&r1=541122&r2=541123
==============================================================================
--- directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/AbstractTriggerServiceTest.java (original)
+++ directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/AbstractTriggerServiceTest.java Wed May 23 17:26:40 2007
@@ -33,6 +33,7 @@
import org.apache.directory.server.core.partition.PartitionNexus;
import org.apache.directory.server.core.subtree.SubentryService;
import org.apache.directory.server.core.unit.AbstractTestCase;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
import org.apache.directory.shared.ldap.message.AttributeImpl;
import org.apache.directory.shared.ldap.message.AttributesImpl;
@@ -171,7 +172,7 @@
Attribute objectClass = new AttributeImpl( "objectClass" );
subentry.put( objectClass );
objectClass.add( "top" );
- objectClass.add( "subentry" );
+ objectClass.add( SchemaConstants.SUBENTRY_OC );
objectClass.add( "triggerExecutionSubentry" );
subentry.put( "subtreeSpecification", subtree );
subentry.put( "prescriptiveTriggerSpecification", triggerSpec );
Modified: directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/BackupUtilities.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/BackupUtilities.java?view=diff&rev=541123&r1=541122&r2=541123
==============================================================================
--- directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/BackupUtilities.java (original)
+++ directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/BackupUtilities.java Wed May 23 17:26:40 2007
@@ -22,4 +22,11 @@
backupCtx.createSubcontext( deletedEntryRdn, deletedEntry );
log.info( "Backed up deleted entry to \"" + ( ( LdapContext ) backupCtx.lookup( deletedEntryRdn ) ).getNameInNamespace() + "\"" );
}
+
+ public static void duplicateDeletedEntry( LdapContext ctx, Name deletedEntryName, Name operationPrincipal, Attributes deletedEntry ) throws NamingException
+ {
+ LdapContext backupCtx = ( LdapContext ) ctx.lookup( "ou=backupContext,ou=system" );
+ String deletedEntryRdn = deletedEntryName.get( deletedEntryName.size() - 1 );
+ backupCtx.createSubcontext( deletedEntryRdn + "," + deletedEntryRdn, deletedEntry );
+ }
}
Modified: directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/DefaulTriggerServiceITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/DefaulTriggerServiceITest.java?view=diff&rev=541123&r1=541122&r2=541123
==============================================================================
--- directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/DefaulTriggerServiceITest.java (original)
+++ directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/DefaulTriggerServiceITest.java Wed May 23 17:26:40 2007
@@ -54,7 +54,9 @@
// Create the Triger Specification within a Trigger Subentry.
createTriggerSubentry( "triggerSubentry1",
- "AFTER Delete CALL \"" + BackupUtilities.class.getName() + ".backupDeleted\" ( $ldapContext \"\", $name, $operationPrincipal, $deletedEntry )" );
+ "AFTER Delete " +
+ " CALL \"" + BackupUtilities.class.getName() + ".backupDeleted\" ( $ldapContext \"\", $name, $operationPrincipal, $deletedEntry );" +
+ "CALL \"" + BackupUtilities.class.getName() + ".duplicateDeletedEntry\" ( $ldapContext \"\", $name, $operationPrincipal, $deletedEntry ); " );
// Create a test entry which is selected by the Trigger Subentry.
Attributes testEntry = new AttributesImpl( "ou", "testou", true );
@@ -73,6 +75,7 @@
// Check if the Trigger really worked (backed up the deleted entry).
assertNotNull( sysRoot.lookup( "ou=testou,ou=backupContext" ) );
+ assertNotNull( sysRoot.lookup( "ou=testou,ou=testou,ou=backupContext" ) );
}
/*public void testBeforeDeleteLogWarning() throws NamingException
Modified: directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/SubentryServiceForTriggersITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/SubentryServiceForTriggersITest.java?view=diff&rev=541123&r1=541122&r2=541123
==============================================================================
--- directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/SubentryServiceForTriggersITest.java (original)
+++ directory/apacheds/branches/apacheds-sasl-branch/core-unit/src/test/java/org/apache/directory/server/core/trigger/SubentryServiceForTriggersITest.java Wed May 23 17:26:40 2007
@@ -34,6 +34,7 @@
import org.apache.directory.server.core.subtree.SubentryService;
import org.apache.directory.server.core.unit.AbstractAdminTestCase;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
import org.apache.directory.shared.ldap.exception.LdapNoSuchAttributeException;
import org.apache.directory.shared.ldap.message.AttributeImpl;
import org.apache.directory.shared.ldap.message.AttributesImpl;
@@ -66,11 +67,11 @@
Attributes subentry = new AttributesImpl();
Attribute objectClass = new AttributeImpl( "objectClass" );
objectClass.add( "top" );
- objectClass.add( "subentry" );
+ objectClass.add( SchemaConstants.SUBENTRY_OC );
objectClass.add( "triggerExecutionSubentry" );
subentry.put( objectClass );
subentry.put( "subtreeSpecification", "{ base \"ou=configuration\" }" );
- subentry.put( "prescriptiveTriggerSpecification", "AFTER Delete CALL \"LogUtils.logDelete\"($name)" );
+ subentry.put( "prescriptiveTriggerSpecification", "AFTER Delete CALL \"LogUtils.logDelete\"($name);" );
subentry.put( "cn", "testsubentry" );
return subentry;
}
@@ -80,12 +81,12 @@
Attributes subentry = new AttributesImpl();
Attribute objectClass = new AttributeImpl( "objectClass" );
objectClass.add( "top" );
- objectClass.add( "subentry" );
+ objectClass.add( SchemaConstants.SUBENTRY_OC );
objectClass.add( "triggerExecutionSubentry" );
subentry.put( objectClass );
String spec = "{ base \"ou=configuration\", specificExclusions { chopBefore:\"cn=unmarked\" } }";
subentry.put( "subtreeSpecification", spec );
- subentry.put( "prescriptiveTriggerSpecification", "AFTER Delete CALL \"LogUtils.logDelete\"($name)" );
+ subentry.put( "prescriptiveTriggerSpecification", "AFTER Delete CALL \"LogUtils.logDelete\"($name);" );
subentry.put( "cn", "testsubentry" );
return subentry;
}
Modified: directory/apacheds/branches/apacheds-sasl-branch/core/pom.xml
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-sasl-branch/core/pom.xml?view=diff&rev=541123&r1=541122&r2=541123
==============================================================================
--- directory/apacheds/branches/apacheds-sasl-branch/core/pom.xml (original)
+++ directory/apacheds/branches/apacheds-sasl-branch/core/pom.xml Wed May 23 17:26:40 2007
@@ -4,7 +4,7 @@
<parent>
<groupId>org.apache.directory.server</groupId>
<artifactId>build</artifactId>
- <version>1.5.0-SNAPSHOT</version>
+ <version>1.5.1-SNAPSHOT</version>
</parent>
<artifactId>apacheds-core</artifactId>
<name>ApacheDS Core</name>
Modified: directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java?view=diff&rev=541123&r1=541122&r2=541123
==============================================================================
--- directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java (original)
+++ directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java Wed May 23 17:26:40 2007
@@ -20,6 +20,7 @@
package org.apache.directory.server.core;
+import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Hashtable;
@@ -40,6 +41,10 @@
import org.apache.directory.server.core.configuration.StartupConfiguration;
import org.apache.directory.server.core.interceptor.Interceptor;
import org.apache.directory.server.core.interceptor.InterceptorChain;
+import org.apache.directory.server.core.interceptor.context.AddContextPartitionOperationContext;
+import org.apache.directory.server.core.interceptor.context.AddOperationContext;
+import org.apache.directory.server.core.interceptor.context.EntryOperationContext;
+import org.apache.directory.server.core.interceptor.context.LookupOperationContext;
import org.apache.directory.server.core.jndi.AbstractContextFactory;
import org.apache.directory.server.core.jndi.DeadContext;
import org.apache.directory.server.core.jndi.PropertyKeys;
@@ -57,14 +62,19 @@
import org.apache.directory.server.schema.bootstrap.CoreSchema;
import org.apache.directory.server.schema.bootstrap.Schema;
import org.apache.directory.server.schema.bootstrap.SystemSchema;
+import org.apache.directory.server.schema.bootstrap.partition.DbFileListing;
import org.apache.directory.server.schema.bootstrap.partition.SchemaPartitionExtractor;
import org.apache.directory.server.schema.registries.AttributeTypeRegistry;
import org.apache.directory.server.schema.registries.DefaultOidRegistry;
import org.apache.directory.server.schema.registries.DefaultRegistries;
import org.apache.directory.server.schema.registries.OidRegistry;
import org.apache.directory.server.schema.registries.Registries;
+import org.apache.directory.shared.ldap.constants.JndiPropertyConstants;
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.constants.ServerDNConstants;
import org.apache.directory.shared.ldap.exception.LdapAuthenticationNotSupportedException;
import org.apache.directory.shared.ldap.exception.LdapConfigurationException;
+import org.apache.directory.shared.ldap.exception.LdapNamingException;
import org.apache.directory.shared.ldap.exception.LdapNoPermissionException;
import org.apache.directory.shared.ldap.ldif.Entry;
import org.apache.directory.shared.ldap.message.AttributeImpl;
@@ -87,7 +97,7 @@
class DefaultDirectoryService extends DirectoryService
{
private static final Logger log = LoggerFactory.getLogger( DefaultDirectoryService.class );
- private static final String BINARY_KEY = "java.naming.ldap.attributes.binary";
+ private static final String BINARY_KEY = JndiPropertyConstants.JNDI_LDAP_ATTRIBUTES_BINARY;
private final String instanceId;
@@ -461,29 +471,29 @@
/*
* If the admin entry is there, then the database was already created
*/
- if ( !partitionNexus.hasEntry( PartitionNexus.getAdminName() ) )
+ if ( !partitionNexus.hasEntry( new EntryOperationContext( PartitionNexus.getAdminName() ) ) )
{
firstStart = true;
Attributes attributes = new AttributesImpl();
- Attribute objectClass = new AttributeImpl( "objectClass" );
- objectClass.add( "top" );
- objectClass.add( "person" );
- objectClass.add( "organizationalPerson" );
- objectClass.add( "inetOrgPerson" );
+ Attribute objectClass = new AttributeImpl( SchemaConstants.OBJECT_CLASS_AT );
+ objectClass.add( SchemaConstants.TOP_OC );
+ objectClass.add( SchemaConstants.PERSON_OC );
+ objectClass.add( SchemaConstants.ORGANIZATIONAL_PERSON_OC );
+ objectClass.add( SchemaConstants.INET_ORG_PERSON_OC );
attributes.put( objectClass );
- attributes.put( "uid", PartitionNexus.ADMIN_UID );
- attributes.put( "userPassword", PartitionNexus.ADMIN_PASSWORD );
- attributes.put( "displayName", "Directory Superuser" );
- attributes.put( "cn", "system administrator" );
- attributes.put( "sn", "administrator" );
- attributes.put( "creatorsName", PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
- attributes.put( "createTimestamp", DateUtils.getGeneralizedTime() );
- attributes.put( "displayName", "Directory Superuser" );
+ attributes.put( SchemaConstants.UID_AT, PartitionNexus.ADMIN_UID );
+ attributes.put( SchemaConstants.USER_PASSWORD_AT, PartitionNexus.ADMIN_PASSWORD );
+ attributes.put( SchemaConstants.DISPLAY_NAME_AT, "Directory Superuser" );
+ attributes.put( SchemaConstants.CN_AT, "system administrator" );
+ attributes.put( SchemaConstants.SN_AT, "administrator" );
+ attributes.put( SchemaConstants.CREATORS_NAME_AT, PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
+ attributes.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
+ attributes.put( SchemaConstants.DISPLAY_NAME_AT, "Directory Superuser" );
- partitionNexus.add(PartitionNexus.getAdminName(),
- attributes );
+ partitionNexus.add( new AddOperationContext( PartitionNexus.getAdminName(),
+ attributes ) );
}
// -------------------------------------------------------------------
@@ -494,21 +504,21 @@
LdapDN userDn = new LdapDN( "ou=users,ou=system" );
userDn.normalize( oidsMap );
- if ( !partitionNexus.hasEntry( userDn ) )
+ if ( !partitionNexus.hasEntry( new EntryOperationContext( userDn ) ) )
{
firstStart = true;
Attributes attributes = new AttributesImpl();
- Attribute objectClass = new AttributeImpl( "objectClass" );
- objectClass.add( "top" );
- objectClass.add( "organizationalUnit" );
+ Attribute objectClass = new AttributeImpl( SchemaConstants.OBJECT_CLASS_AT );
+ objectClass.add( SchemaConstants.TOP_OC );
+ objectClass.add( SchemaConstants.ORGANIZATIONAL_UNIT_OC );
attributes.put( objectClass );
- attributes.put( "ou", "users" );
- attributes.put( "creatorsName", PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
- attributes.put( "createTimestamp", DateUtils.getGeneralizedTime() );
+ attributes.put( SchemaConstants.OU_AT, "users" );
+ attributes.put( SchemaConstants.CREATORS_NAME_AT, PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
+ attributes.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- partitionNexus.add( userDn, attributes );
+ partitionNexus.add( new AddOperationContext( userDn, attributes ) );
}
// -------------------------------------------------------------------
@@ -518,48 +528,47 @@
LdapDN groupDn = new LdapDN( "ou=groups,ou=system" );
groupDn.normalize( oidsMap );
- if ( !partitionNexus.hasEntry( groupDn ) )
+ if ( !partitionNexus.hasEntry( new EntryOperationContext( groupDn ) ) )
{
firstStart = true;
Attributes attributes = new AttributesImpl();
- Attribute objectClass = new AttributeImpl( "objectClass" );
- objectClass.add( "top" );
- objectClass.add( "organizationalUnit" );
+ Attribute objectClass = new AttributeImpl( SchemaConstants.OBJECT_CLASS_AT );
+ objectClass.add( SchemaConstants.TOP_OC );
+ objectClass.add( SchemaConstants.ORGANIZATIONAL_UNIT_OC );
attributes.put( objectClass );
- attributes.put( "ou", "groups" );
- attributes.put( "creatorsName", PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
- attributes.put( "createTimestamp", DateUtils.getGeneralizedTime() );
+ attributes.put( SchemaConstants.OU_AT, "groups" );
+ attributes.put( SchemaConstants.CREATORS_NAME_AT, PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
+ attributes.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- partitionNexus.add( groupDn, attributes );
+ partitionNexus.add( new AddOperationContext( groupDn, attributes ) );
}
// -------------------------------------------------------------------
// create administrator group
// -------------------------------------------------------------------
- String upName = "cn=Administrators,ou=groups,ou=system";
- LdapDN normName = new LdapDN( "cn=administrators,ou=groups,ou=system" );
- normName.normalize( oidsMap );
+ LdapDN name = new LdapDN( ServerDNConstants.ADMINISTRATORS_GROUP_DN );
+ name.normalize( oidsMap );
- if ( !partitionNexus.hasEntry( normName ) )
+ if ( !partitionNexus.hasEntry( new EntryOperationContext( name ) ) )
{
firstStart = true;
Attributes attributes = new AttributesImpl();
- Attribute objectClass = new AttributeImpl( "objectClass" );
- objectClass.add( "top" );
- objectClass.add( "groupOfUniqueNames" );
+ Attribute objectClass = new AttributeImpl( SchemaConstants.OBJECT_CLASS_AT );
+ objectClass.add( SchemaConstants.TOP_OC );
+ objectClass.add( SchemaConstants.GROUP_OF_UNIQUE_NAMES_OC );
attributes.put( objectClass );
- attributes.put( "cn", "Administrators" );
- attributes.put( "uniqueMember", PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
- attributes.put( "creatorsName", PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
- attributes.put( "createTimestamp", DateUtils.getGeneralizedTime() );
+ attributes.put( SchemaConstants.CN_AT, "Administrators" );
+ attributes.put( SchemaConstants.UNIQUE_MEMBER_AT, PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
+ attributes.put( SchemaConstants.CREATORS_NAME_AT, PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
+ attributes.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- partitionNexus.add(normName, attributes );
+ partitionNexus.add( new AddOperationContext( name, attributes ) );
- Interceptor authzInterceptor = interceptorChain.get( "authorizationService" );
+ Interceptor authzInterceptor = interceptorChain.get( AuthorizationService.NAME );
if ( authzInterceptor == null )
{
@@ -576,7 +585,7 @@
}
AuthorizationService authzSrvc = ( AuthorizationService ) authzInterceptor;
- authzSrvc.cacheNewGroup( upName, normName, attributes );
+ authzSrvc.cacheNewGroup( name, attributes );
}
@@ -587,21 +596,21 @@
LdapDN configurationDn = new LdapDN( "ou=configuration,ou=system" );
configurationDn.normalize( oidsMap );
- if ( !partitionNexus.hasEntry( configurationDn ) )
+ if ( !partitionNexus.hasEntry( new EntryOperationContext( configurationDn ) ) )
{
firstStart = true;
Attributes attributes = new AttributesImpl();
- Attribute objectClass = new AttributeImpl( "objectClass" );
- objectClass.add( "top" );
- objectClass.add( "organizationalUnit" );
+ Attribute objectClass = new AttributeImpl( SchemaConstants.OBJECT_CLASS_AT );
+ objectClass.add( SchemaConstants.TOP_OC );
+ objectClass.add( SchemaConstants.ORGANIZATIONAL_UNIT_OC );
attributes.put( objectClass );
- attributes.put( "ou", "configuration" );
- attributes.put( "creatorsName", PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
- attributes.put( "createTimestamp", DateUtils.getGeneralizedTime() );
+ attributes.put( SchemaConstants.OU_AT, "configuration" );
+ attributes.put( SchemaConstants.CREATORS_NAME_AT, PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
+ attributes.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- partitionNexus.add( configurationDn, attributes );
+ partitionNexus.add( new AddOperationContext( configurationDn, attributes ) );
}
// -------------------------------------------------------------------
@@ -611,21 +620,21 @@
LdapDN partitionsDn = new LdapDN( "ou=partitions,ou=configuration,ou=system" );
partitionsDn.normalize( oidsMap );
- if ( !partitionNexus.hasEntry( partitionsDn ) )
+ if ( !partitionNexus.hasEntry( new EntryOperationContext( partitionsDn ) ) )
{
firstStart = true;
Attributes attributes = new AttributesImpl();
- Attribute objectClass = new AttributeImpl( "objectClass" );
- objectClass.add( "top" );
- objectClass.add( "organizationalUnit" );
+ Attribute objectClass = new AttributeImpl( SchemaConstants.OBJECT_CLASS_AT );
+ objectClass.add( SchemaConstants.TOP_OC );
+ objectClass.add( SchemaConstants.ORGANIZATIONAL_UNIT_OC );
attributes.put( objectClass );
- attributes.put( "ou", "partitions" );
- attributes.put( "creatorsName", PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
- attributes.put( "createTimestamp", DateUtils.getGeneralizedTime() );
+ attributes.put( SchemaConstants.OU_AT, "partitions" );
+ attributes.put( SchemaConstants.CREATORS_NAME_AT, PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
+ attributes.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- partitionNexus.add( partitionsDn, attributes );
+ partitionNexus.add( new AddOperationContext( partitionsDn, attributes ) );
}
// -------------------------------------------------------------------
@@ -635,21 +644,21 @@
LdapDN servicesDn = new LdapDN( "ou=services,ou=configuration,ou=system" );
servicesDn.normalize( oidsMap );
- if ( !partitionNexus.hasEntry( servicesDn ) )
+ if ( !partitionNexus.hasEntry( new EntryOperationContext( servicesDn ) ) )
{
firstStart = true;
Attributes attributes = new AttributesImpl();
- Attribute objectClass = new AttributeImpl( "objectClass" );
- objectClass.add( "top" );
- objectClass.add( "organizationalUnit" );
+ Attribute objectClass = new AttributeImpl( SchemaConstants.OBJECT_CLASS_AT );
+ objectClass.add( SchemaConstants.TOP_OC );
+ objectClass.add( SchemaConstants.ORGANIZATIONAL_UNIT_OC );
attributes.put( objectClass );
- attributes.put( "ou", "services" );
- attributes.put( "creatorsName", PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
- attributes.put( "createTimestamp", DateUtils.getGeneralizedTime() );
+ attributes.put( SchemaConstants.OU_AT, "services" );
+ attributes.put( SchemaConstants.CREATORS_NAME_AT, PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
+ attributes.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- partitionNexus.add( servicesDn, attributes );
+ partitionNexus.add( new AddOperationContext( servicesDn, attributes ) );
}
// -------------------------------------------------------------------
@@ -659,21 +668,21 @@
LdapDN interceptorsDn = new LdapDN( "ou=interceptors,ou=configuration,ou=system" );
interceptorsDn.normalize( oidsMap );
- if ( !partitionNexus.hasEntry( interceptorsDn ) )
+ if ( !partitionNexus.hasEntry( new EntryOperationContext( interceptorsDn ) ) )
{
firstStart = true;
Attributes attributes = new AttributesImpl();
- Attribute objectClass = new AttributeImpl( "objectClass" );
- objectClass.add( "top" );
- objectClass.add( "organizationalUnit" );
+ Attribute objectClass = new AttributeImpl( SchemaConstants.OBJECT_CLASS_AT );
+ objectClass.add( SchemaConstants.TOP_OC );
+ objectClass.add( SchemaConstants.ORGANIZATIONAL_UNIT_OC );
attributes.put( objectClass );
- attributes.put( "ou", "interceptors" );
- attributes.put( "creatorsName", PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
- attributes.put( "createTimestamp", DateUtils.getGeneralizedTime() );
+ attributes.put( SchemaConstants.OU_AT, "interceptors" );
+ attributes.put( SchemaConstants.CREATORS_NAME_AT, PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
+ attributes.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- partitionNexus.add( interceptorsDn, attributes );
+ partitionNexus.add( new AddOperationContext( interceptorsDn, attributes ) );
}
// -------------------------------------------------------------------
@@ -683,22 +692,22 @@
LdapDN sysPrefRootDn = new LdapDN( "prefNodeName=sysPrefRoot,ou=system");
sysPrefRootDn.normalize( oidsMap );
- if ( !partitionNexus.hasEntry( sysPrefRootDn ) )
+ if ( !partitionNexus.hasEntry( new EntryOperationContext( sysPrefRootDn ) ) )
{
firstStart = true;
Attributes attributes = new AttributesImpl();
- Attribute objectClass = new AttributeImpl( "objectClass" );
- objectClass.add( "top" );
- objectClass.add( "organizationalUnit" );
+ Attribute objectClass = new AttributeImpl( SchemaConstants.OBJECT_CLASS_AT );
+ objectClass.add( SchemaConstants.TOP_OC );
+ objectClass.add( SchemaConstants.ORGANIZATIONAL_UNIT_OC );
attributes.put( objectClass );
- attributes.put( "objectClass", "extensibleObject" );
+ attributes.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.EXTENSIBLE_OBJECT_OC );
attributes.put( "prefNodeName", "sysPrefRoot" );
- attributes.put( "creatorsName", PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
- attributes.put( "createTimestamp", DateUtils.getGeneralizedTime() );
+ attributes.put( SchemaConstants.CREATORS_NAME_AT, PartitionNexus.ADMIN_PRINCIPAL_NORMALIZED );
+ attributes.put( SchemaConstants.CREATE_TIMESTAMP_AT, DateUtils.getGeneralizedTime() );
- partitionNexus.add( sysPrefRootDn, attributes );
+ partitionNexus.add( new AddOperationContext( sysPrefRootDn, attributes ) );
}
return firstStart;
@@ -716,8 +725,8 @@
LdapDN adminDn = new LdapDN( PartitionNexus.ADMIN_PRINCIPAL );
adminDn.normalize( configuration.getRegistries().getAttributeTypeRegistry().getNormalizerMapping() );
- Attributes adminEntry = partitionNexus.lookup( adminDn );
- Object userPassword = adminEntry.get( "userPassword" ).get();
+ Attributes adminEntry = partitionNexus.lookup( new LookupOperationContext( adminDn ) );
+ Object userPassword = adminEntry.get( SchemaConstants.USER_PASSWORD_AT ).get();
if ( userPassword instanceof byte[] )
{
needToChangeAdminPassword = PartitionNexus.ADMIN_PASSWORD.equals( new String(
@@ -816,17 +825,21 @@
// If not present extract schema partition from jar
// --------------------------------------------------------------------
- SchemaPartitionExtractor extractor = null;
- try
- {
- extractor = new SchemaPartitionExtractor( startupConfiguration.getWorkingDirectory() );
- extractor.extract();
- }
- catch ( IOException e )
+ File schemaDirectory = new File( startupConfiguration.getWorkingDirectory(), "schema" );
+ SchemaPartitionExtractor extractor = null;
+ if ( ! schemaDirectory.exists() )
{
- NamingException ne = new NamingException( "Failed to extract pre-loaded schema partition." );
- ne.setRootCause( e );
- throw ne;
+ try
+ {
+ extractor = new SchemaPartitionExtractor( startupConfiguration.getWorkingDirectory() );
+ extractor.extract();
+ }
+ catch ( IOException e )
+ {
+ NamingException ne = new NamingException( "Failed to extract pre-loaded schema partition." );
+ ne.setRootCause( e );
+ throw ne;
+ }
}
// --------------------------------------------------------------------
@@ -836,14 +849,26 @@
MutablePartitionConfiguration schemaPartitionConfig = new MutablePartitionConfiguration();
schemaPartitionConfig.setName( "schema" );
schemaPartitionConfig.setCacheSize( 1000 );
- schemaPartitionConfig.setIndexedAttributes( extractor.getDbFileListing().getIndexedAttributes() );
+
+ DbFileListing listing = null;
+ try
+ {
+ listing = new DbFileListing();
+ }
+ catch( IOException e )
+ {
+ throw new LdapNamingException( "Got IOException while trying to read DBFileListing: " + e.getMessage(),
+ ResultCodeEnum.OTHER );
+ }
+
+ schemaPartitionConfig.setIndexedAttributes( listing.getIndexedAttributes() );
schemaPartitionConfig.setOptimizerEnabled( true );
schemaPartitionConfig.setSuffix( "ou=schema" );
Attributes entry = new AttributesImpl();
- entry.put( "objectClass", "top" );
- entry.get( "objectClass" ).add( "organizationalUnit" );
- entry.put( "ou", "schema" );
+ entry.put( SchemaConstants.OBJECT_CLASS_AT, SchemaConstants.TOP_OC );
+ entry.get( SchemaConstants.OBJECT_CLASS_AT ).add( SchemaConstants.ORGANIZATIONAL_UNIT_OC );
+ entry.put( SchemaConstants.OU_AT, "schema" );
schemaPartitionConfig.setContextEntry( entry );
JdbmPartition schemaPartition = new JdbmPartition();
schemaPartition.init( configuration, schemaPartitionConfig );
@@ -931,7 +956,7 @@
for ( int i = 0; i < binaryArray.length; i++ )
{
- binaries.add( StringTools.lowerCase( StringTools.trim( binaryArray[i] ) ) );
+ binaries.add( StringTools.lowerCaseAscii( StringTools.trim( binaryArray[i] ) ) );
}
}
@@ -960,9 +985,10 @@
// add the lowercased name for the names for the attributeType
String[] names = type.getNames();
+
for ( int ii = 0; ii < names.length; ii++ )
{
- binaries.add( StringTools.lowerCase( StringTools.trim( names[ii] ) ) );
+ binaries.add( StringTools.lowerCaseAscii( StringTools.trim( names[ii] ) ) );
}
}
}
@@ -975,7 +1001,7 @@
partitionNexus = new DefaultPartitionNexus( new AttributesImpl() );
partitionNexus.init( configuration, null );
- partitionNexus.addContextPartition( schemaPartitionConfig );
+ partitionNexus.addContextPartition( new AddContextPartitionOperationContext( schemaPartitionConfig ) );
interceptorChain = new InterceptorChain();
interceptorChain.init( configuration );
Modified: directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/AbstractAuthenticator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/AbstractAuthenticator.java?view=diff&rev=541123&r1=541122&r2=541123
==============================================================================
--- directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/AbstractAuthenticator.java (original)
+++ directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/AbstractAuthenticator.java Wed May 23 17:26:40 2007
@@ -98,7 +98,7 @@
/**
* Implement your initialization code here.
*/
- protected void doInit() throws NamingException
+ protected void doInit()
{
}
@@ -150,7 +150,6 @@
* @return the principal for the <tt>name</tt>
* @throws NamingException if there is a problem parsing <tt>name</tt>
*/
- // does not seem to be used
protected static LdapPrincipal createLdapPrincipal( String name, AuthenticationLevel authenticationLeve )
throws NamingException
{
Modified: directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationService.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationService.java?view=diff&rev=541123&r1=541122&r2=541123
==============================================================================
--- directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationService.java (original)
+++ directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/AuthenticationService.java Wed May 23 17:26:40 2007
@@ -33,7 +33,7 @@
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
-import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
import org.apache.directory.server.core.DirectoryServiceConfiguration;
import org.apache.directory.server.core.configuration.AuthenticatorConfiguration;
@@ -41,16 +41,21 @@
import org.apache.directory.server.core.interceptor.BaseInterceptor;
import org.apache.directory.server.core.interceptor.Interceptor;
import org.apache.directory.server.core.interceptor.NextInterceptor;
+import org.apache.directory.server.core.interceptor.context.AddOperationContext;
+import org.apache.directory.server.core.interceptor.context.BindOperationContext;
+import org.apache.directory.server.core.interceptor.context.LookupOperationContext;
+import org.apache.directory.server.core.interceptor.context.MoveAndRenameOperationContext;
+import org.apache.directory.server.core.interceptor.context.MoveOperationContext;
+import org.apache.directory.server.core.interceptor.context.OperationContext;
+import org.apache.directory.server.core.interceptor.context.RenameOperationContext;
import org.apache.directory.server.core.invocation.InvocationStack;
import org.apache.directory.server.core.jndi.LdapJndiProperties;
import org.apache.directory.server.core.jndi.ServerContext;
import org.apache.directory.shared.ldap.exception.LdapAuthenticationException;
-import org.apache.directory.shared.ldap.filter.ExprNode;
-import org.apache.directory.shared.ldap.util.AttributeUtils;
import org.apache.directory.shared.ldap.message.MessageTypeEnum;
-import org.apache.directory.shared.ldap.message.ModificationItemImpl;
import org.apache.directory.shared.ldap.name.LdapDN;
-
+import org.apache.directory.shared.ldap.util.AttributeUtils;
+import org.apache.directory.shared.ldap.util.StringTools;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,6 +70,9 @@
{
private static final Logger log = LoggerFactory.getLogger( AuthenticationService.class );
+ /** The service name */
+ public static final String NAME = "authenticationService";
+
/** Speedup for logs */
private static final boolean IS_DEBUG = log.isDebugEnabled();
@@ -80,7 +88,6 @@
{
}
-
/**
* Registers and initializes all {@link Authenticator}s to this service.
*/
@@ -107,7 +114,6 @@
/**
* Deinitializes and deregisters all {@link Authenticator}s from this service.
*/
- @SuppressWarnings("unchecked")
public void destroy()
{
Set<Collection<Authenticator>> clonedAuthenticatorCollections = new HashSet<Collection<Authenticator>>();
@@ -194,45 +200,46 @@
}
- public void add( NextInterceptor next, LdapDN normName, Attributes entry ) throws NamingException
+ public void add( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Adding the entry " + AttributeUtils.toString( entry ) + " for DN = '"
- + normName.getUpName() + "'" );
+ log.debug( "Adding the entry " +
+ AttributeUtils.toString( ((AddOperationContext)opContext).getEntry() ) +
+ " for DN = '" + opContext.getDn().getUpName() + "'" );
}
checkAuthenticated( MessageTypeEnum.ADD_REQUEST );
- next.add(normName, entry );
+ next.add( opContext );
}
- public void delete( NextInterceptor next, LdapDN name ) throws NamingException
+ public void delete( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Deleting name = '" + name.toString() + "'" );
+ log.debug( "Deleting name = '" + opContext.getDn().getUpName() + "'" );
}
checkAuthenticated( MessageTypeEnum.DEL_REQUEST );
- next.delete( name );
- invalidateAuthenticatorCaches( name );
+ next.delete( opContext );
+ invalidateAuthenticatorCaches( opContext.getDn() );
}
- public LdapDN getMatchedName ( NextInterceptor next, LdapDN dn ) throws NamingException
+ public LdapDN getMatchedName ( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Matching name = '" + dn.toString() + "'" );
+ log.debug( "Matching name = '" + opContext.getDn().getUpName() + "'" );
}
checkAuthenticated();
- return next.getMatchedName( dn );
+ return next.getMatchedName( opContext );
}
- public Attributes getRootDSE( NextInterceptor next ) throws NamingException
+ public Attributes getRootDSE( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
@@ -240,59 +247,47 @@
}
checkAuthenticated();
- return next.getRootDSE();
+ return next.getRootDSE( opContext );
}
- public LdapDN getSuffix ( NextInterceptor next, LdapDN dn ) throws NamingException
+ public LdapDN getSuffix ( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Getting suffix for name = '" + dn.toString() + "'" );
+ log.debug( "Getting suffix for name = '" + opContext.getDn().getUpName() + "'" );
}
checkAuthenticated();
- return next.getSuffix( dn );
+ return next.getSuffix( opContext );
}
- public boolean hasEntry( NextInterceptor next, LdapDN name ) throws NamingException
+ public boolean hasEntry( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Testing if entry name = '" + name.toString() + "' exists" );
+ log.debug( "Testing if entry name = '" + opContext.getDn().getUpName() + "' exists" );
}
checkAuthenticated();
- return next.hasEntry( name );
+ return next.hasEntry( opContext );
}
- public boolean isSuffix( NextInterceptor next, LdapDN name ) throws NamingException
+ public NamingEnumeration list( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Testing suffix for name = '" + name.toString() + "'" );
+ log.debug( "Listing base = '" + opContext.getDn().getUpName() + "'" );
}
checkAuthenticated();
- return next.isSuffix( name );
+ return next.list( opContext );
}
- public NamingEnumeration list( NextInterceptor next, LdapDN base ) throws NamingException
- {
- if ( IS_DEBUG )
- {
- log.debug( "Listing base = '" + base.toString() + "'" );
- }
-
- checkAuthenticated();
- return next.list( base );
- }
-
-
- public Iterator listSuffixes ( NextInterceptor next ) throws NamingException
+ public Iterator listSuffixes ( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
@@ -300,34 +295,33 @@
}
checkAuthenticated();
- return next.listSuffixes();
+ return next.listSuffixes( opContext );
}
- public Attributes lookup( NextInterceptor next, LdapDN dn, String[] attrIds ) throws NamingException
+ public Attributes lookup( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Lookup name = '" + dn.toString() + "', attributes = " + attrIds );
- }
-
- checkAuthenticated();
- return next.lookup( dn, attrIds );
- }
-
-
- public Attributes lookup( NextInterceptor next, LdapDN name ) throws NamingException
- {
- if ( IS_DEBUG )
- {
- log.debug( "Lookup name = '" + name.toString() + "'" );
+ LookupOperationContext ctx = (LookupOperationContext)opContext;
+
+ List<String> attrIds = ctx.getAttrsId();
+
+ if ( ( attrIds != null ) && ( attrIds.size() != 0 ) )
+ {
+ String attrs = StringTools.listToString( attrIds );
+ log.debug( "Lookup name = '" + ctx.getDn().getUpName() + "', attributes = " + attrs );
+ }
+ else
+ {
+ log.debug( "Lookup name = '" + ctx.getDn().getUpName() + "', no attributes " );
+ }
}
checkAuthenticated();
- return next.lookup( name );
+ return next.lookup( opContext );
}
-
private void invalidateAuthenticatorCaches( LdapDN principalDn )
{
for ( String authMech:authenticators.keySet() )
@@ -343,84 +337,74 @@
}
- public void modify( NextInterceptor next, LdapDN name, int modOp, Attributes mods ) throws NamingException
+ public void modify( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Modifying name = '" + name.toString() + "', modifs = " + AttributeUtils.toString( mods ) );
+ log.debug( opContext.toString() );
}
checkAuthenticated( MessageTypeEnum.MODIFY_REQUEST );
- next.modify( name, modOp, mods );
- invalidateAuthenticatorCaches( name );
+ next.modify( opContext );
+ invalidateAuthenticatorCaches( opContext.getDn() );
}
- public void modify( NextInterceptor next, LdapDN name, ModificationItemImpl[] mods ) throws NamingException
- {
- if ( IS_DEBUG )
- {
- log.debug( "Modifying name = '" + name.toString() + "'" );
- }
-
- checkAuthenticated( MessageTypeEnum.MODIFY_REQUEST );
- next.modify( name, mods );
- invalidateAuthenticatorCaches( name );
- }
-
-
- public void modifyRn( NextInterceptor next, LdapDN name, String newRn, boolean deleteOldRn ) throws NamingException
+ public void rename( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Modifying name = '" + name.toString() + "', new RDN = '" + newRn + "', oldRDN = '"
- + deleteOldRn + "'" );
+ log.debug( "Modifying name = '" + opContext.getDn().getUpName() + "', new RDN = '" +
+ ((RenameOperationContext)opContext).getNewRdn() + "', " +
+ "oldRDN = '" + ((RenameOperationContext)opContext).getDelOldDn() + "'" );
}
checkAuthenticated( MessageTypeEnum.MOD_DN_REQUEST );
- next.modifyRn( name, newRn, deleteOldRn );
- invalidateAuthenticatorCaches( name );
+ next.rename( opContext );
+ invalidateAuthenticatorCaches( opContext.getDn() );
}
- public void move( NextInterceptor next, LdapDN oriChildName, LdapDN newParentName, String newRn, boolean deleteOldRn )
+ public void moveAndRename( NextInterceptor next, OperationContext opContext )
throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Moving name = '" + oriChildName.toString() + "' to name = '" + newParentName + "', new RDN = '"
- + newRn + "', oldRDN = '" + deleteOldRn + "'" );
+ log.debug( "Moving name = '" + opContext.getDn().getUpName() + "' to name = '" +
+ ((MoveAndRenameOperationContext)opContext).getParent() + "', new RDN = '" +
+ ((MoveAndRenameOperationContext)opContext).getNewRdn() + "', oldRDN = '" +
+ ((MoveAndRenameOperationContext)opContext).getDelOldDn() + "'" );
}
checkAuthenticated( MessageTypeEnum.MOD_DN_REQUEST );
- next.move( oriChildName, newParentName, newRn, deleteOldRn );
- invalidateAuthenticatorCaches( oriChildName );
+ next.moveAndRename( opContext );
+ invalidateAuthenticatorCaches( opContext.getDn() );
}
- public void move( NextInterceptor next, LdapDN oriChildName, LdapDN newParentName ) throws NamingException
+ public void move( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Moving name = '" + oriChildName.toString() + " to name = '" + newParentName + "'" );
+ log.debug( "Moving name = '" + opContext.getDn().getUpName() + " to name = '" +
+ ((MoveOperationContext)opContext).getParent().getUpName() + "'" );
}
checkAuthenticated( MessageTypeEnum.MOD_DN_REQUEST );
- next.move( oriChildName, newParentName );
- invalidateAuthenticatorCaches( oriChildName );
+ next.move( opContext );
+ invalidateAuthenticatorCaches( opContext.getDn() );
}
- public NamingEnumeration search( NextInterceptor next, LdapDN base, Map env, ExprNode filter,
- SearchControls searchCtls ) throws NamingException
+ public NamingEnumeration<SearchResult> search( NextInterceptor next, OperationContext opContext ) throws NamingException
{
if ( IS_DEBUG )
{
- log.debug( "Search for base = '" + base.toString() + "'" );
+ log.debug( "Search for base = '" + opContext.getDn().getUpName() + "'" );
}
checkAuthenticated( MessageTypeEnum.SEARCH_REQUEST );
- return next.search( base, env, filter, searchCtls );
+ return next.search( opContext );
}
@@ -456,19 +440,22 @@
}
- public void bind( NextInterceptor next, LdapDN bindDn, byte[] credentials, List<String> mechanisms, String saslAuthId )
- throws NamingException
- {
+ public void bind( NextInterceptor next, OperationContext opContext )
+ throws NamingException
+ {
+ // The DN is always normalized here
+ LdapDN normBindDn = opContext.getDn();
+ String bindUpDn = normBindDn.getUpName();
if ( IS_DEBUG )
{
- log.debug( "Bind operation. bindDn: " + bindDn );
+ log.debug( "Bind operation. bindDn: " + bindUpDn );
}
// check if we are already authenticated and if so we return making
// sure first that the credentials are not exposed within context
ServerContext ctx = ( ServerContext ) InvocationStack.getInstance().peek().getCaller();
-
+
if ( IS_DEBUG )
{
log.debug( "bind: principal: " + ctx.getPrincipal() );
@@ -483,34 +470,38 @@
return;
}
-
+
// pick the first matching authenticator type
Collection<Authenticator> authenticators = null;
- for ( String mechanism:mechanisms )
+ for ( String mechanism:((BindOperationContext)opContext).getMechanisms() )
{
authenticators = getAuthenticators( mechanism );
-
+
if ( authenticators != null )
{
break;
}
}
-
+
if ( authenticators == null )
{
log.debug( "No authenticators found, delegating bind to the nexus." );
+
// as a last resort try binding via the nexus
- next.bind( bindDn, credentials, mechanisms, saslAuthId );
+ next.bind( opContext );
+
log.debug( "Nexus succeeded on bind operation." );
+
// bind succeeded if we got this far
- ctx.setPrincipal( new TrustedPrincipalWrapper( new LdapPrincipal( bindDn, LdapJndiProperties
+ ctx.setPrincipal( new TrustedPrincipalWrapper( new LdapPrincipal( normBindDn, LdapJndiProperties
.getAuthenticationLevel( ctx.getEnvironment() ) ) ) );
+
// remove creds so there is no security risk
ctx.removeFromEnvironment( Context.SECURITY_CREDENTIALS );
return;
}
-
+
// TODO : we should refactor that.
// try each authenticators
for ( Authenticator authenticator:authenticators )
@@ -518,11 +509,14 @@
try
{
// perform the authentication
- LdapPrincipal authorizationId = authenticator.authenticate( bindDn, ctx );
+ LdapPrincipal authorizationId = authenticator.authenticate( normBindDn, ctx );
+
// authentication was successful
ctx.setPrincipal( new TrustedPrincipalWrapper( authorizationId ) );
+
// remove creds so there is no security risk
ctx.removeFromEnvironment( Context.SECURITY_CREDENTIALS );
+
return;
}
catch ( LdapAuthenticationException e )
@@ -530,7 +524,7 @@
// authentication failed, try the next authenticator
if ( log.isInfoEnabled() )
{
- log.info( "Authenticator " + authenticator.getClass() + " failed to authenticate " + bindDn );
+ log.info( "Authenticator " + authenticator.getClass() + " failed to authenticate " + bindUpDn );
}
}
catch ( Exception e )
@@ -538,11 +532,11 @@
// Log other exceptions than LdapAuthenticationException
if ( log.isWarnEnabled() )
{
- log.warn( "Unexpected exception from " + authenticator.getClass() + " for principal " + bindDn, e );
+ log.warn( "Unexpected exception from " + authenticator.getClass() + " for principal " + bindUpDn, e );
}
}
}
-
+
if ( log.isInfoEnabled() )
{
log.info( "Cannot bind to the server " );
Modified: directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/LdapPrincipal.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/LdapPrincipal.java?view=diff&rev=541123&r1=541122&r2=541123
==============================================================================
--- directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/LdapPrincipal.java (original)
+++ directory/apacheds/branches/apacheds-sasl-branch/core/src/main/java/org/apache/directory/server/core/authn/LdapPrincipal.java Wed May 23 17:26:40 2007
@@ -27,6 +27,7 @@
import org.apache.directory.shared.ldap.aci.AuthenticationLevel;
import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.util.StringTools;
/**
@@ -41,13 +42,16 @@
private static final long serialVersionUID = 3906650782395676720L;
/** the normalized distinguished name of the principal */
- private final Name name;
+ private final LdapDN name;
/** the no name anonymous user whose DN is the empty String */
public static final LdapPrincipal ANONYMOUS = new LdapPrincipal();
/** the authentication level for this principal */
private final AuthenticationLevel authenticationLevel;
+
+ /** The userPassword */
+ private byte[] userPassword;
/**
@@ -58,10 +62,27 @@
* @param name the normalized distinguished name of the principal
* @param authenticationLevel
*/
- LdapPrincipal( Name name, AuthenticationLevel authenticationLevel )
+ LdapPrincipal( LdapDN name, AuthenticationLevel authenticationLevel )
{
this.name = name;
this.authenticationLevel = authenticationLevel;
+ this.userPassword = null;
+ }
+
+ /**
+ * Creates a new LDAP/X500 principal without any group associations. Keep
+ * this package friendly so only code in the package can create a
+ * trusted principal.
+ *
+ * @param name the normalized distinguished name of the principal
+ * @param authenticationLevel
+ * @param userPassword The user password
+ */
+ LdapPrincipal( LdapDN name, AuthenticationLevel authenticationLevel, byte[] userPassword )
+ {
+ this.name = name;
+ this.authenticationLevel = authenticationLevel;
+ this.userPassword = userPassword;
}
@@ -71,8 +92,9 @@
*/
private LdapPrincipal()
{
- this.name = new LdapDN();
- this.authenticationLevel = AuthenticationLevel.NONE;
+ name = new LdapDN();
+ authenticationLevel = AuthenticationLevel.NONE;
+ userPassword = null;
}
@@ -93,7 +115,7 @@
*/
public String getName()
{
- return name.toString();
+ return name.getNormName();
}
@@ -114,6 +136,18 @@
*/
public String toString()
{
- return name.toString();
+ return "['" + name.getUpName() + "', '" + StringTools.utf8ToString( userPassword ) +"']'";
+ }
+
+
+ public byte[] getUserPassword()
+ {
+ return userPassword;
+ }
+
+
+ public void setUserPassword( byte[] userPassword )
+ {
+ this.userPassword = userPassword;
}
}