directory-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Directory Server v1.5 > Apache DS Registries
Date Mon, 23 Nov 2009 13:38:00 GMT
<html>
<head>
    <base href="http://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/1519/1/1/_/styles/combined.css?spaceKey=DIRxSRVx11&amp;forWysiwyg=true"
type="text/css">
    </head>
<body style="background-color: white" bgcolor="white">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
     <h2><a href="http://cwiki.apache.org/confluence/display/DIRxSRVx11/Apache+DS+Registries">Apache
DS Registries</a></h2>
     <h4>Page <b>edited</b> by             <a href="http://cwiki.apache.org/confluence/display/~elecharny">Emmanuel
Lécharny</a>
    </h4>
     
          <br/>
     <div class="notificationGreySide">
         <div class='panelMacro'><table class='noteMacro'><colgroup><col
width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif"
width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Work
in progress</b><br /><p>This site is in the process of being reviewed and
updated.</p></td></tr></table></div>

<h1><a name="ApacheDSRegistries-Introduction"></a>Introduction</h1>

<p>Apache DS has to keep a lot of internal structures available from all the parts of
the server. This is done through what we call the <b>SchemaManager</b>. It hide
all the internal structure from the users.</p>

<h2><a name="ApacheDSRegistries-SchemaManager"></a>SchemaManager</h2>

<p>The <b>SchemaManager</b> stores <b>Registries</b>, which
are hives where each <b>SchemaObjects</b> are stored. We also store some dedicated
data structures :</p>
<ul>
	<li>factory : The object responsible for the <b>SchemaObject</b> instance
creation, given an Entry containing a <b>SchemaObject</b> description</li>
	<li>namingContext : The partition this&#42; SchemaManager&#42; is associated
with. In the future, we want to associate a <b>SchemaManager</b> to a Partition,
allowing the server to have more than one <b>SchemaManager</b></li>
	<li>registries : The container for all the <b>SchemaObject</b> Registries</li>
	<li>schemaLoader : The loader for this instance. <b>SchemaObjects</b> may
be stored on disk, in a database... The loader is responsible for their retrieval</li>
	<li>errors : The list of errors we got when we have updated the schema. It should be
empty before we can use this SchemaManager in the server</li>
</ul>


<p>h2 Registries<br/>
This is the internal container for all the <b>SchemaObject</b> registries. When
modifying the schema, this object will be cloned, modified, chekced, and if thee is no error,
we will apply those modifications to the real registries.</p>

<p>It contains a set of fields used to manage the schema :</p>
<ul>
	<li>globalOidRegistry : It stores the list of all the <b>SchemaObject*s' OIDs.
A &#42;SchemaObject</b> has a unique OID in a <b>SchemaManager</b></li>
	<li>&lt;SchemaObject&gt;Registry : A registry per <b>SchemaObject</b>
type.</li>
	<li>loadedSchemas : The list of all the loaded schemas</li>
	<li>schemaObjectsBySchemaName : A list of all <b>SchemaObjects</b> per
schema</li>
	<li>usedBy : a map containing the list of <b>SchemaObject</b> referencing
a given <b>SchemaObject</b></li>
	<li>using : a map containing the list of <b>SchemaObject</b> used by a
given <b>SchemaObject</b></li>
</ul>


<h2><a name="ApacheDSRegistries-SchemaObjectRegistries"></a>SchemaObject
Registries</h2>

<p>For each different type of <b>SchemaObject</b>, we have a dedicated Registry.</p>

<p>The following diagram shows the class diagram for those registries : <div align="center"><a
class="confluence-thumbnail-link 1159x828" href='http://cwiki.apache.org/confluence/download/attachments/29461/SchemaObjectRegistryclassdiagram.png'><img
src="/confluence/download/thumbnails/29461/SchemaObjectRegistryclassdiagram.png" border="0"
/></a></div></p>



<h2><a name="ApacheDSRegistries-SchemaObjects"></a>SchemaObjects</h2>

