Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 4377 invoked from network); 4 Sep 2009 11:17:23 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 4 Sep 2009 11:17:23 -0000 Received: (qmail 90086 invoked by uid 500); 4 Sep 2009 11:17:23 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 90020 invoked by uid 500); 4 Sep 2009 11:17:22 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 90011 invoked by uid 99); 4 Sep 2009 11:17:22 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Sep 2009 11:17:22 +0000 X-ASF-Spam-Status: No, hits=-1999.6 required=10.0 tests=ALL_TRUSTED,SUBJECT_FUZZY_TION X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Sep 2009 11:17:16 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id DACD023888E6; Fri, 4 Sep 2009 11:16:54 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r811342 - in /directory/apacheds/branches/apacheds-schema/ldif-partition: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/directory/ src/main/java/org/apache/directory/server/ src/main/... Date: Fri, 04 Sep 2009 11:16:54 -0000 To: commits@directory.apache.org From: elecharny@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090904111654.DACD023888E6@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: elecharny Date: Fri Sep 4 11:16:53 2009 New Revision: 811342 URL: http://svn.apache.org/viewvc?rev=811342&view=rev Log: Added a new sub project for LDIF partition Added: directory/apacheds/branches/apacheds-schema/ldif-partition/ directory/apacheds/branches/apacheds-schema/ldif-partition/pom.xml directory/apacheds/branches/apacheds-schema/ldif-partition/src/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/DitToLdifWriter.java directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifPartition.java directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifStore.java directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/ads-2.ldif directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/sample-config.ldif directory/apacheds/branches/apacheds-schema/ldif-partition/src/test/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/test/java/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/test/java/org/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/test/java/org/apache/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/test/java/org/apache/directory/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/test/java/org/apache/directory/server/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/test/java/org/apache/directory/server/core/ directory/apacheds/branches/apacheds-schema/ldif-partition/src/test/java/org/apache/directory/server/core/partition/ Added: directory/apacheds/branches/apacheds-schema/ldif-partition/pom.xml URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/ldif-partition/pom.xml?rev=811342&view=auto ============================================================================== --- directory/apacheds/branches/apacheds-schema/ldif-partition/pom.xml (added) +++ directory/apacheds/branches/apacheds-schema/ldif-partition/pom.xml Fri Sep 4 11:16:53 2009 @@ -0,0 +1,126 @@ + + + + + + 4.0.0 + + org.apache.directory.server + apacheds-parent + 1.5.6-SNAPSHOT + + apacheds-ldif-partition + ApacheDS LDIF Partition + jar + + + A partition that backs it's entries and indices in AvlTrees within memory. + + + + + org.apache.directory.server + apacheds-core-entry + ${pom.version} + + + + org.apache.directory.server + apacheds-core-avl + ${pom.version} + + + + org.apache.directory.server + apacheds-avl-partition + ${pom.version} + + + + org.apache.directory.server + apacheds-core-shared + ${pom.version} + + + + org.apache.directory.server + apacheds-core-constants + ${pom.version} + + + + org.apache.directory.server + apacheds-core + ${pom.version} + + + + org.apache.directory.server + apacheds-xdbm-base + ${pom.version} + + + + org.apache.directory.server + apacheds-xdbm-search + ${pom.version} + + + + org.apache.directory.shared + shared-ldap + ${org.apache.directory.shared.version} + + + org.apache.directory.shared + shared-ldap-constants + ${org.apache.directory.shared.version} + + + + + org.apache.directory.shared + shared-ldap-client-api + ${org.apache.directory.shared.version} + test + + + + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + verify + + jar + + + + + + + + Added: directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/DitToLdifWriter.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/DitToLdifWriter.java?rev=811342&view=auto ============================================================================== --- directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/DitToLdifWriter.java (added) +++ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/DitToLdifWriter.java Fri Sep 4 11:16:53 2009 @@ -0,0 +1,202 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.server.core.partition.ldif; + +import java.io.File; +import java.io.FileFilter; +import java.io.FileWriter; +import java.util.List; + +import org.apache.directory.shared.ldap.client.api.LdapConnection; +import org.apache.directory.shared.ldap.client.api.messages.AddResponse; +import org.apache.directory.shared.ldap.client.api.messages.SearchResponse; +import org.apache.directory.shared.ldap.client.api.messages.SearchResultEntry; +import org.apache.directory.shared.ldap.cursor.Cursor; +import org.apache.directory.shared.ldap.entry.Entry; +import org.apache.directory.shared.ldap.filter.SearchScope; +import org.apache.directory.shared.ldap.ldif.LdifEntry; +import org.apache.directory.shared.ldap.ldif.LdifReader; +import org.apache.directory.shared.ldap.ldif.LdifUtils; +import org.apache.directory.shared.ldap.name.LdapDN; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * A simple utility to dump the DIT data into LDIF files on FS. + * + * The pattern followed is as follows on FS + * Each entry will have a directory with its DN as name and an LDIF file with the same DN'.ldif' + * as its name. + * + * NOTE: this file depends on ldap-client-api module + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class DitToLdifWriter +{ + + private LdapConnection connection; + + private LdifReader ldifParser = new LdifReader(); + + private FileFilter dirFilter = new FileFilter() + { + public boolean accept( File dir ) + { + return dir.isDirectory(); + } + }; + + private static Logger LOG = LoggerFactory.getLogger( DitToLdifWriter.class ); + + public DitToLdifWriter() + { + connection = new LdapConnection( "localhost", 10389 ); + try + { + connection.bind( "uid=admin,ou=system", "secret" ); + } + catch( Exception e ) + { + throw new RuntimeException( "Failed to connect to the server", e ); + } + } + + + public void dumpDitToFS( String dn, File baseDir ) throws Exception + { + Cursor cursor = connection.search( dn, "(objectclass=*)", SearchScope.SUBTREE, "*", "+" ); + + StringBuilder filePath = new StringBuilder(); + + while( cursor.next() ) + { + SearchResponse searchRes = cursor.get(); + if( searchRes instanceof SearchResultEntry ) + { + SearchResultEntry searchResultEntry = ( SearchResultEntry ) searchRes; + Entry entry = searchResultEntry.getEntry(); + + LdapDN entryDn = entry.getDn(); + int size = entryDn.size(); + + filePath.append( baseDir.getAbsolutePath() ).append( File.separator ); + for( int i =0; i< size; i++ ) + { + filePath.append( entryDn.getRdn( i ).getUpName().toLowerCase() ).append( File.separator ); + } + + File dir = new File( filePath.toString() ); + dir.mkdirs(); + filePath.setLength( 0 ); + String ldif = LdifUtils.convertEntryToLdif( entry ); + + File ldifFile = new File( dir, entryDn.getRdn().getUpName().toLowerCase() + ".ldif" ); + FileWriter fw = new FileWriter( ldifFile ); + fw.write( ldif ); + fw.close(); + } + } + + cursor.close(); + } + + + public void loadConfig( File baseDir, String partitionSuffix ) throws Exception + { + File dir = new File( baseDir, partitionSuffix ); + + if( ! dir.exists() ) + { + throw new Exception( "The specified configuration dir" + partitionSuffix + " doesn't exist under " + baseDir.getAbsolutePath() ); + } + + loadEntry( dir ); + } + + + private void loadEntry( File entryDir ) throws Exception + { + LOG.warn( "processing dir {}", entryDir.getName() ); + File ldifFile = new File( entryDir, entryDir.getName() + ".ldif" ); + + if( ldifFile.exists() ) + { + LOG.warn( "ldif file {} exists", ldifFile.getName() ); + List entries = ldifParser.parseLdifFile( ldifFile.getAbsolutePath() ); + if( entries != null && !entries.isEmpty() ) + { + LOG.warn( "adding entry {}", entries.get( 0 ) ); + // this ldif will have only one entry + AddResponse resp = connection.add( entries.get( 0 ).getEntry() ); + LOG.warn( "{}", resp.getLdapResult().getResultCode() ); + } + } + else + { + LOG.warn( "ldif file doesn't exist {}", ldifFile.getAbsolutePath() ); + } + + File[] dirs = entryDir.listFiles( dirFilter ); + if( dirs != null ) + { + for( File f : dirs ) + { + loadEntry( f ); + } + } + } + + + public void close() throws Exception + { + connection.close(); + } + + public static void main( String[] args ) throws Exception + { + DitToLdifWriter configWriter = new DitToLdifWriter(); + String partitionSuffix = "ou=config"; + File baseDir = new File( "/tmp" ); + configWriter.dumpDitToFS( partitionSuffix, baseDir ); +// configWriter.loadConfig( baseDir, partitionSuffix ); + configWriter.close(); + + /* + LdifReader reader = new LdifReader( new File( "src/main/resources/ads-2.ldif" ) ); + Iterator itr = reader.iterator(); + while( itr.hasNext() ) + { + try + { + LdifEntry entry = itr.next(); + configWriter.connection.add( entry.getEntry() ); + } + catch( Exception e ) + { + e.printStackTrace(); + System.exit( 1 ); + } + } + */ + } +} Added: directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifPartition.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifPartition.java?rev=811342&view=auto ============================================================================== --- directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifPartition.java (added) +++ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifPartition.java Fri Sep 4 11:16:53 2009 @@ -0,0 +1,641 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.server.core.partition.ldif; + +import java.io.File; +import java.io.FileFilter; +import java.io.FileWriter; +import java.util.Iterator; +import java.util.List; + +import javax.naming.InvalidNameException; + +import org.apache.directory.server.core.DirectoryService; +import org.apache.directory.server.core.entry.ClonedServerEntry; +import org.apache.directory.server.core.entry.DefaultServerEntry; +import org.apache.directory.server.core.entry.ServerEntry; +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.ModifyOperationContext; +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.RenameOperationContext; +import org.apache.directory.server.core.interceptor.context.UnbindOperationContext; +import org.apache.directory.server.core.partition.avl.AvlPartition; +import org.apache.directory.server.core.partition.impl.btree.BTreePartition; +import org.apache.directory.server.xdbm.Index; +import org.apache.directory.server.xdbm.IndexCursor; +import org.apache.directory.shared.ldap.ldif.LdifEntry; +import org.apache.directory.shared.ldap.ldif.LdifReader; +import org.apache.directory.shared.ldap.ldif.LdifUtils; +import org.apache.directory.shared.ldap.name.LdapDN; +import org.apache.directory.shared.ldap.schema.registries.Registries; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * TODO LdifPartition. + * + * @org.apache.xbean.XBean + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class LdifPartition extends BTreePartition +{ + private LdifReader ldifParser = new LdifReader(); + + private File configParentDirectory; + + private DirectoryService directoryService; + + private int ldifScanInterval; + + private FileFilter dirFilter = new FileFilter() + { + public boolean accept( File dir ) + { + return dir.isDirectory(); + } + }; + + private static final String CONF_FILE_EXTN = ".ldif"; + + private static Logger LOG = LoggerFactory.getLogger( LdifPartition.class ); + + private AvlPartition wrappedPartition = new AvlPartition(); + + public LdifPartition() + { + } + + + + public void init( DirectoryService directoryService ) throws Exception + { + wrappedPartition.init( directoryService ); + + this.directoryService = directoryService; + this.registries = directoryService.getRegistries(); + this.searchEngine = wrappedPartition.getSearchEngine(); + + LOG.debug( "id is : {}", wrappedPartition.getId() ); + this.configParentDirectory = new File( directoryService.getWorkingDirectory().getPath() + File.separator + + wrappedPartition.getId() ); + // configParentDirectory.mkdir(); + // load the config + loadConfig(); + } + + + @Override + public void add( AddOperationContext addContext ) throws Exception + { + wrappedPartition.add( addContext ); + add( addContext.getEntry() ); + } + + + @Override + public void delete( Long id ) throws Exception + { + ServerEntry entry = lookup( id ); + + wrappedPartition.delete( id ); + + if ( entry != null ) + { + File file = getFile( entry.getDn() ).getParentFile(); + boolean deleted = deleteFile( file ); + LOG.warn( "deleted file {} {}", file.getAbsoluteFile(), deleted ); + } + + } + + + private void entryMoved( LdapDN entryDn, Long entryId ) throws Exception + { + File file = getFile( entryDn ).getParentFile(); + boolean deleted = deleteFile( file ); + LOG.warn( "move operation: deleted file {} {}", file.getAbsoluteFile(), deleted ); + + add( lookup( entryId ) ); + + IndexCursor cursor = getSubLevelIndex().forwardCursor( entryId ); + while ( cursor.next() ) + { + add( cursor.get().getObject() ); + } + + cursor.close(); + } + + + @Override + public void modify( ModifyOperationContext modifyContext ) throws Exception + { + wrappedPartition.modify( modifyContext ); + // just overwrite the existing file + add( modifyContext.getEntry() ); + } + + + @Override + public void move( MoveOperationContext moveContext ) throws Exception + { + LdapDN oldDn = moveContext.getDn(); + Long id = getEntryId( oldDn.getNormName() ); + + wrappedPartition.move( moveContext ); + + entryMoved( oldDn, id ); + } + + + @Override + public void moveAndRename( MoveAndRenameOperationContext moveAndRenameContext ) throws Exception + { + LdapDN oldDn = moveAndRenameContext.getDn(); + Long id = getEntryId( oldDn.getNormName() ); + + wrappedPartition.moveAndRename( moveAndRenameContext ); + + entryMoved( oldDn, id ); + } + + + @Override + public void rename( RenameOperationContext renameContext ) throws Exception + { + LdapDN oldDn = renameContext.getDn(); + Long id = getEntryId( oldDn.getNormName() ); + + wrappedPartition.rename( renameContext ); + + entryMoved( oldDn, id ); + } + + + /** + * loads the configuration into the DIT from the file system + * Note that it assumes the presence of a directory with the partition suffix's upname + * under the partition's base dir + * + * for ex. if 'config' is the partition's id and 'ou=config' is its suffix it looks for the dir with the path + * + * /config/ou=config + * e.x example.com/config/ou=config + * + * NOTE: this dir setup is just to ease the testing of this partition, this needs to be + * replaced with some kind of bootstrapping the default config from a jar file and + * write to the FS in LDIF format + * + * @throws Exception + */ + public void loadConfig() throws Exception + { + File dir = new File( configParentDirectory, wrappedPartition.getSuffix().getUpName() ); + + // if( ! dir.exists() ) + // { + // throw new Exception( "The specified configuration dir " + getSuffix().toLowerCase() + " doesn't exist under " + configParentDirectory.getAbsolutePath() ); + // } + + loadEntry( dir ); + } + + + /* + * recursively load the configuration entries + */ + private void loadEntry( File entryDir ) throws Exception + { + LOG.error( "processing dir {}", entryDir.getName() ); + + File ldifFile = new File( entryDir, entryDir.getName() + CONF_FILE_EXTN ); + + if ( ldifFile.exists() ) + { + LOG.debug( "parsing ldif file {}", ldifFile.getName() ); + List entries = ldifParser.parseLdifFile( ldifFile.getAbsolutePath() ); + if ( entries != null && !entries.isEmpty() ) + { + // this ldif will have only one entry + LdifEntry ldifEntry = entries.get( 0 ); + LOG.debug( "adding entry {}", ldifEntry ); + + ServerEntry serverEntry = new DefaultServerEntry( registries, ldifEntry.getEntry() ); + + // call add on the wrapped partition not on the self + wrappedPartition.getStore().add( serverEntry ); + } + } + else + { + // TODO do we need to bomb out if the expected LDIF file doesn't exist + LOG.warn( "ldif file doesn't exist {}", ldifFile.getAbsolutePath() ); + } + + File[] dirs = entryDir.listFiles( dirFilter ); + if ( dirs != null ) + { + for ( File f : dirs ) + { + loadEntry( f ); + } + } + } + + + private File getFile( LdapDN entryDn ) + { + int size = entryDn.size(); + + StringBuilder filePath = new StringBuilder(); + filePath.append( configParentDirectory.getAbsolutePath() ).append( File.separator ); + + for ( int i = 0; i < size; i++ ) + { + filePath.append( entryDn.getRdn( i ).getUpName().toLowerCase() ).append( File.separator ); + } + + File dir = new File( filePath.toString() ); + dir.mkdirs(); + + return new File( dir, entryDn.getRdn().getUpName().toLowerCase() + CONF_FILE_EXTN ); + } + + + private void add( ServerEntry entry ) throws Exception + { + FileWriter fw = new FileWriter( getFile( entry.getDn() ) ); + fw.write( LdifUtils.convertEntryToLdif( entry ) ); + fw.close(); + } + + + private boolean deleteFile( File file ) + { + if ( file.isDirectory() ) + { + File[] files = file.listFiles(); + for ( File f : files ) + { + deleteFile( f ); + } + + return file.delete(); + } + else + { + return file.delete(); + } + } + + + @Override + public void addIndexOn( Index index ) throws Exception + { + wrappedPartition.addIndexOn( index ); + } + + + @Override + public int count() throws Exception + { + return wrappedPartition.count(); + } + + + @Override + public void destroy() throws Exception + { + wrappedPartition.destroy(); + } + + + @Override + public Index getAliasIndex() + { + return wrappedPartition.getAliasIndex(); + } + + + @Override + public int getChildCount( Long id ) throws Exception + { + return wrappedPartition.getChildCount( id ); + } + + + @Override + public String getEntryDn( Long id ) throws Exception + { + return wrappedPartition.getEntryDn( id ); + } + + + @Override + public Long getEntryId( String dn ) throws Exception + { + return wrappedPartition.getEntryId( dn ); + } + + + @Override + public String getEntryUpdn( Long id ) throws Exception + { + return wrappedPartition.getEntryUpdn( id ); + } + + + @Override + public String getEntryUpdn( String dn ) throws Exception + { + return wrappedPartition.getEntryUpdn( dn ); + } + + + @Override + public Index getNdnIndex() + { + return wrappedPartition.getNdnIndex(); + } + + + @Override + public Index getOneAliasIndex() + { + return wrappedPartition.getOneAliasIndex(); + } + + + @Override + public Index getOneLevelIndex() + { + return wrappedPartition.getOneLevelIndex(); + } + + + @Override + public Long getParentId( Long childId ) throws Exception + { + return wrappedPartition.getParentId( childId ); + } + + + @Override + public Long getParentId( String dn ) throws Exception + { + return wrappedPartition.getParentId( dn ); + } + + + @Override + public Index getPresenceIndex() + { + return wrappedPartition.getPresenceIndex(); + } + + + @Override + public String getProperty( String propertyName ) throws Exception + { + return wrappedPartition.getProperty( propertyName ); + } + + + @Override + public Index getSubAliasIndex() + { + return wrappedPartition.getSubAliasIndex(); + } + + + @Override + public Index getSubLevelIndex() + { + return wrappedPartition.getSubLevelIndex(); + } + + + @Override + public Index getSystemIndex( String id ) throws Exception + { + return wrappedPartition.getSystemIndex( id ); + } + + + @Override + public Iterator getSystemIndices() + { + return wrappedPartition.getSystemIndices(); + } + + + @Override + public Index getUpdnIndex() + { + return wrappedPartition.getUpdnIndex(); + } + + + @Override + public Index getUserIndex( String id ) throws Exception + { + return wrappedPartition.getUserIndex( id ); + } + + + @Override + public Iterator getUserIndices() + { + return wrappedPartition.getUserIndices(); + } + + + @Override + public boolean hasSystemIndexOn( String id ) throws Exception + { + return wrappedPartition.hasSystemIndexOn( id ); + } + + + @Override + public boolean hasUserIndexOn( String id ) throws Exception + { + return wrappedPartition.hasUserIndexOn( id ); + } + + + @Override + public boolean isInitialized() + { + return wrappedPartition.isInitialized(); + } + + + @Override + public IndexCursor list( Long id ) throws Exception + { + return wrappedPartition.list( id ); + } + + + @Override + public ClonedServerEntry lookup( Long id ) throws Exception + { + return wrappedPartition.lookup( id ); + } + + + @Override + public void setAliasIndexOn( Index index ) throws Exception + { + wrappedPartition.setAliasIndexOn( index ); + } + + + @Override + public void setNdnIndexOn( Index index ) throws Exception + { + wrappedPartition.setNdnIndexOn( index ); + } + + + @Override + public void setOneAliasIndexOn( Index index ) throws Exception + { + wrappedPartition.setOneAliasIndexOn( index ); + } + + + @Override + public void setOneLevelIndexOn( Index index ) throws Exception + { + wrappedPartition.setOneLevelIndexOn( index ); + } + + + @Override + public void setPresenceIndexOn( Index index ) throws Exception + { + wrappedPartition.setPresenceIndexOn( index ); + } + + + @Override + public void setProperty( String propertyName, String propertyValue ) throws Exception + { + wrappedPartition.setProperty( propertyName, propertyValue ); + } + + + @Override + public void setRegistries( Registries registries ) throws Exception + { + wrappedPartition.setRegistries( registries ); + } + + + @Override + public void setSubAliasIndexOn( Index index ) throws Exception + { + wrappedPartition.setSubAliasIndexOn( index ); + } + + + @Override + public void setUpdnIndexOn( Index index ) throws Exception + { + wrappedPartition.setUpdnIndexOn( index ); + } + + + @Override + public void sync() throws Exception + { + wrappedPartition.sync(); + //TODO implement the File I/O here to push the update to entries to the corresponding LDIF file + } + + + public void bind( BindOperationContext bindContext ) throws Exception + { + wrappedPartition.bind( bindContext ); + } + + + public LdapDN getSuffix() + { + return wrappedPartition.getSuffix(); + } + + + public void unbind( UnbindOperationContext unbindContext ) throws Exception + { + wrappedPartition.unbind( unbindContext ); + } + + + @Override + public int getCacheSize() + { + // TODO Auto-generated method stub + return super.getCacheSize(); + } + + + @Override + public String getId() + { + // TODO Auto-generated method stub + return super.getId(); + } + + + @Override + public void setId( String id ) + { + super.setId( id ); + wrappedPartition.setId( id ); + } + + + @Override + public void setSuffix( String suffix ) throws InvalidNameException + { + super.setSuffix( suffix ); + wrappedPartition.setSuffix( suffix ); + } + + + /** + * the interval at which the config directory containing LDIF files + * should be scanned, default value is 10 min + * + * @param ldifScanInterval the scan interval time in minutes + */ + public void setLdifScanInterval( int ldifScanInterval ) + { + this.ldifScanInterval = ldifScanInterval; + } + +} \ No newline at end of file Added: directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifStore.java URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifStore.java?rev=811342&view=auto ============================================================================== --- directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifStore.java (added) +++ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/java/org/apache/directory/server/core/partition/ldif/LdifStore.java Fri Sep 4 11:16:53 2009 @@ -0,0 +1,600 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.server.core.partition.ldif; + + +import java.io.File; +import java.io.FileFilter; +import java.io.FileWriter; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import org.apache.directory.server.core.entry.DefaultServerEntry; +import org.apache.directory.server.core.entry.ServerEntry; +import org.apache.directory.server.core.partition.avl.AvlStore; +import org.apache.directory.server.xdbm.Index; +import org.apache.directory.server.xdbm.IndexCursor; +import org.apache.directory.server.xdbm.IndexNotFoundException; +import org.apache.directory.server.xdbm.Store; +import org.apache.directory.shared.ldap.entry.Modification; +import org.apache.directory.shared.ldap.entry.ModificationOperation; +import org.apache.directory.shared.ldap.ldif.LdifEntry; +import org.apache.directory.shared.ldap.ldif.LdifReader; +import org.apache.directory.shared.ldap.ldif.LdifUtils; +import org.apache.directory.shared.ldap.name.LdapDN; +import org.apache.directory.shared.ldap.name.Rdn; +import org.apache.directory.shared.ldap.schema.registries.Registries; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * TODO LdifStore. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class LdifStore implements Store +{ + + /** the working directory to use for files */ + private File workingDirectory; + + /** true if we sync disks on every write operation */ + private boolean isSyncOnWrite = true; + + /** in memory store used for serving the config data present in LDIF files */ + private AvlStore wrappedStore = new AvlStore(); + + private Registries registries; + + private LdifReader ldifParser = new LdifReader(); + + private FileFilter dirFilter = new FileFilter() + { + public boolean accept( File dir ) + { + return dir.isDirectory(); + } + }; + + private static final String CONF_FILE_EXTN = ".ldif"; + + private static Logger LOG = LoggerFactory.getLogger( LdifStore.class ); + + public void init( Registries registries ) throws Exception + { + this.registries = registries; + wrappedStore.init( registries ); + + // load the config + loadConfig(); + } + + + /** + * loads the configuration into the DIT from the file system + * @throws Exception + */ + public void loadConfig() throws Exception + { + String upsuffixDir = wrappedStore.getUpSuffix().getUpName().toLowerCase(); + File dir = new File( workingDirectory, upsuffixDir ); + + if( ! dir.exists() ) + { + throw new Exception( "The specified configuration dir " + upsuffixDir + " doesn't exist under " + workingDirectory.getAbsolutePath() ); + } + + loadEntry( dir ); + } + + + /* + * recursively load the configuration entries + */ + private void loadEntry( File entryDir ) throws Exception + { + LOG.debug( "processing dir {}", entryDir.getName() ); + + File ldifFile = new File( entryDir, entryDir.getName() + CONF_FILE_EXTN ); + + if( ldifFile.exists() ) + { + LOG.debug( "parsing ldif file {}", ldifFile.getName() ); + List entries = ldifParser.parseLdifFile( ldifFile.getAbsolutePath() ); + if( entries != null && !entries.isEmpty() ) + { + // this ldif will have only one entry + LdifEntry ldifEntry = entries.get( 0 ); + LOG.debug( "adding entry {}", ldifEntry ); + + ServerEntry serverEntry = new DefaultServerEntry( registries, ldifEntry.getEntry() ); + + // call add on the wrapped store not on the self + wrappedStore.add( serverEntry ); + } + } + else + { + // TODO do we need to bomb out if the expected LDIF file doesn't exist + // I think so + LOG.warn( "ldif file doesn't exist {}", ldifFile.getAbsolutePath() ); + } + + File[] dirs = entryDir.listFiles( dirFilter ); + if( dirs != null ) + { + for( File f : dirs ) + { + loadEntry( f ); + } + } + } + + + private File getFile( LdapDN entryDn ) + { + int size = entryDn.size(); + + StringBuilder filePath = new StringBuilder(); + filePath.append( workingDirectory.getAbsolutePath() ).append( File.separator ); + + for( int i =0; i< size; i++ ) + { + filePath.append( entryDn.getRdn( i ).getUpName().toLowerCase() ).append( File.separator ); + } + + File dir = new File( filePath.toString() ); + dir.mkdirs(); + + return new File( dir, entryDn.getRdn().getUpName().toLowerCase() + CONF_FILE_EXTN ); + } + + + public void add( ServerEntry entry ) throws Exception + { + wrappedStore.add( entry ); + + FileWriter fw = new FileWriter( getFile( entry.getDn() ) ); + fw.write( LdifUtils.convertEntryToLdif( entry ) ); + fw.close(); + } + + + public void delete( Long id ) throws Exception + { + ServerEntry entry = lookup( id ); + LOG.warn( "deleting the entry with id {} and dn {}", id, entry.getDn() ); + + LOG.warn( "having the parent id {}", getParentId( entry.getDn().getUpName() ) ); + wrappedStore.delete( id ); + + if( entry != null ) + { + File file = getFile( entry.getDn() ).getParentFile(); + boolean deleted = deleteFile( file ); + LOG.warn( "deleted file {} {}", file.getAbsoluteFile(), deleted ); + } + } + + + private boolean deleteFile( File file ) + { + if( file.isDirectory() ) + { + File[] files = file.listFiles(); + for( File f : files ) + { + deleteFile( f ); + } + } + + return file.delete(); + } + + + public void destroy() throws Exception + { + wrappedStore.destroy(); + } + + + public void modify( LdapDN dn, List mods ) throws Exception + { + wrappedStore.modify( dn, mods ); + } + + + public void modify( LdapDN dn, ModificationOperation modOp, ServerEntry mods ) throws Exception + { + wrappedStore.modify( dn, modOp, mods ); + } + + + public void move( LdapDN oldChildDn, LdapDN newParentDn, Rdn newRdn, boolean deleteOldRdn ) throws Exception + { + wrappedStore.move( oldChildDn, newParentDn, newRdn, deleteOldRdn ); + } + + + public void move( LdapDN oldChildDn, LdapDN newParentDn ) throws Exception + { + wrappedStore.move( oldChildDn, newParentDn ); + } + + + public void rename( LdapDN dn, Rdn newRdn, boolean deleteOldRdn ) throws Exception + { + wrappedStore.rename( dn, newRdn, deleteOldRdn ); + } + + + public void sync() throws Exception + { + //TODO implement the File I/O here to push the update to entries to the corresponding LDIF file + } + + + public void setWorkingDirectory( File workingDirectory ) + { + this.workingDirectory = workingDirectory; + } + + + public File getWorkingDirectory() + { + return workingDirectory; + } + + + public void setSyncOnWrite( boolean isSyncOnWrite ) + { + this.isSyncOnWrite = isSyncOnWrite; + } + + + public boolean isSyncOnWrite() + { + return isSyncOnWrite; + } + + + public void addIndex( Index index ) throws Exception + { + wrappedStore.addIndex( index ); + } + + + public int count() throws Exception + { + return wrappedStore.count(); + } + + + public Index getAliasIndex() + { + return wrappedStore.getAliasIndex(); + } + + + public int getChildCount( Long id ) throws Exception + { + return wrappedStore.getChildCount( id ); + } + + + public String getEntryDn( Long id ) throws Exception + { + return wrappedStore.getEntryDn( id ); + } + + + public Long getEntryId( String dn ) throws Exception + { + return wrappedStore.getEntryId( dn ); + } + + + public String getEntryUpdn( Long arg0 ) throws Exception + { + return wrappedStore.getEntryUpdn( arg0 ); + } + + + public String getEntryUpdn( String dn ) throws Exception + { + return wrappedStore.getEntryUpdn( dn ); + } + + + public String getName() + { + return wrappedStore.getName(); + } + + + public Index getNdnIndex() + { + return wrappedStore.getNdnIndex(); + } + + + public Index getOneAliasIndex() + { + return wrappedStore.getOneAliasIndex(); + } + + + public Index getOneLevelIndex() + { + return wrappedStore.getOneLevelIndex(); + } + + + public Long getParentId( Long arg0 ) throws Exception + { + return wrappedStore.getParentId( arg0 ); + } + + + public Long getParentId( String dn ) throws Exception + { + return wrappedStore.getParentId( dn ); + } + + + public Index getPresenceIndex() + { + return wrappedStore.getPresenceIndex(); + } + + + public String getProperty( String propertyName ) throws Exception + { + return wrappedStore.getProperty( propertyName ); + } + + + public Index getSubAliasIndex() + { + return wrappedStore.getSubAliasIndex(); + } + + + public Index getSubLevelIndex() + { + return wrappedStore.getSubLevelIndex(); + } + + + public Index getSystemIndex( String id ) throws IndexNotFoundException + { + return wrappedStore.getSystemIndex( id ); + } + + + public Index getUpdnIndex() + { + return wrappedStore.getUpdnIndex(); + } + + + + public Index getUserIndex( String id ) throws IndexNotFoundException + { + return wrappedStore.getUserIndex( id ); + } + + + public Set> getUserIndices() + { + return wrappedStore.getUserIndices(); + } + + + public boolean hasSystemIndexOn( String id ) throws Exception + { + return wrappedStore.hasSystemIndexOn( id ); + } + + + public boolean hasUserIndexOn( String id ) throws Exception + { + return wrappedStore.hasUserIndexOn( id ); + } + + + public void initRegistries( Registries registries ) + { + wrappedStore.initRegistries( registries ); + } + + + public boolean isInitialized() + { + return wrappedStore.isInitialized(); + } + + + public IndexCursor list( Long id ) throws Exception + { + return wrappedStore.list( id ); + } + + + public ServerEntry lookup( Long id ) throws Exception + { + return wrappedStore.lookup( id ); + } + + + public void setAliasIndex( Index index ) throws Exception + { + wrappedStore.setAliasIndex( index ); + } + + + public void setName( String name ) + { + wrappedStore.setName( name ); + } + + + public void setNdnIndex( Index index ) throws Exception + { + wrappedStore.setNdnIndex( index ); + } + + + public void setOneAliasIndex( Index index ) throws Exception + { + wrappedStore.setOneAliasIndex( index ); + } + + + public void setOneLevelIndex( Index index ) throws Exception + { + wrappedStore.setOneLevelIndex( index ); + } + + + public void setPresenceIndex( Index index ) throws Exception + { + wrappedStore.setPresenceIndex( index ); + } + + + public void setProperty( String propertyName, String propertyValue ) throws Exception + { + wrappedStore.setProperty( propertyName, propertyValue ); + } + + + public void setSubAliasIndex( Index index ) throws Exception + { + wrappedStore.setSubAliasIndex( index ); + } + + + public void setSubLevelIndex( Index index ) throws Exception + { + wrappedStore.setSubLevelIndex( index ); + } + + + public void setUpdnIndex( Index index ) throws Exception + { + wrappedStore.setUpdnIndex( index ); + } + + + public Iterator systemIndices() + { + return wrappedStore.systemIndices(); + } + + + public Iterator userIndices() + { + return wrappedStore.userIndices(); + } + + + //TODO manage the cache size?? + public int getCacheSize() + { + return wrappedStore.getCacheSize(); + } + + + public Index getEntryCsnIndex() + { + return wrappedStore.getEntryCsnIndex(); + } + + + public Index getEntryUuidIndex() + { + return wrappedStore.getEntryUuidIndex(); + } + + + public Index getObjectClassIndex() + { + return wrappedStore.getObjectClassIndex(); + } + + + public LdapDN getSuffix() + { + return wrappedStore.getSuffix(); + } + + + public String getSuffixDn() + { + return wrappedStore.getSuffixDn(); + } + + + public LdapDN getUpSuffix() + { + return wrappedStore.getUpSuffix(); + } + + + public void setCacheSize( int size ) + { + wrappedStore.setCacheSize( size ); + } + + + public void setUserIndices( Set> userIndices ) + { + wrappedStore.setUserIndices( userIndices ); + } + + + public void setSuffixDn( String suffixDn ) + { + wrappedStore.setSuffixDn( suffixDn ); + } + + + public void setEntryCsnIndex( Index index ) throws Exception + { + wrappedStore.setEntryCsnIndex( index ); + } + + + public void setEntryUuidIndex( Index index ) throws Exception + { + wrappedStore.setEntryUuidIndex( index ); + } + + + public void setObjectClassIndex( Index index ) throws Exception + { + wrappedStore.setObjectClassIndex( index ); + } +} Added: directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/ads-2.ldif URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/ads-2.ldif?rev=811342&view=auto ============================================================================== --- directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/ads-2.ldif (added) +++ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/ads-2.ldif Fri Sep 4 11:16:53 2009 @@ -0,0 +1,1122 @@ +# Generated by Apache Directory Studio on 31 July, 2009 12:23:12 AM + +# SCHEMA "ADS-2" +dn: cn=ads-2, ou=schema +objectclass: metaSchema +objectclass: top +cn: ads-2 +m-dependencies: nis +m-dependencies: system + +dn: ou=attributeTypes, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: attributetypes + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.100, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.100 +m-name: ads-directoryServiceId +m-description: The DirectoryService ID +m-supAttributeType: name +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.101, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.101 +m-name: ads-dsAccessControlEnabled +m-description: Tells if access control is activated or not +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.102, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.102 +m-name: ads-dsAllowAnonymousAccess +m-description: Tells if anonymous access are allowed or not +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.103, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.103 +m-name: ads-dsDenormalizeOpAttrsEnabled +m-description: Tells if the operational attributes are denormalized or not +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.104, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.104 +m-name: ads-dsPasswordHidden +m-description: Tells if the password is stored encrypted even for PLAIN authenti + cation +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.105, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.105 +m-name: ads-dsChangeLog +m-description: The ChangeLog system +m-supAttributeType: distinguishedName +m-equality: distinguishedNameMatch +m-ordering: distinguishedNameMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.12 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.106, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.106 +m-name: ads-dsInterceptors +m-description: The list of interceptors +m-supAttributeType: distinguishedName +m-equality: distinguishedNameMatch +m-ordering: distinguishedNameMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.12 + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.107, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.107 +m-name: ads-dsJournal +m-description: The directory service journal +m-supAttributeType: distinguishedName +m-equality: distinguishedNameMatch +m-ordering: distinguishedNameMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.12 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.108, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.108 +m-name: ads-dsPartitions +m-description: The set of partitions +m-supAttributeType: distinguishedName +m-equality: distinguishedNameMatch +m-ordering: distinguishedNameMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.12 + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.109, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.109 +m-name: ads-dsReplication +m-description: The replication configuration +m-supAttributeType: distinguishedName +m-equality: distinguishedNameMatch +m-ordering: distinguishedNameMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.12 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.110, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.110 +m-name: ads-dsMaxPDUSize +m-description: Gives the maximum size of a PDU +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.111, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.111 +m-name: ads-dsSyncPeriodMillis +m-description: Define the duration between two flushes on disk +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.112, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.112 +m-name: ads-dsReplicaId +m-description: The server identifier, used for replication +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.113, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.113 +m-name: ads-dsTestEntries +m-description: The set of entries to inject at startup (may be obsolete) +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.114, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.114 +m-name: ads-dsWorkingDirectory +m-description: The place where data are stored on disk +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.120, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.120 +m-name: ads-changeLogEnabled +m-description: Tells if the changeLog system is up and running +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.121, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.121 +m-name: ads-changeLogExposed +m-description: Tells if the changeLog system is visible by the clients +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.130, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.130 +m-name: ads-interceptorId +m-description: The Interceptor identifier +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.131, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.131 +m-name: ads-interceptorOrder +m-description: The Interceptor order number +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.140, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.140 +m-name: ads-journalEnabled +m-description: Tells if the journal system is up and running. +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.141, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.141 +m-name: ads-journalRotation +m-description: The size before a journal rotation occurs. +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.142, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.142 +m-name: ads-journalWorkingDir +m-description: The place on disk where the journal is stored. +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.143, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.143 +m-name: ads-journalFileName +m-description: The journal file name. +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.150, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.150 +m-name: ads-partitionId +m-description: The Partition identifier +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.151, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.151 +m-name: ads-partitionSuffix +m-description: The partition suffix +m-supAttributeType: distinguishedName +m-equality: distinguishedNameMatch +m-ordering: distinguishedNameMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.12 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.152, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.152 +m-name: ads-partitionIndexedAttributes +m-description: A reference to an indexed attribute +m-supAttributeType: distinguishedName +m-equality: distinguishedNameMatch +m-ordering: distinguishedNameMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.12 + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.153, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.153 +m-name: ads-partitionCacheSize +m-description: The number of entries in the cache for this partition +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.160, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.160 +m-name: ads-indexAttributeId +m-description: The attributeType name or OID +m-supAttributeType: name +m-equality: objectIdentifierMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.38 +m-length: 0 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.161, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.161 +m-name: ads-indexFileName +m-description: The index file name +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.162, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.162 +m-name: ads-indexWorkingDir +m-description: The place on disk where the index file is stored +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.163, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.163 +m-name: ads-indexNumDupLimit +m-description: The number of duplicated element we allow before switching to a s + econdary tree +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.164, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.164 +m-name: ads-indexCacheSize +m-description: The number of key we store in the cache for this index +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.250, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.250 +m-name: ads-serverId +m-description: The server ID +m-supAttributeType: name +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.251, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.251 +m-name: ads-transports +m-description: The reference to the associated transports +m-supAttributeType: distinguishedName +m-equality: distinguishedNameMatch +m-ordering: distinguishedNameMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.12 + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.260, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.260 +m-name: ads-serverDS +m-description: The reference to the associated directoryService +m-supAttributeType: distinguishedName +m-equality: distinguishedNameMatch +m-ordering: distinguishedNameMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.12 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.300, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.300 +m-name: ads-ldapServerConfidentialityRequired +m-description: Tells the server to accept requests using startTLS or LDAPS +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.301, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.301 +m-name: ads-ldapServerAllowAnonymousAccess +m-description: Tells the server to accept Anynymous requests or not +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.302, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.302 +m-name: ads-ldapServerMaxSizeLimit +m-description: The maximum number of entries to return +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.303, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.303 +m-name: ads-ldapServerMaxTimeLimit +m-description: The maximum time before an operation is aborted (in seconds) +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.304, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.304 +m-name: ads-ldapServerSaslHost +m-description: The name of this host, validated during SASL negotiation +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.305, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.305 +m-name: ads-ldapServerSaslPrincipal +m-description: The service principal, used by GSSAPI +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.306, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.306 +m-name: ads-ldapServerSaslRealms +m-description: The realms serviced by this SASL host +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.307, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.307 +m-name: ads-ldapServerDirectoryService +m-description: The reference to the associated DirectoryService +m-supAttributeType: distinguishedName +m-equality: distinguishedNameMatch +m-ordering: distinguishedNameMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.12 + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.308, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.308 +m-name: ads-ldapServerKeystoreFile +m-description: The keystore file to use to store certificates +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.309, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.309 +m-name: ads-ldapServerCertificatePassword +m-description: The certificate passord +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.400, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.400 +m-name: ads-krbAllowableClockSkew +m-description: The allowable clock skew +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.401, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.401 +m-name: ads-krbEncryptionTypes +m-description: The encryption types +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.402, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.402 +m-name: ads-krbEmptyAddressesAllowed +m-description: Whether empty addresses are allowed +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.403, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.403 +m-name: ads-krbForwardableAllowed +m-description: Whether forwardable addresses are allowed +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.404, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.404 +m-name: ads-krbPaEncTimestampRequired +m-description: Whether pre-authentication by encrypted timestamp is required +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.405, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.405 +m-name: ads-krbPostdatedAllowed +m-description: Whether postdated tickets are allowed +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.406, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.406 +m-name: ads-krbProxiableAllowed +m-description: Whether proxiable addresses are allowed +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.407, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.407 +m-name: ads-krbRenewableAllowed +m-description: Whether renewable tickets are allowed +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.408, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.408 +m-name: ads-krbKdcPrincipal +m-description: The service principal name +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.409, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.409 +m-name: ads-krbMaximumRenewableLifetime +m-description: The maximum renewable lifetime +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.410, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.410 +m-name: ads-krbMaximumTicketLifetime +m-description: The maximum ticket lifetime +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.411, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.411 +m-name: ads-krbPrimaryRealm +m-description: The primary realm +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.412, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.412 +m-name: ads-krbBodyChecksumVerified +m-description: Whether to verify the body checksum +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.800, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.800 +m-name: ads-chgPwdPolicyCategoryCount +m-description: The policy category count +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.801, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.801 +m-name: ads-chgPwdPolicyPasswordLength +m-description: The policy minimum password length +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.802, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.802 +m-name: ads-chgPwdPolicyTokenSize +m-description: The policy token size +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.803, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.803 +m-name: ads-chgPwdServicePrincipal +m-description: The Change Password service principal +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.200, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.200 +m-name: ads-transportId +m-description: The transport ID +m-supAttributeType: name +m-equality: caseExactMatch +m-ordering: caseExactOrderingMatch +m-substr: caseExactSubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.44 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.61, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.61 +m-name: ads-transportAddress +m-description: The Address to listen on. +m-supAttributeType: ipHostNumber +m-equality: caseIgnoreOrderingMatch +m-ordering: caseExactOrderingMatch +m-substr: caseIgnoreIA5SubstringsMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.26 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.62, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.62 +m-name: ads-transportBacklog +m-description: The number of messages waiting to be processed. +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.63, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.63 +m-name: ads-transportEnableSSL +m-description: Tells if this transport support SSL. +m-equality: booleanMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.7 +m-singleValue: TRUE + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.2.64, ou=attributeTypes, cn=ads-2, ou=schema +objectclass: metaAttributeType +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.2.64 +m-name: ads-transportNbThreads +m-description: The number of threads to use for the Acceptor +m-equality: integerMatch +m-ordering: integerOrderingMatch +m-syntax: 1.3.6.1.4.1.1466.115.121.1.27 +m-singleValue: TRUE + +dn: ou=comparators, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: comparators + +dn: ou=ditContentRules, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: ditcontentrules + +dn: ou=ditStructureRules, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: ditstructurerules + +dn: ou=matchingRules, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: matchingrules + +dn: ou=matchingRuleUse, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: matchingruleuse + +dn: ou=nameForms, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: nameforms + +dn: ou=normalizers, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: normalizers + +dn: ou=objectClasses, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: objectClasses + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.100, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.100 +m-name: ads-directoryService +m-description: The DirectoryService ObjectClass +m-must: ads-directoryServiceId +m-must: ads-dsInterceptors +m-must: ads-dsPartitions +m-must: ads-dsReplicaId +m-must: ads-dsWorkingDirectory +m-may: ads-dsAccessControlEnabled +m-may: ads-dsAllowAnonymousAccess +m-may: ads-dsChangeLog +m-may: ads-dsDenormalizeOpAttrsEnabled +m-may: ads-dsJournal +m-may: ads-dsMaxPDUSize +m-may: ads-dsPasswordHidden +m-may: ads-dsReplication +m-may: ads-dsSyncPeriodMillis +m-may: ads-dsTestEntries + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.120, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.120 +m-name: ads-changeLog +m-description: The ChangeLog +m-may: ads-changeLogEnabled +m-may: ads-changeLogExposed + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.130, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.130 +m-name: ads-interceptor +m-description: The Interceptor ObjectClass +m-may: ads-changeLogEnabled +m-may: ads-changeLogExposed + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.140, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.140 +m-name: ads-journal +m-description: The Journal +m-must: ads-journalFileName +m-may: ads-journalWorkingDir +m-may: ads-journalRotation +m-may: ads-journalEnabled + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.150, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.150 +m-name: ads-partition +m-description: A generic partition +m-typeObjectClass: ABSTRACT +m-must: ads-partitionId +m-must: ads-partitionSuffix +m-must: ads-partitionIndexedAttributes + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.151, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.151 +m-name: ads-jdbmPartition +m-description: A JDBM partition +m-supObjectClass: ads-partition +m-may: ads-partitionCacheSize + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.160, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.160 +m-name: ads-index +m-description: A generic indexed attribute +m-typeObjectClass: ABSTRACT +m-must: ads-indexAttributeId + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.161, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.161 +m-name: ads-jdbmIndex +m-description: A JDBM indexed attribute +m-supObjectClass: ads-index +m-may: ads-indexFileName +m-may: ads-indexWorkingDir +m-may: ads-indexNumDupLimit +m-may: ads-indexCacheSize + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.250, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.250 +m-name: ads-server +m-description: The server ObjectClass +m-typeObjectClass: ABSTRACT +m-must: ads-serverId +m-must: ads-transports + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.260, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.260 +m-name: ads-catalogBasedServer +m-description: The catalog based server ObjectClass +m-supObjectClass: ads-server +m-typeObjectClass: ABSTRACT +m-must: ads-serverDS + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.300, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.300 +m-name: ads-ldapServer +m-description: The LdapServer ObjectClass +m-supObjectClass: ads-catalogBasedServer +m-may: ads-ldapServerConfidentialityRequired +m-may: ads-ldapServerAllowAnonymousAccess +m-may: ads-ldapServerMaxSizeLimit +m-may: ads-ldapServerMaxTimeLimit +m-may: ads-ldapServerSaslHost +m-may: ads-ldapServerSaslPrincipal +m-may: ads-ldapServerSaslRealms +m-may: ads-ldapServerKeystoreFile +m-may: ads-ldapServerCertificatePassword + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.400, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.400 +m-name: ads-kerberosServer +m-description: The KerberosServer ObjectClass +m-supObjectClass: ads-catalogBasedServer +m-may: ads-krbAllowableClockSkew +m-may: ads-krbEncryptionTypes +m-may: ads-krbEmptyAddressesAllowed +m-may: ads-krbForwardableAllowed +m-may: ads-krbPaEncTimestampRequired +m-may: ads-krbPostdatedAllowed +m-may: ads-krbProxiableAllowed +m-may: ads-krbRenewableAllowed +m-may: ads-krbKdcPrincipal +m-may: ads-krbMaximumRenewableLifetime +m-may: ads-krbMaximumTicketLifetime +m-may: ads-krbPrimaryRealm +m-may: ads-krbBodyChecksumVerified + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.500, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.500 +m-name: ads-dnsServer +m-description: The DnsServer ObjectClass +m-supObjectClass: ads-catalogBasedServer + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.600, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.600 +m-name: ads-dhcpServer +m-description: The DhcpServer ObjectClass +m-supObjectClass: ads-catalogBasedServer + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.700, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.700 +m-name: ads-ntpServer +m-description: The NtpServer ObjectClass +m-supObjectClass: ads-server + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.800, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.800 +m-name: ads-changePasswordServer +m-description: The ChangePassword ObjectClass +m-supObjectClass: ads-catalogBasedServer +m-may: ads-krbAllowableClockSkew +m-may: ads-krbEmptyAddressesAllowed +m-may: ads-krbEncryptionTypes +m-may: ads-krbPrimaryRealm +m-may: ads-chgPwdPolicyCategoryCount +m-may: ads-chgPwdPolicyPasswordLength +m-may: ads-chgPwdPolicyTokenSize +m-may: ads-chgPwdServicePrincipal + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.18, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.18 +m-name: ads-transport +m-description: A transport (TCP or UDP) +m-typeObjectClass: ABSTRACT +m-must: ads-transportId +m-must: ipServicePort +m-may: ads-transportAddress +m-may: ads-transportBacklog +m-may: ads-transportEnableSSL +m-may: ads-transportNbThreads + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.19, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.19 +m-name: ads-tcpTransport +m-description: A TCP transport +m-supObjectClass: ads-transport + +dn: m-oid=1.3.6.1.4.1.18060.0.4.1.3.20, ou=objectClasses, cn=ads-2, ou=schema +objectclass: metaObjectClass +objectclass: metaTop +objectclass: top +m-oid: 1.3.6.1.4.1.18060.0.4.1.3.20 +m-name: ads-udpTransport +m-description: an UDP transport +m-supObjectClass: ads-transport + +dn: ou=syntaxCheckers, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: syntaxcheckers + +dn: ou=syntaxes, cn=ads-2, ou=schema +objectclass: organizationalUnit +objectclass: top +ou: syntaxes + Added: directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/sample-config.ldif URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/sample-config.ldif?rev=811342&view=auto ============================================================================== --- directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/sample-config.ldif (added) +++ directory/apacheds/branches/apacheds-schema/ldif-partition/src/main/resources/sample-config.ldif Fri Sep 4 11:16:53 2009 @@ -0,0 +1,42 @@ +dn: ou=config +objectClass: organizationalUnit +objectClass: extensibleObject +objectClass: top +ou: config + +dn: ou=directoryService,ou=config +objectClass: organizationalUnit +objectClass: top +ou: directoryService + +dn: ou=interceptors,ou=directoryService,ou=config +objectClass: organizationalUnit +objectClass: top +ou: interceptors + +dn: ou=partitions,ou=directoryService,ou=config +objectClass: organizationalUnit +objectClass: top +ou: partitions + +dn: ads-partitionId=system,ou=partitions,ou=directoryService,ou=config +objectClass: ads-partition +objectClass: ads-jdbmPartition +objectClass: top +ads-partitionId: system +ads-partitionIndexedAttributes: ou=system +ads-partitionSuffix: ou=system + +dn: ou=indexes,ads-partitionId=system,ou=partitions,ou=directoryService,ou=c + onfig +objectClass: organizationalUnit +objectClass: top +ou: indexes + +dn: ads-indexAttributeId=ou,ou=indexes,ads-partitionId=system,ou=partitions, + ou=directoryService,ou=config +objectClass: ads-jdbmIndex +objectClass: ads-index +objectClass: top +ads-indexAttributeId: ou +