You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by fe...@apache.org on 2010/08/14 16:56:27 UTC
svn commit: r985503 - in
/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide: ./ data/
images/
Author: felixk
Date: Sat Aug 14 14:56:26 2010
New Revision: 985503
URL: http://svn.apache.org/viewvc?rev=985503&view=rev
Log:
Start with advanced-user-guide
Added:
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/chapter-attributes-entries-schemas.xml (with props)
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateAttributeType.java (with props)
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateObjectClass.java (with props)
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/sevenSeas.ldif
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/sevenSeas.schema
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/SubEntry.png (with props)
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/eclipse_showview_schemas.png (with props)
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/entry_editor_with_ship.png (with props)
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_person.png (with props)
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_ship.png (with props)
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_tree.png (with props)
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schemas_view_with_loaded.png (with props)
Modified:
directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/book.xml
Modified: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/book.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/book.xml?rev=985503&r1=985502&r2=985503&view=diff
==============================================================================
--- directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/book.xml (original)
+++ directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/book.xml Sat Aug 14 14:56:26 2010
@@ -68,6 +68,8 @@ under the License.</literallayout>
href="chapter-architecture.xml" />
<xi:include
href="chapter-authentication-and-authorization.xml" />
+ <xi:include
+ href="chapter-attributes-entries-schemas.xml"/>
<index> ... </index>
</book>
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/chapter-attributes-entries-schemas.xml
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/chapter-attributes-entries-schemas.xml?rev=985503&view=auto
==============================================================================
--- directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/chapter-attributes-entries-schemas.xml (added)
+++ directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/chapter-attributes-entries-schemas.xml Sat Aug 14 14:56:26 2010
@@ -0,0 +1,874 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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. -->
+<chapter
+ version="5.0"
+ xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xmlns:ns5="http://www.w3.org/2000/svg"
+ xmlns:ns4="http://www.w3.org/1998/Math/MathML"
+ xmlns:ns3="http://www.w3.org/1999/xhtml"
+ xml:lang="en">
+ <title>Attributes, Entries & Schemas</title>
+ <section
+ id="Add your first elements to the schema">
+ <title>Add your first elements to the schema</title>
+ <para>This section shows how to define custom schema elements, and how to add them to an ApacheDS 1.5 instance.
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <xref
+ linkend="Motivation" />
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <xref
+ linkend="Browsing the schema of ApacheDS" />
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <xref
+ linkend="Which OIDs should you use?" />
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <xref
+ linkend="A simple example" />
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <xref
+ linkend="Using Apache Directory Studio Schema Editor to load the new schema elements" />
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <xref
+ linkend="Using LDIF to load schema elements in RFC 4512 format" />
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <xref
+ linkend="Using JNDI to add the schema elements programmatically" />
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <xref
+ linkend="Using JNDI to add schema elements in RFC 4512 format programmatically" />
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <xref
+ linkend="Resources schema element" />
+ </para>
+ </listitem>
+ </itemizedlist>
+ <section
+ id="Motivation">
+ <title>Motivation</title>
+ <para>The schema of an LDAP server is comprised of object classes, attributes, syntaxes and matching rules.
+ Basically it defines which entries are allowed within the server and how the server should handle them. In
+ contrast to the 1.0 release, ApacheDS 1.5.0 comes with a completely redesigned schema subsystem. It enables
+ dynamic schema updates, like the creation of new attribute types or object classes at runtime (i.e. without
+ restarting the server).</para>
+ <warning>
+ <title>Is it always necessary to define my own schema elements?</title>
+ <para>
+ No. ApacheDS comes with a comprehensive set of predefined, standardized schema elements (like
+ <emphasis>inetOrgPerson</emphasis>
+ ). It is quite common to solely use the predefined schema. The same holds true for other directory servers, by
+ the way.
+ </para>
+ </warning>
+ <para>In the following text the addition of user defined schema elements to the schema is described in tutorial
+ style.</para>
+ </section>
+ <section
+ id="Browsing the schema of ApacheDS">
+ <title>Browsing the schema of ApacheDS</title>
+ <para>LDAPv3 servers publish their schema via LDAP. Thus it is possible to list the schema elements with standard
+ LDAP tools. For instance it is possible to use the ldapsearch command line tool to list all object classes
+ </para>
+ <screen><![CDATA[
+$ ldapsearch -h zanzibar -p 10389 -D "uid=admin,ou=system" -w ****** \
+ -b "cn=schema" -s base "(objectclass=subschema)" objectclasses
+...
+objectClasses: ( 2.5.6.6 NAME 'person' DESC 'RFC2256: a person' SUP top
+ STRUCTURAL MUST ( sn $ cn ) MAY ( userPassword $ telephoneNumber $
+ seeAlso $ description ) X-SCHEMA 'core' )
+...
+ ]]></screen>
+ <para>
+ The output (formatted as defines in
+ <link
+ xlink:href="http://www.ietf.org/rfc/rfc4512.txt">RFC 4512</link>
+ ) contains all things which are interesting to know about an
+ object class (required attributes, optional
+ attributes etc.), but is not easy to read by a human user. It is
+ therefore often appropriate to use a GUI tool to
+ browse the schema (which basically performs the same search
+ operations but presents the output prettily). One
+ option is
+ <link
+ xlink:href="http://directory.apache.org/studio/">Apache Directory Studio</link>
+ , an Eclipse based LDAP tool
+ set which contains a powerful graphical Schema
+ browser:
+ </para>
+ <figure
+ id="Schema Browser Person figure">
+ <title>Schema Browser Person</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata
+ fileref="images/schema_browser_person.png" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ <para>The techniques described above work for all LDAP v3 compliant servers. The ability to browse the schema
+ gives us a chance to check whether our future changes to the schema really took place.</para>
+ <para>
+ The schema subsystem of ApacheDS 1.5 stores the schema elements as entries in the DIT. You can find them within
+ a special partition with suffix
+ <emphasis>ou=schema</emphasis>
+ ; simply browse the content with your favorite LDAP Browser. With Apache Directory Studio, it looks like this:
+ </para>
+ <figure
+ id="Schema Browser Tree figure">
+ <title>Schema Browser Tree</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata
+ fileref="images/schema_browser_tree.png" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ <para>Browsing the schema like this gives a good impression of the ApacheDS implementation of the schema subsystem
+ and an even better way to analyze effects during schema updates. But keep in mind that the storage scheme is
+ server dependent; not all LDAP server implementations store the schema elements in the DIT.</para>
+ </section>
+ <section
+ id="Which OIDs should you use?">
+ <title>Which OIDs should you use?</title>
+ <para>
+ If you plan to add custom schema elements, you need numerical OIDs (object identifiers) for them. If you
+ implement schema elements defined somewhere else (like
+ <link
+ xlink:href="http://www.educause.edu/eduperson/">eduPerson</link>
+ ), you can use the OIDs which are are part of their descriptions. But what if you plan to design your own?
+ </para>
+ <section
+ id="Some OID background information">
+ <title>Some OID background information</title>
+ <para>An OID is a string formed by a series of numbers which are seperated by a dot (like "12.4.1971.0.1"). Many
+ elements in directory world use OIDs: Controls, extended operations and schema elements (like "2.5.6.6" for
+ object class person). They identify these objects in a unique fashion and therefore avoid name clashes.</para>
+ <para>How is this accomplished? OIDs are assigned hierarchically: The owner of an OID is allowed to create new
+ IDs by simply appending numbers. S/he is also allowed to delegate ownership of newly created OIDs to someone
+ else. This way every person or organization is able to allocate an arbitrary number of new OIDs after
+ obtaining one from "higher command", and they are still unique world-wide.</para>
+ </section>
+ <section
+ id="OIDs in the example">
+ <title>OIDs in the example</title>
+ <para>OIDs starting with 1.3.6.1.4.1 represent IANA-registered private enterprises, Apache Software Foundation
+ for instance owns the OID 1.3.6.1.4.1.18060. The 1.3.6.1.4.1.18060.0 has been assigned to the Apache Directory
+ project by the ASF, and we have decided to use the branch "1.3.6.1.4.1.18060.0.4.3" for schema elements used
+ as examples in the documentation.</para>
+ </section>
+ <section
+ id="OIDs for your own custom schema elements">
+ <title>OIDs for your own custom schema elements</title>
+ <para>If you just want to play around with the schema subsystem, want to explore the capabilities, or learn
+ about LDAP in general, you will probably not mind about unique OIDs. This is comparable to using self-signed
+ certificates for SSL experiments. But it is nevertheless necessary that you use OIDs which are not used in the
+ schema yet (otherwise addition will fail).</para>
+ <para>But if you plan to use your schema elements in a production environment (an object class for instance
+ which describes employees with company specific attributes), or to ship your schema elements with a product
+ (e.g. a CRM or portal solution), you should definitely use unique OIDs. In order to do this you have to obtain
+ OIDs from a branch assigned to your company or organization (your network administrators will be helpful here,
+ do not invent OIDs without asking or obtaining a branch from someone who owns the prefix OID). If your company
+ or organization does not own on OID, there are several option to obtain one, one is the IANA (Internet
+ Assigned Numbers Authority). It is also possible to get an OID branch as an individual.</para>
+ <tip>
+ <title>Obtaining a PEN</title>
+ <para>
+ You can ask for your own PEN (Private Enterprise Number) here :
+ <link
+ xlink:href="http://pen.iana.org/pen/PenApplication.page">http://pen.iana.org/pen/PenApplication.page</link>
+ It takes a few weeks to have a private OID assigned to you, so be patient, or do it early !
+ </para>
+ </tip>
+ </section>
+ </section>
+ <section
+ id="A simple example">
+ <title>A simple example</title>
+ <para>The goal is to store ship entries in our directory, backing the "Seven Seas" example used throughout the
+ Basic User's Guide. There are no schema elements shipped with ApacheDS covering our naval requirements. So we
+ add some.</para>
+ <para>
+ Here is a sample entry for a ship in LDIF:
+ <programlisting><![CDATA[
+dn: cn=HMS Victory,ou=ships,o=sevenSeas
+objectClass: top
+objectClass: ship
+cn: HMS Victory
+numberOfGuns: 104
+description: a ship of the line of the Royal Navy
+description: built between 1759 and 1765
+ ]]></programlisting>
+ </para>
+ <para>
+ A ship entry is comprised of a mandatory value for common name (
+ <emphasis>cn</emphasis>
+ ) of the ship, description values and the
+ number of guns (
+ <emphasis>numberOfGuns</emphasis>
+ ). Thus a new object class ship and a new attribute type
+ <emphasis>numberOfGuns</emphasis>
+ have to be
+ added to the schema. There are different ways to accomplish the task. In any case, we have to add the
+ attribute
+ type first, because the object class refers to it.
+ </para>
+ <section
+ id="attribute type numberOfGuns">
+ <title>attribute type numberOfGuns</title>
+ <para>
+ Here is the definition of our custom attribute type numberOfGuns formatted according to RFC 4512.
+ <programlisting><![CDATA[
+( 1.3.6.1.4.1.18060.0.4.3.2.1
+ NAME 'numberOfGuns' DESC 'Number of guns of a ship'
+ EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ SINGLE-VALUE
+)
+ ]]></programlisting>
+ </para>
+ </section>
+ <section
+ id="object class ship">
+ <title>object class ship</title>
+ <para>
+ Custom object class
+ <emphasis>ship</emphasis>
+ is defined as follows
+ <programlisting><![CDATA[
+( 1.3.6.1.4.1.18060.0.4.3.3.1
+ NAME 'ship' DESC 'An entry which represents a ship'
+ SUP top STRUCTURAL
+ MUST cn MAY ( numberOfGuns $ description )
+)
+ ]]></programlisting>
+ </para>
+ </section>
+ </section>
+ <section
+ id="Using Apache Directory Studio Schema Editor to load the new schema elements">
+ <title>Using Apache Directory Studio Schema Editor to load the new schema elements</title>
+ <para>A very convenient way to add your own schema elements to Apache Directory Server is to use the Schema Editor
+ of Apache Directory Studio. It is even possible to define/design them within the UI, but we opt here use a
+ prepared file in OpenLDAP format and import it using Studio. This is a good choice if you have the schema to add
+ already described that way.</para>
+ <para>
+ Our file
+ <link
+ xlink:href="data/sevenSeas.schema">sevenSeas.schema</link>
+ looks like this:
+ </para>
+ <programlisting><![CDATA[
+attributetype ( 1.3.6.1.4.1.18060.0.4.3.2.1
+ NAME 'numberOfGuns'
+ DESC 'Number of guns of a ship'
+ EQUALITY integerMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ SINGLE-VALUE
+ )
+objectclass ( 1.3.6.1.4.1.18060.0.4.3.3.1
+ NAME 'ship'
+ DESC 'An entry which represents a ship'
+ SUP top
+ STRUCTURAL
+ MUST cn
+ MAY ( numberOfGuns $ description )
+ )
+ ]]></programlisting>
+ <para>
+ In Eclipse with the Apache Directory Studio plugins installed (or alternatively the standalone RCP application
+ of Apache Directory Studio, if you prefer this), open the
+ <emphasis>Schemas</emphasis>
+ view.
+ </para>
+ <figure
+ id="Schemas view figure">
+ <title>Schemas view</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata
+ fileref="images/eclipse_showview_schemas.png" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ <para>
+ When it is shown, press the
+ <emphasis>Open a schema file</emphasis>
+ button in the toolbar of it. In the file dialog, open the
+ <emphasis>sevenSeas.schema</emphasis>
+ . It is loaded and added to the
+ <emphasis>schemas</emphasis>
+ within the view.
+ </para>
+ <figure
+ id="Schemas view with loaded schemas figure">
+ <title>Schemas view with loaded schemas</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata
+ fileref="images/schemas_view_with_loaded.png" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ <para>
+ Select
+ <emphasis>Export For ApacheDS ...</emphasis>
+ in the context menu of the
+ <emphasis>sevenSeas</emphasis>
+ elements. The schema will be stored in
+ an LDIF file which can directly be imported into ApacheDS (we choose the
+ file name
+ <link
+ xlink:href="data/sevenSeas.ldif">sevenSeas.ldif</link>
+ ).
+ </para>
+ <para>
+ Use Apache Directory Studio to open a connection to your ApacheDS server, bind as administrator, and select
+ <emphasis>Import | LDIF Import ...</emphasis>
+ in the context menu of the DIT. Choose the LDIF file previously stored, and import the
+ file. Alternatively, you
+ can use command line tools like
+ <emphasis>ldapmodify</emphasis>
+ to load the file. If no errors are
+ displayed, you are done.
+ </para>
+ <para>There are several options to check whether the additions has be successful. One is to use the browse
+ techniques described above. You can also use specific search commands like this one:</para>
+ <screen><![CDATA[
+$ ldapsearch -h zanzibar -p 10389 -D "uid=admin,ou=system" -w ****** \\
+ -b "ou=schema" -s sub "(m-name=numberOfGuns)"
+version: 1
+dn: m-oid=1.3.6.1.4.1.18060.0.4.3.2.1,ou=attributeTypes,cn=other,ou=schema
+m-usage: USER_APPLICATIONS
+m-equality: integerOrderingMatch
+objectClass: metaAttributeType
+objectClass: metaTop
+objectClass: top
+m-name: numberOfGuns
+m-oid: 1.3.6.1.4.1.18060.0.4.3.2.1
+m-singleValue: TRUE
+m-description: Number of guns of a ship
+m-collective: FALSE
+m-obsolete: FALSE
+m-noUserModification: FALSE
+m-syntax: 1.3.6.1.4.1.1466.115.121.1.27
+ ]]></screen>
+ <para>Of course it visible possible within the Apache Directory Studio UI as well. You will likely have to refresh
+ the schema to see the new elements in the schema browser</para>
+ <figure
+ id="Schema browser ship figure">
+ <title>Schema browser ship</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata
+ fileref="images/schema_browser_ship.png" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ <para>Now you are done: The schema elements are ready to use. Feel free to add your fleet!</para>
+ <figure
+ id="Entry editor with ship figure">
+ <title>Entry editor with ship</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata
+ fileref="images/entry_editor_with_ship.png" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ </section>
+ <section
+ id="Using LDIF to load schema elements in RFC 4512 format">
+ <title>Using LDIF to load schema elements in RFC 4512 format</title>
+ <para>You could write an LDIF with your schema elements in RFC 4512 format and import the LDIF using command line
+ or Apache Directory Studio. The LDIF for our example looks like this:</para>
+ <programlisting><![CDATA[
+dn: cn=schema
+changetype: modify
+add: attributeTypes
+attributeTypes: ( 1.3.6.1.4.1.18060.0.4.3.2.1
+ NAME 'numberOfGuns'
+ DESC 'Number of guns of a ship'
+ EQUALITY integerMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ SINGLE-VALUE
+ )
+-
+add: objectClasses
+objectClasses: ( 1.3.6.1.4.1.18060.0.4.3.3.1
+ NAME 'ship'
+ DESC 'An entry which represents a ship'
+ SUP top
+ STRUCTURAL
+ MUST cn
+ MAY ( numberOfGuns $ description )
+ )
+-
+ ]]></programlisting>
+ </section>
+ <section
+ id="Using JNDI to add the schema elements programmatically">
+ <title>Using JNDI to add the schema elements programmatically</title>
+ <para>You may want to add schema elements programmatically (for instance in a unit test) via a Java program acting
+ as a client. One option here is to use JNDI and its LDAP provider. The advantage of this approach is that it is
+ server independent; it works on LDAP servers other than ApacheDS as well as long as the server supports dynamic
+ updates and the bind user is allowed to perform these operations (normally only admistrators are allowed to do
+ this). </para>
+ <section
+ id="Some simple Java programs">
+ <title>Some simple Java programs</title>
+ <para>
+ In the following you find source code examples on how to add the two elements. The proceeding is described
+ in
+ more detail in the
+ <link
+ xlink:href="http://java.sun.com/products/jndi/tutorial/">JNDI Tutorial</link>
+ (Chapter "Tips for LDAP Users // Schema "). Both use connection data
+ provided by
+ <emphasis>jndi.properties</emphasis>
+ of the following form
+ </para>
+ <programlisting><![CDATA[
+java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
+java.naming.provider.url=ldap://zanzibar:10389/
+java.naming.security.principal=uid=admin,ou=system
+java.naming.security.credentials=******
+java.naming.security.authentication=simple
+ ]]></programlisting>
+ <para>
+ This simple program (file
+ <link
+ xlink:href="data/CreateAttributeType.java">CreateAttributeType.java</link>
+ ) creates the attribute type
+ <emphasis>numberOfGuns</emphasis>
+ </para>
+ <programlisting><![CDATA[
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
+public class CreateAttributeType {
+
+ public static void main(String[] args) throws NamingException {
+
+ DirContext ctx = new InitialDirContext();
+ DirContext schema = ctx.getSchema("");
+
+ Attributes attrs = new BasicAttributes(true);
+ attrs.put("NUMERICOID", "1.3.6.1.4.1.18060.0.4.3.2.1");
+ attrs.put("NAME", "numberOfGuns");
+ attrs.put("DESC", "Number of guns of a ship");
+ attrs.put("EQUALITY", "integerOrderingMatch");
+ attrs.put("SYNTAX", "1.3.6.1.4.1.1466.115.121.1.27");
+ attrs.put("SINGLE-VALUE", "true");
+
+ schema.createSubcontext("AttributeDefinition/numberOfGuns", attrs);
+ }
+}
+ ]]></programlisting>
+ <para>
+ and this one (file
+ <link
+ xlink:href="data/CreateObjectClass.java">CreateObjectClass.java</link>
+ ) the object class
+ <emphasis>ship</emphasis>
+ </para>
+ <programlisting><![CDATA[
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
+public class CreateObjectClass {
+
+ public static void main(String[] args) throws NamingException {
+
+ DirContext ctx = new InitialDirContext();
+ DirContext schema = ctx.getSchema("");
+
+ Attributes attrs = new BasicAttributes(true);
+ attrs.put("NUMERICOID", "1.3.6.1.4.1.18060.0.4.3.3.1");
+ attrs.put("NAME", "ship");
+ attrs.put("DESC", "An entry which represents a ship");
+ attrs.put("SUP", "top");
+ attrs.put("STRUCTURAL", "true");
+
+ Attribute must = new BasicAttribute("MUST");
+ must.add("cn");
+ attrs.put(must);
+
+ Attribute may = new BasicAttribute("MAY");
+ may.add("numberOfGuns");
+ may.add("description");
+ attrs.put(may);
+
+ schema.createSubcontext("ClassDefinition/ship", attrs);
+ }
+}
+ ]]></programlisting>
+ <para>After successfully running the programs against the LDAP server defined in the connection data. The schema
+ elements can also be found within a schema browser, but you may have to refresh the schema here as well. They
+ are also ready to use</para>
+ <para>
+ A final note for the JNDI approach: With the code shown above, the elements will be created by the
+ ApacheDS
+ schema subsystem within the
+ <emphasis>other</emphasis>
+ schema (in contrast to the
+ <emphasis>sevenSeas</emphasis>
+ schema ). You can also create
+ them programmatically in a specific schema with the help of the
+ <emphasis>X-SCHEMA</emphasis>
+ attribute:
+ </para>
+ <programlisting><![CDATA[
+...
+attrs.put("X-SCHEMA", "sevenSeas");
+...
+ ]]></programlisting>
+ <para>but in this case you have to create the skeleton entries for the sevenSeas schema before (loading an LDIF
+ file like the one generated by Apache Directory Studio as depicted above). Otherwise you will get an
+ NamingException ("LDAP: error code 54 - failed to modify entry cn=schema ...").</para>
+ </section>
+ </section>
+ <section
+ id="Using JNDI to add schema elements in RFC 4512 format programmatically">
+ <title>Using JNDI to add schema elements in RFC 4512 format programmatically</title>
+ <para>It is also possible to add schema elements in RFC 4512 format using JNDI:</para>
+ <programlisting><![CDATA[
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
+public class CreateSevenSeasSchema
+{
+
+ public static void main(String[] args) throws NamingException
+ {
+ DirContext ctx = new InitialDirContext();
+
+ Attributes atAttrs = new BasicAttributes(true);
+ atAttrs.put("attributeTypes",
+ "( 1.3.6.1.4.1.18060.0.4.3.2.1 NAME 'numberOfGuns' DESC 'Number of guns of a ship' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )");
+ ctx.modifyAttributes("cn=schema", DirContext.ADD_ATTRIBUTE, atAttrs);
+
+ Attributes ocAttrs = new BasicAttributes(true);
+ ocAttrs.put("objectClasses",
+ "( 1.3.6.1.4.1.18060.0.4.3.3.1 NAME 'ship' DESC 'An entry which represents a ship' SUP top STRUCTURAL MUST cn MAY ( numberOfGuns $ description ) )");
+ ctx.modifyAttributes("cn=schema", DirContext.ADD_ATTRIBUTE, ocAttrs);
+ }
+
+} ]]></programlisting>
+ </section>
+ <section
+ id="Resources schema element">
+ <title>Resources</title>
+ <itemizedlist>
+ <listitem>
+ <para>
+ Internet Assigned Numbers Authority (IANA)<?linebreak?>
+ <link
+ xlink:href="http://www.iana.org">http://www.iana.org</link>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <link
+ xlink:href="http://directory.apache.org/ldapstudio/">Apache Directory Studio</link>
+ , a complete LDAP tooling platform
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <link
+ xlink:href="http://www.ietf.org/rfc/rfc4512.txt">RFC 4512</link>
+ Lightweight Directory Access Protocol (LDAP): Directory Information Models, Section 4: Directory Schema
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ The
+ <link
+ xlink:href="http://java.sun.com/products/jndi/tutorial/">JNDI Tutorial</link>
+ at Sun Microsystems
+ </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ </section>
+ <section
+ id="Collective Attributes">
+ <title>Collective Attributes</title>
+ <caution>
+ <para>This page needs to be overworked</para>
+ </caution>
+ <section
+ id="Introduction Collective Attributes">
+ <title>Introduction</title>
+ <para>
+ Collective attributes are attributes whose values are shared across a collection of entries. It's very common to
+ encounter situations where a bunch of entries have the same value for an attribute. Collective attributes for
+ LDAP are defined in
+ <link
+ xlink:href="http://www.faqs.org/rfcs/rfc3671.html">RFC 3671</link>
+ . ApacheDS implements this RFC.
+ </para>
+ <section
+ id="Use Case">
+ <title>Use Case</title>
+ <para>For example one might organize everyone in an engineering department under an ou, 'ou=engineering'. If the
+ engineering team is located in the same area and building then several attributes in each user entry within
+ engineering will have the same value. An example of such an attribute would be the locale. If engineering is
+ located in Sunnyvale CA then all locale attributes of entries under 'ou=engineering' would be set to
+ Sunnyvale.</para>
+ <para>
+ Rather than manage the value for this attribute in each entry a single collective attribute can be used in a
+ subentry. Changes to the value of this attribute would immediately be reflected to those entries selected by
+ the subtreeSpecification of subentry. For more information on specifying subtrees take at
+ <xref
+ linkend="Subentries" />
+ .
+ </para>
+ </section>
+ </section>
+ <section
+ id="Setting up a Collective Attribute Administration Area (AA)">
+ <title>Setting up a Collective Attribute Administration Area (AA)</title>
+ <para>
+ To manage collective attributes for a collection of entries you must add collective subentries to the
+ Administrative Point (AP) of the collective AA. For more information on AAs see
+ <xref
+ linkend="Subentries" />
+ . These collective
+ subentries must have the objectClass subentry as well as collectiveAttributeSubentry. Also the
+ AP, of the AA,
+ must have an administrativeRole value of collectiveAttributeSpecificArea (2.5.23.5) or
+ collectiveAttributeInnerArea (2.5.23.6).
+ </para>
+ <section
+ id="Example AA">
+ <title>Example</title>
+ <para>For the use case above we can presume a partition at the namingContext 'dc=example,dc=com' with an
+ 'ou=engineering' entry below containing users from the engineering team in Sunnyvale. Let's presume no AA has
+ yet been defined so we have to create one. We'll set the partition root 'dc=example,dc=com' as the AP of an AA
+ that spans the entire subtree. For this simple example the AA will be autonomous for the collective aspect.
+ Setting this up is just a matter of modifying the 'dc=example,dc=com' entry so it contains the operational
+ attribute administrativeRole with the value collectiveAttributeSpecificArea. The code below sets up this AAA
+ for collective attribute administration.</para>
+ <programlisting><![CDATA[
+// Get a DirContext on the dc=example,dc=com entry
+ Hashtable env = new Hashtable();
+ env.put( "java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory" );
+ env.put( "java.naming.provider.url", "ldap://localhost:" + port + "/dc=example,dc=com" );
+ env.put( "java.naming.security.principal", "uid=admin,ou=system" );
+ env.put( "java.naming.security.credentials", "secret" );
+ env.put( "java.naming.security.authentication", "simple" );
+ ctx = new InitialDirContext( env );
+
+ // Modify the entry to make it an AAA for collective attribute administration
+ Attributes mods = new BasicAttributes( "administrativeRole", "collectiveAttributeSpecificArea", true );
+ ctx.modifyAttributes( "", DirContext.ADD_ATTRIBUTE, mods );
+ ]]></programlisting>
+ <para>Now 'dc=example,dc=com' is the AP for a collective attribute AAA that spans the entire subtree under and
+ including it down to every leaf entry. All that remains is the addition of the subentry with the collective
+ attributes we want included in the entries of all engineering users. Here's what the LDIF would look like for
+ this subentry given that its commonName is 'engineeringLocale'.</para>
+ <programlisting><![CDATA[
+dn: cn=engineeringLocale,dc=example,dc=com
+objectClass: top
+objectClass: subentry
+objectClass: collectiveAttributeSubentry
+cn: engineeringLocale
+c-l: Sunnyvale
+subtreeSpecification: {base "ou=engineering", minimum 4}
+ ]]></programlisting>
+ <para>The following picture present the structure of our tree :</para>
+ <figure
+ id="SubEntry figure">
+ <title>SubEntry</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata
+ fileref="images/SubEntry.png" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ <para>
+ A couple points regarding this subentry's LDIF:
+ <orderedlist>
+ <listitem>
+ <para>It subordinates to the AP ('dc=example,dc=com')</para>
+ </listitem>
+ <listitem>
+ <para>It contains the objectClasses: subentry and collectiveAttributeSubentry</para>
+ </listitem>
+ <listitem>
+ <para>It contains the collective version of locale (l): c-l</para>
+ </listitem>
+ <listitem>
+ <para>Its subtreeSpecification excludes entries whose number of DN name components is less than 4</para>
+ </listitem>
+ </orderedlist>
+ </para>
+ <para>Note that the minimum value of 4 is used in the subtreeSpecification to make sure that the entry
+ 'ou=engineering,dc=example,dc=com' does not have c-l: Sunnyvale added to it. It's got 3 components to the DN
+ so minimum 4 chops it out of the collection.</para>
+ </section>
+ </section>
+ <section
+ id="Collective Attribute Types">
+ <title>Collective Attribute Types</title>
+ <para>As one can see from the example above, special collective attributes are used for regular attributes: c-l
+ for l. These attributes are derived from the original attribute and are marked as COLLECTIVE. RFC 3671 defines a
+ bunch of these which are listed below. If you don't find what you're looking for just add it to your own schema
+ using this pattern.</para>
+ <para>We have included this list from RFC 3671 into the collective.schema which comes standard with ApacheDS.
+ </para>
+ <literallayout><![CDATA[
+3.1. Collective Locality Name
+
+ The c-l attribute type specifies a locality name for a collection of
+ entries.
+
+ ( 2.5.4.7.1 NAME 'c-l'
+ SUP l COLLECTIVE )
+
+3.2. Collective State or Province Name
+
+ The c-st attribute type specifies a state or province name for a
+ collection of entries.
+
+ ( 2.5.4.8.1 NAME 'c-st'
+ SUP st COLLECTIVE )
+
+3.3. Collective Street Address
+
+ The c-street attribute type specifies a street address for a
+ collection of entries.
+
+ ( 2.5.4.9.1 NAME 'c-street'
+ SUP street COLLECTIVE )
+
+3.4. Collective Organization Name
+
+ The c-o attribute type specifies an organization name for a
+ collection of entries.
+
+ ( 2.5.4.10.1 NAME 'c-o'
+ SUP o COLLECTIVE )
+
+3.5. Collective Organizational Unit Name
+
+ The c-ou attribute type specifies an organizational unit name for a
+ collection of entries.
+
+ ( 2.5.4.11.1 NAME 'c-ou'
+ SUP ou COLLECTIVE )
+
+3.6. Collective Postal Address
+
+ The c-PostalAddress attribute type specifies a postal address for a
+ collection of entries.
+
+ ( 2.5.4.16.1 NAME 'c-PostalAddress'
+ SUP postalAddress COLLECTIVE )
+
+3.7. Collective Postal Code
+
+ The c-PostalCode attribute type specifies a postal code for a
+ collection of entries.
+
+ ( 2.5.4.17.1 NAME 'c-PostalCode'
+ SUP postalCode COLLECTIVE )
+
+3.8. Collective Post Office Box
+
+ The c-PostOfficeBox attribute type specifies a post office box for a
+ collection of entries.
+
+ ( 2.5.4.18.1 NAME 'c-PostOfficeBox'
+ SUP postOfficeBox COLLECTIVE )
+
+3.9. Collective Physical Delivery Office Name
+
+ The c-PhysicalDeliveryOfficeName attribute type specifies a physical
+ delivery office name for a collection of entries.
+
+ ( 2.5.4.19.1 NAME 'c-PhysicalDeliveryOfficeName'
+ SUP physicalDeliveryOfficeName COLLECTIVE )
+
+3.10. Collective Telephone Number
+
+ The c-TelephoneNumber attribute type specifies a telephone number for
+ a collection of entries.
+
+ ( 2.5.4.20.1 NAME 'c-TelephoneNumber'
+ SUP telephoneNumber COLLECTIVE )
+
+3.11. Collective Telex Number
+
+ The c-TelexNumber attribute type specifies a telex number for a
+ collection of entries.
+
+ ( 2.5.4.21.1 NAME 'c-TelexNumber'
+ SUP telexNumber COLLECTIVE )
+
+3.13. Collective Facsimile Telephone Number
+
+ The c-FacsimileTelephoneNumber attribute type specifies a facsimile
+ telephone number for a collection of entries.
+
+ ( 2.5.4.23.1 NAME 'c-FacsimileTelephoneNumber'
+
+ SUP facsimileTelephoneNumber COLLECTIVE )
+
+3.14. Collective International ISDN Number
+
+ The c-InternationalISDNNumber attribute type specifies an
+ international ISDN number for a collection of entries.
+
+ ( 2.5.4.25.1 NAME 'c-InternationalISDNNumber'
+ SUP internationalISDNNumber COLLECTIVE )
+ ]]></literallayout>
+ </section>
+ </section>
+</chapter>
\ No newline at end of file
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/chapter-attributes-entries-schemas.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/chapter-attributes-entries-schemas.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateAttributeType.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateAttributeType.java?rev=985503&view=auto
==============================================================================
--- directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateAttributeType.java (added)
+++ directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateAttributeType.java Sat Aug 14 14:56:26 2010
@@ -0,0 +1,47 @@
+/*
+ * 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 examples.schema;
+
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
+public class CreateAttributeType {
+
+ public static void main(String[] args) throws NamingException {
+
+ DirContext ctx = new InitialDirContext();
+ DirContext schema = ctx.getSchema("");
+
+ Attributes attrs = new BasicAttributes(true);
+ attrs.put("NUMERICOID", "1.3.6.1.4.1.18060.0.4.3.2.1");
+ attrs.put("NAME", "numberOfGuns");
+ attrs.put("DESC", "Number of guns of a ship");
+ attrs.put("EQUALITY", "integerOrderingMatch");
+ attrs.put("SYNTAX", "1.3.6.1.4.1.1466.115.121.1.27");
+ attrs.put("SINGLE-VALUE", "true");
+
+ // attrs.put("X-SCHEMA", "sevenSeas");
+
+ schema.createSubcontext("AttributeDefinition/numberOfGuns", attrs);
+ }
+}
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateAttributeType.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateObjectClass.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateObjectClass.java?rev=985503&view=auto
==============================================================================
--- directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateObjectClass.java (added)
+++ directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateObjectClass.java Sat Aug 14 14:56:26 2010
@@ -0,0 +1,58 @@
+/*
+ * 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 examples.schema;
+
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.BasicAttributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
+public class CreateObjectClass {
+
+ public static void main(String[] args) throws NamingException {
+
+ DirContext ctx = new InitialDirContext();
+ DirContext schema = ctx.getSchema("");
+
+ Attributes attrs = new BasicAttributes(true);
+ attrs.put("NUMERICOID", "1.3.6.1.4.1.18060.0.4.3.3.1");
+ attrs.put("NAME", "ship");
+ attrs.put("DESC", "An entry which represents a ship");
+ attrs.put("SUP", "top");
+ attrs.put("STRUCTURAL", "true");
+
+ Attribute must = new BasicAttribute("MUST");
+ must.add("cn");
+ attrs.put(must);
+
+ Attribute may = new BasicAttribute("MAY");
+ may.add("numberOfGuns");
+ may.add("description");
+ attrs.put(may);
+
+ // attrs.put("X-SCHEMA", "sevenSeas");
+
+ schema.createSubcontext("ClassDefinition/ship", attrs);
+ }
+
+}
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/CreateObjectClass.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/sevenSeas.ldif
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/sevenSeas.ldif?rev=985503&view=auto
==============================================================================
--- directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/sevenSeas.ldif (added)
+++ directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/sevenSeas.ldif Sat Aug 14 14:56:26 2010
@@ -0,0 +1,88 @@
+# sevenSeas
+# Generated by LDAP Studio on 27. April 2007 14:59:52
+
+dn: cn=sevenSeas, ou=schema
+objectclass: metaSchema
+objectclass: top
+cn: sevenSeas
+
+dn: ou=attributeTypes, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: attributetypes
+
+dn: m-oid=1.3.6.1.4.1.18060.0.4.3.2.1, ou=attributeTypes, cn=sevenSeas, ou=schem
+ a
+objectclass: metaAttributeType
+objectclass: metaTop
+objectclass: top
+m-oid: 1.3.6.1.4.1.18060.0.4.3.2.1
+m-name: numberOfGuns
+m-description: Number of guns of a ship
+m-equality: integerMatch
+m-syntax: 1.3.6.1.4.1.1466.115.121.1.27
+m-singleValue: TRUE
+
+dn: ou=comparators, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: comparators
+
+dn: ou=ditContentRules, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: ditcontentrules
+
+dn: ou=ditStructureRules, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: ditstructurerules
+
+dn: ou=matchingRules, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: matchingrules
+
+dn: ou=matchingRuleUse, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: matchingruleuse
+
+dn: ou=nameForms, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: nameforms
+
+dn: ou=normalizers, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: normalizers
+
+dn: ou=objectClasses, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: objectClasses
+
+dn: m-oid=1.3.6.1.4.1.18060.0.4.3.3.1, ou=objectClasses, cn=sevenSeas, ou=schema
+
+objectclass: metaObjectclass
+objectclass: metaTop
+objectclass: top
+m-oid: 1.3.6.1.4.1.18060.0.4.3.3.1
+m-name: ship
+m-description: An entry which represents a ship
+m-supObjectClass: top
+m-must: cn
+m-may: numberOfGuns
+m-may: description
+
+dn: ou=syntaxCheckers, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: syntaxcheckers
+
+dn: ou=syntaxes, cn=sevenSeas, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: syntaxes
+
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/sevenSeas.schema
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/sevenSeas.schema?rev=985503&view=auto
==============================================================================
--- directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/sevenSeas.schema (added)
+++ directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/data/sevenSeas.schema Sat Aug 14 14:56:26 2010
@@ -0,0 +1,16 @@
+attributetype ( 1.3.6.1.4.1.18060.0.4.3.2.1
+ NAME 'numberOfGuns'
+ DESC 'Number of guns of a ship'
+ EQUALITY integerMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+ SINGLE-VALUE
+ )
+
+objectclass ( 1.3.6.1.4.1.18060.0.4.3.3.1
+ NAME 'ship'
+ DESC 'An entry which represents a ship'
+ SUP top
+ STRUCTURAL
+ MUST cn
+ MAY ( numberOfGuns $ description )
+ )
\ No newline at end of file
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/SubEntry.png
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/SubEntry.png?rev=985503&view=auto
==============================================================================
Binary file - no diff available.
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/SubEntry.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/eclipse_showview_schemas.png
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/eclipse_showview_schemas.png?rev=985503&view=auto
==============================================================================
Binary file - no diff available.
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/eclipse_showview_schemas.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/entry_editor_with_ship.png
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/entry_editor_with_ship.png?rev=985503&view=auto
==============================================================================
Binary file - no diff available.
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/entry_editor_with_ship.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_person.png
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_person.png?rev=985503&view=auto
==============================================================================
Binary file - no diff available.
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_person.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_ship.png
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_ship.png?rev=985503&view=auto
==============================================================================
Binary file - no diff available.
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_ship.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_tree.png
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_tree.png?rev=985503&view=auto
==============================================================================
Binary file - no diff available.
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schema_browser_tree.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schemas_view_with_loaded.png
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schemas_view_with_loaded.png?rev=985503&view=auto
==============================================================================
Binary file - no diff available.
Propchange: directory/sandbox/felixk/apacheds-docs/src/advanced-user-guide/images/schemas_view_with_loaded.png
------------------------------------------------------------------------------
svn:mime-type = image/png