<p>We have 11 different <b>SchemaObjects</b>, 3 of them are Apache DS specific
:</p>
<ul>
	<li>AttributeType</li>
	<li>Comparator (specific)</li>
	<li>DITContentRule</li>
	<li>DITStructureRule</li>
	<li>MatchingRule</li>
	<li>MatchingRuleUse</li>
	<li>NameForm</li>
	<li>Normalizer (specific)</li>
	<li>ObjectClass</li>
	<li>Syntax</li>
	<li>SyntaxChecker (specific)</li>
</ul>


<p>The specific SchemaObjects are those we can load into the server dynamically : they
are compiled Java classes.</p>

<p>All the <b>SchemaObjects</b> are related with each other. The following
schema shows all the existing relations  : <div align="center"><a class="confluence-thumbnail-link
516x494" href='http://cwiki.apache.org/confluence/download/attachments/29461/SchemaObjects.png'><img
src="/confluence/download/thumbnails/29461/SchemaObjects.png" border="0" /></a></div></p>

<p>This class diagram exposes the relations between all those classes : <div align="center"><a
class="confluence-thumbnail-link 2155x1076" href='http://cwiki.apache.org/confluence/download/attachments/29461/SchemaObjectclassdiagram.png'><img
src="/confluence/download/thumbnails/29461/SchemaObjectclassdiagram.png" border="0" /></a></div></p>

<h2><a name="ApacheDSRegistries-AttributeType"></a>AttributeType</h2>

<h2><a name="ApacheDSRegistries-Comparator"></a>Comparator</h2>

<p>Here are the fields stored in a Comparator instance :</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Name </th>
<th class='confluenceTh'> default </th>
</tr>
<tr>
<td class='confluenceTd'> description </td>
<td class='confluenceTd'> N/A </td>
</tr>
<tr>
<td class='confluenceTd'> extensions </td>
<td class='confluenceTd'> N/A </td>
</tr>
<tr>
<td class='confluenceTd'> isEnabled </td>
<td class='confluenceTd'> TRUE </td>
</tr>
<tr>
<td class='confluenceTd'> isObsolete </td>
<td class='confluenceTd'> FALSE </td>
</tr>
<tr>
<td class='confluenceTd'> isReadOnly </td>
<td class='confluenceTd'> FALSE </td>
</tr>
<tr>
<td class='confluenceTd'> names </td>
<td class='confluenceTd'> No names </td>
</tr>
<tr>
<td class='confluenceTd'> objectType </td>
<td class='confluenceTd'> COMPARATOR </td>
</tr>
<tr>
<td class='confluenceTd'> oid </td>
<td class='confluenceTd'> MR OID </td>
</tr>
<tr>
<td class='confluenceTd'> schemaName </td>
<td class='confluenceTd'> N/A </td>
</tr>
<tr>
<td class='confluenceTd'> specification </td>
<td class='confluenceTd'> not modifiable </td>
</tr>
<tr>
<td class='confluenceTd'> bytecode </td>
<td class='confluenceTd'> not modifiable </td>
</tr>
<tr>
<td class='confluenceTd'> fqcn </td>
<td class='confluenceTd'> not modifiable </td>
</tr>
</tbody></table>

<h3><a name="ApacheDSRegistries-Addingacomparator"></a>Adding a comparator</h3>

<p>Register the comparator into the ComparatorRegistry :<br/>
update the ComparatorRegistry.byOid : add &lt;oid, comparator&gt;<br/>
update the ComparatorRegistry.byName : add &lt;oid, comparator&gt;<br/>
associate the Comparator with the schema : &lt;schema, set&lt;SchemaObject&gt;&gt;
&#43;= comparator</p>

<h3><a name="ApacheDSRegistries-Modifyingacomparator"></a>Modifying a comparator</h3>

<p>Nothing to do but update the comparator in place (replacing all the fields of the
original comparator).</p>

<p>Note that all the fields are not modifiables.</p>

<h3><a name="ApacheDSRegistries-Deletingacomparator"></a>Deleting a comparator</h3>

<p>We can't delete a comparator if it is used by a MatchingRule. This is check by verifying
in<br/>
the usedBy table :</p>

<p>if usedBy.get( comparator.oid ) is not empty, generate an error.</p>

<p>This is a more complex operation, as we may have some MatchingRules pointing on this
object.<br/>
We have to :<br/>
remove the oid from the ComparatorRegistry.byOid<br/>
remove the oid from the ComparatorRegistry.byName<br/>
remove the Comparator from the registries bySchemaNameSchemaObject map : &lt;schema, set&lt;SchemaObject&gt;&gt;
&#45;= comparator</p>

<p>.h3 DITContentRule<br/>
Not Yet Implemented</p>

<p>.h3 DITStructureRule<br/>
Not Yet Implemented</p>

<p>.h3 MatchingRule<br/>
TODO</p>

<p>.h3 MatchingRuleUse<br/>
Not Yet Implemented</p>

<p>.h3 NameForm<br/>
Not Yet Implemented</p>

<p>.h3 Normalizer (specific)<br/>
Here are the fields stored in a Normalizer instance :</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Name </th>
<th class='confluenceTh'> default </th>
</tr>
<tr>
<td class='confluenceTd'> description </td>
<td class='confluenceTd'> N/A </td>
</tr>
<tr>
<td class='confluenceTd'> extensions </td>
<td class='confluenceTd'> N/A </td>
</tr>
<tr>
<td class='confluenceTd'> isEnabled </td>
<td class='confluenceTd'> TRUE </td>
</tr>
<tr>
<td class='confluenceTd'> isObsolete </td>
<td class='confluenceTd'> FALSE </td>
</tr>
<tr>
<td class='confluenceTd'> isReadOnly </td>
<td class='confluenceTd'> FALSE </td>
</tr>
<tr>
<td class='confluenceTd'> names </td>
<td class='confluenceTd'> No names </td>
</tr>
<tr>
<td class='confluenceTd'> objectType </td>
<td class='confluenceTd'> NORMALIZER </td>
</tr>
<tr>
<td class='confluenceTd'> oid </td>
<td class='confluenceTd'> MR OID </td>
</tr>
<tr>
<td class='confluenceTd'> schemaName </td>
<td class='confluenceTd'> N/A </td>
</tr>
<tr>
<td class='confluenceTd'> specification </td>
<td class='confluenceTd'> not modifiable </td>
</tr>
<tr>
<td class='confluenceTd'> bytecode </td>
<td class='confluenceTd'> not modifiable </td>
</tr>
<tr>
<td class='confluenceTd'> fqcn </td>
<td class='confluenceTd'> not modifiable </td>
<td class='confluenceTd'> &#42; </td>
</tr>
</tbody></table>

<h3><a name="ApacheDSRegistries-AddingaNormalizer"></a>Adding a Normalizer</h3>

<p>Register the Normalizer into the NormalizerRegistry :<br/>
update the NormalizerRegistry.byOid : add &lt;oid, Normalizer&gt;<br/>
update the NormalizerRegistry.byName : add &lt;oid, Normalizer&gt;<br/>
associate the Normalizer with the schema : &lt;schema, set&lt;SchemaObject&gt;&gt;
&#43;= Normalizer</p>

<h3><a name="ApacheDSRegistries-ModifyingaNormalizer"></a>Modifying a Normalizer</h3>

<p>Nothing to do but update the Normalizer in place (replacing all the fields of the
original Normalizer).</p>

<p>Note that all the fields are not modifiables.</p>

<h3><a name="ApacheDSRegistries-DeletingaNormalizer"></a>Deleting a Normalizer</h3>

<p>We can't delete a Normalizer if it is used by a MatchingRule. This is check by verifying
in<br/>
the usedBy table :</p>

<p>if usedBy.get( Normalizer.oid ) is not empty, generate an error.</p>

<p>This is a more complex operation, as we may have some MatchingRules pointing on this
object.<br/>
We have to :<br/>
remove the oid from the NormalizerRegistry.byOid<br/>
remove the oid from the NormalizerRegistry.byName<br/>
remove the Normalizer from the registries bySchemaNameSchemaObject map : &lt;schema, set&lt;SchemaObject&gt;&gt;
&#45;= Normalizer</p>


<p>.h3 ObjectClass<br/>
.h3 Syntax<br/>
.h3 SyntaxChecker (specific)<br/>
Here are the fields stored in a SyntaxChecker instance :</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Name </th>
<th class='confluenceTh'> default </th>
</tr>
<tr>
<td class='confluenceTd'> description </td>
<td class='confluenceTd'> N/A </td>
</tr>
<tr>
<td class='confluenceTd'> extensions </td>
<td class='confluenceTd'> N/A </td>
</tr>
<tr>
<td class='confluenceTd'> isEnabled </td>
<td class='confluenceTd'> TRUE </td>
</tr>
<tr>
<td class='confluenceTd'> isObsolete </td>
<td class='confluenceTd'> FALSE </td>
</tr>
<tr>
<td class='confluenceTd'> isReadOnly </td>
<td class='confluenceTd'> FALSE </td>
</tr>
<tr>
<td class='confluenceTd'> names </td>
<td class='confluenceTd'> No names </td>
</tr>
<tr>
<td class='confluenceTd'> objectType </td>
<td class='confluenceTd'> SYNTAX_CHECKER </td>
</tr>
<tr>
<td class='confluenceTd'> oid </td>
<td class='confluenceTd'> MR OID </td>
</tr>
<tr>
<td class='confluenceTd'> schemaName </td>
<td class='confluenceTd'> N/A </td>
</tr>
<tr>
<td class='confluenceTd'> specification </td>
<td class='confluenceTd'> not modifiable </td>
</tr>
<tr>
<td class='confluenceTd'> bytecode </td>
<td class='confluenceTd'> not modifiable </td>
</tr>
<tr>
<td class='confluenceTd'> fqcn </td>
<td class='confluenceTd'> not modifiable </td>
<td class='confluenceTd'> &#42; </td>
</tr>
</tbody></table>

<h3><a name="ApacheDSRegistries-AddingaSyntaxChecker"></a>Adding a SyntaxChecker</h3>

<p>Register the SyntaxChecker into the SyntaxCheckerRegistry :<br/>
update the SyntaxCheckerRegistry.byOid : add &lt;oid, SyntaxChecker&gt;<br/>
update the SyntaxCheckerRegistry.byName : add &lt;oid, SyntaxChecker&gt;<br/>
associate the SyntaxChecker with the schema : &lt;schema, set&lt;SchemaObject&gt;&gt;
&#43;= SyntaxChecker</p>

<h3><a name="ApacheDSRegistries-ModifyingaSyntaxChecker"></a>Modifying a
SyntaxChecker</h3>

<p>Nothing to do but update the SyntaxChecker in place (replacing all the fields of
the original SyntaxChecker).</p>

<p>Note that all the fields are not modifiables.</p>

<h3><a name="ApacheDSRegistries-DeletingaSyntaxChecker"></a>Deleting a SyntaxChecker</h3>

<p>We can't delete a SyntaxChecker if it is used by a Syntax. This is check by verifying
in<br/>
the usedBy table :</p>

<p>if usedBy.get( SyntaxChecker.oid ) is not empty, generate an error.</p>

<p>This is a more complex operation, as we may have some Syntax pointing on this object.<br/>
We have to :<br/>
remove the oid from the SyntaxCheckerRegistry.byOid<br/>
remove the oid from the SyntaxCheckerRegistry.byName<br/>
remove the SyntaxChecker from the registries bySchemaNameSchemaObject map : &lt;schema,
set&lt;SchemaObject&gt;&gt; &#45;= SyntaxChecker</p>


<h2><a name="ApacheDSRegistries-SyntaxCheckerslist"></a>SyntaxCheckers list</h2>

<p>&nbsp; We can see that we may have many syntax checkers. The list are given in
<a href="http://www.rfc-archive.org/getrfc.php?rfc=2252" rel="nofollow">RFC 2252</a>,
<a href="http://www.rfc-archive.org/getrfc.php?rfc=4517" rel="nofollow">RFC 4517</a>
and <a href="http://www.rfc-archive.org/getrfc.php?rfc=4523" rel="nofollow">RFC 4523</a>:</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> RFC 2252/22566 </th>
<th class='confluenceTh'> RFC 4517/4523 </th>
<th class='confluenceTh'> Syntax Checker </th>
<th class='confluenceTh'> OID </th>
<th class='confluenceTh'> H/R </th>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Attribute Type Description </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.3 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> (removed) </td>
<td class='confluenceTd'> Binary </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.5 </td>
<td class='confluenceTd'> N </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Bit String </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.6 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Boolean </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.7 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> (RFC 4523) </td>
<td class='confluenceTd'> Certificate </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.8 </td>
<td class='confluenceTd'> N </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> (RFC 4523) </td>
<td class='confluenceTd'> Certificate List </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.9 </td>
<td class='confluenceTd'> N </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> (RFC 4523) </td>
<td class='confluenceTd'> Certificate Pair </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.10 </td>
<td class='confluenceTd'> N </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Country String </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.11 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Delivery Method </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.14 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Directory String </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.15 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> DIT Content Rule Description </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.16 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> DIT Structure Rule Description </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.17 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> DN </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.12 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Enhanced Guide </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.21 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Facsimile Telephone Number </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.22 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Fax </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.23 </td>
<td class='confluenceTd'> N </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Generalized Time </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.24 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Guide </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.25 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> IA5 String </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.26 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Integer </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.27 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> JPEG </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.28 </td>
<td class='confluenceTd'> N </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> LDAP Syntax Description </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.54 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Matching Rule Description </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.30 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Matching Rule Use Description </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.31 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> (removed) </td>
<td class='confluenceTd'> MHS OR Address </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.33 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Name and Optional UID </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.34 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Name Form Description </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.35 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Numeric String </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.36 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Object Class Description </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.37 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Octet String </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.40 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> OID </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.38 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Other Mailbox </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.39 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Postal Address </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.41 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> (removed) </td>
<td class='confluenceTd'> Presentation Address </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.43 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Printable String </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.44 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> &#45; </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Substring Assertion </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.58 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> (RFC 4523) </td>
<td class='confluenceTd'> Supported Algorithm </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.49 </td>
<td class='confluenceTd'> N </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Telephone Number </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.50 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Teletex Terminal Identifier </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.51 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> Telex Number </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.52 </td>
<td class='confluenceTd'> Y </td>
</tr>
<tr>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> X </td>
<td class='confluenceTd'> UTC Time </td>
<td class='confluenceTd'> 1.3.6.1.4.1.1466.115.121.1.53 </td>
<td class='confluenceTd'> Y </td>
</tr>
</tbody></table>

<p>As we can see, each syntax should have a specific class associated with a specific
<b>check</b> method used to control that the attribute value is correct. This
value will be checked for every entry adsded or modified by a user. Each <b>DN</b>
submitted will also be checked against those classes.</p>

<p>To be able to extend the server with new syntaxes, thoses checker classes will be
dynamically loaded at startup. We can do that in different ways :</p>
<ul>
	<li>defining those classes into ADS code, and load them statically during the compilation
of the server : this will not be dynamic, but anyway, we will follow the specification and
the server will be LDAP V3 compliant</li>
	<li>compiling the syntaxChecker classes and injecting the <b>.class</b>
into the <b>cn=schema,ou=system</b> partition : This is possible by either injecting
a LDIF file where the .class is serialized, or using a description containing the SyntaxChecker</li>
</ul>


<p>TO BE CONTIINUED</p>

<p>.</p>
     </div>
     <div id="commentsSection" class="wiki-content pageSection">
       <div style="float: right;">
            <a href="http://cwiki.apache.org/confluence/users/viewnotifications.action"
class="grey">Change Notification Preferences</a>
       </div>

       <a href="http://cwiki.apache.org/confluence/display/DIRxSRVx11/Apache+DS+Registries">View
Online</a>
       |
       <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=29461&revisedVersion=21&originalVersion=20">View
Change</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>

Mime
View raw message