RFC 1804

Schema Publishing in X.500 Directory

๐Ÿ“… published June 1995, from ietf

RFC 1804: Schema Publishing in X.500 Directory ๐ŸŽ€

okay bestie, so this is RFC 1804 and it's giving Experimental ๐Ÿงช. It came out in June 1995 from the Network Working Group, written by G. Mansfield (AIC Laboratories), P. Rajeev (Hughes Software Systems), S. Raghavan (Indian Institute of Technology, Madras), and T. Howes (University of Michigan) ๐Ÿ’–. The header doesn't list any RFCs it obsoletes or updates โœจ.


Status of this Memo ๐Ÿ“

this memo defines an Experimental Protocol for the Internet community ๐Ÿงช. it does NOT specify an Internet standard of any kind ๐Ÿ™…. discussion and suggestions for improvement are requested ๐Ÿ’ฌ. distribution of this memo is unlimited ๐ŸŒˆ.

Abstract ๐Ÿ”ฎ

the X.500 directory is a super powerful way to store and fetch info about objects ๐Ÿ—‚๏ธ. but to read that info, everything in the directory has to know the schema, and right now the only way to pass schemas around the Internet is ftp ๐Ÿ˜ฉ. that's a major problem because the Directory keeps growing ๐Ÿ“ˆ. this doc solves schema distribution using the directory's own existing mechanisms ๐Ÿง . it gives a naming scheme for schema objects and a meta-schema for storing them, and it explains how to fetch unknown schemas from the directory at runtime ๐Ÿฆ‹.

Table of Contents ๐Ÿ“–

1. Introduction                                         2
2. Schema Management                                    2
3. Storage of Schema Information in the Directory       3
4. Retrieval of Schema from the Directory               5
5. The Meta-Schema                                      6
6. References                                           9
7. Security Considerations                              9
8. Authors' Addresses                                  10

1. Introduction โœจ

the X.500 Directory [1] is used for a wide range of stuff ๐ŸŒ. we're talking name and address lookup, network management, restaurant info, even bibliographic services ๐Ÿ“š. all of this info is spread out and managed across lots of autonomous sites ๐Ÿ—บ๏ธ. to make sense of it, the components of the directory need to know the structure and representation of the info, which is the schema ๐Ÿงฉ.

the network is distributed and standardization is slow ๐Ÿข, so making the schema rules themselves accessible turned into a real challenge ๐Ÿ˜ค. a way to make the schema reachable by the functional components of the directory is urgently required ๐Ÿšจ.

the 1993 X.500 Directory Standard [2] tried to tackle schema management and distribution ๐Ÿ› ๏ธ. its framework does let you store and retrieve schema info in the directory ๐Ÿ‘. the catch is that resolving unknown OIDs will require both the DUA and the DSA to be compliant with [2] ๐Ÿ˜ฌ.

so in this doc we propose a solution that uses the directory's existing mechanisms [1] themselves ๐Ÿ’…. we name schema objects with a naming scheme and store them with a meta-schema ๐Ÿ—ƒ๏ธ. this lets unknown objects in the directory get resolved algorithmically ๐Ÿค–. and until 1993 X.500 Directory Standard implementations are around, it's an interim solution to the schema publishing problem ๐Ÿซถ.

2. Schema Management ๐Ÿง 

the directory's storage and retrieval mechanism is powerful and flexible ๐Ÿ’ช. but the real key to the directory is knowing the schema rules for the objects it represents ๐Ÿ”‘. to spread that knowledge around, we need good schema management mechanisms ๐ŸŒธ. schema management involves:

  • Storage of schema information in the directory ๐Ÿ“ฆ
  • Algorithmic access to and retrieval of schema information in the directory ๐Ÿ”
  • Definition of rules for schema modification ๐Ÿ“œ
  • Propagation of schema information from one component of the directory to other components of directory ๐Ÿ“ก

in this doc we focus on getting schema out of the directory ๐ŸŽฏ. since schema objects are defined and employed, you can modify, add, and delete them with existing directory mechanisms ๐Ÿ› ๏ธ. but synchronizing the schema with the DIB is an operational issue that needs more attention ๐Ÿ‘€. schema propagation also needs more work and is outside the scope of this document ๐Ÿ™…โ€โ™€๏ธ.

the strategy here is simple and workable ๐Ÿ’–. it doesn't add any DAP/DSP functionality, which is honestly so clean ๐Ÿงผ. the directory's distributed framework helps avoid scalability problems too ๐Ÿ“ˆ. basically it lets schema objects be stored in a distributed way, and the naming scheme lets you retrieve them algorithmically ๐Ÿงš. the downside? more than one directory read operation may be needed to get info about an object and its attributes, because objects and attributes are stored as separate entries ๐Ÿ˜ญ.

all the schema info for objects in a naming context is stored below that context's root entry ๐ŸŒณ. so the same DSA can supply schema info stored in that DSA ๐Ÿ . no need to contact another DSA to resolve the schema of an object that lives in the local DSA ๐Ÿ™Œ.

3. Storage of Schema Information in the Directory ๐Ÿ—„๏ธ

schema info may be stored and distributed using mechanisms external to the X.500 directory standard [5] ๐ŸŒ. but this doc proposes storing schema info in the directory itself โœจ. here's why it's a whole vibe:

  • The components of the directory can access the schema information using the standard directory protocols ๐Ÿ”Œ.
  • The nature of the directory naturally allows the schema to be distributed ๐ŸŒ. schema used locally can be kept in the local DSA itself ๐Ÿก, while schema for general objects like person, organization etc can be made available to all components of the directory by publishing it ๐Ÿ“ข.

in the operational model, schema info in the directory is expected to complement the schema info held in central repositories ๐Ÿค.

3.1. Naming Scheme for the Schema ๐Ÿท๏ธ

schema info is stored in a distributed manner ๐Ÿงฉ. we propose a model where each naming context stores the schema relevant to it ๐Ÿ’….

                                Root
                                    \
                                     \
                        +-------------\----------------------+
                        |            C=IN            DSA-1   |
                        |          /      \                  |
                        |         /        \                 |
                        |        /          \                |
                        |       /            \               |
                        |      /          cn=subschema       |
                        |     /           /  / | \ \ \       |
                        |    /           /  /  |  \ \ \      |
                        |   /          oid= oid=             |
                        +--/---------------------------------+
                          /
  +----------------------/----------------------+
  |                o=IIT, Madras      DSA-2     |
  |                 /           \               |
  |                /             \              |
  |               /               \             |
  |              /                 \            |
  |         ou=CSE             cn=subschema     |
  |         /    \             /   /| \ \ \     |
  |        /      \           /   / |  \ \ \    |
  |ipni=spark  cn=Rajeev oid=ipni  oid=         |
  +---------------------------------------------+

         Figure 1: DIT with schema objects

to store the schema info, we define an object called a subschema object ๐ŸŽ€. this object can live anywhere in the Directory Information Tree (DIT) ๐ŸŒณ. the subschema is defined as a subclass of Top ๐Ÿ’œ. the subschema entry is stored below the root entry of a naming context ๐Ÿชœ. the root entry of a naming context must contain a subschema subentry, named {CN= Subschema} ๐Ÿ“›. this standard naming is necessary so components of the directory can easily and algorithmically find the schema entries ๐Ÿ”Ž. all schema info relevant to that naming context is stored below the subschema entry ๐Ÿ“ฆ. children of the subschema entry store info about objects, attribute types, attribute syntaxes, or matching rules ๐Ÿง. the DIT structure is shown in Figure 1 ๐Ÿ–ผ๏ธ. schema for these objects is given in section 5 ๐Ÿ“œ.

4. Retrieval of Schema from the Directory ๐Ÿ•ต๏ธโ€โ™€๏ธ

when any component of the directory runs into an unknown object during a directory operation, it resolves the schema like this ๐Ÿ”.

the RDN component at the leaf-end of the name of the object whose schema is being resolved gets replaced by the RDNs oid=<object identifier of the new object>, CN=subschema, and a read request goes out for the newly formed name ๐Ÿ“ค. if the entry isn't found, two RDN components from the leaf-end get replaced by oid=<object identifier of the new object>, CN=subschema and another read is attempted ๐Ÿ”. this keeps going until the read succeeds ๐Ÿ.

let's run an example ๐ŸŽฌ. say we're resolving the schema of the object IPNI=spark, OU=Department of Computer Science, O=Indian Institute of Technology, Madras , C=IN, and a component doesn't know the schema for IPNI (IP Node Image) ๐Ÿค”. here's the procedure:

Let the object id for the object IPNI be ipni ๐Ÿ†”. the RDN IPNI=spark is removed from the distinguished name of the entry, and the RDNs oid=ipni, CN= Subschema are appended ๐Ÿงท. the name formed is oid=ipni, CN=subschema, OU=Department of Computer Science, O=Indian Institute of Technology, Madras, C=IN, and a read request is initiated on it ๐Ÿ“จ. if the distinguished name OU= Department of Computer Science, O=Indian Institute of Technology, Madras, C=IN is the context prefix of a naming context, this read will return the schema for the object IPNI ๐ŸŽ‰. if it isn't, the read fails ๐Ÿ˜ฌ. then a read is initiated with the distinguished name oid=ipni, CN= subschema, O=Indian Institute of Technology, Madras, C=IN ๐Ÿ”„. for the DIT structure in Figure-1, this query succeeds and the schema info gets returned โœ…. the schema for the requested object is always located below the starting entry of the naming context where the entry is located ๐Ÿ“.

5. The Meta-Schema ๐Ÿงฌ

the meta-schema is where the schema objects get their OIDs ๐Ÿ†”. here's the definition:

experimental = 1.3.6.1.3

schema OBJECT IDENTIFIER
        ::= {experimental 65}

schemaObjectClass OBJECT IDENTIFIER
        ::= {schema.1}

schemaAttribute OBJECT IDENTIFIER
        ::= {schema.2}

subschema OBJECT CLASS
    Subclass of TOP
        MUST CONTAIN {
            commonName
            - -  For naming
        }
        ::= {schemaObjectClass.1}

okay the meta-schema is about to get SO good ๐Ÿงš here's how the object classes are built ๐Ÿ’–

objectClass OBJECT CLASS
    Subclass of TOP
        MUST CONTAIN {
            objectIdentifier
                - - This field stores the object identifier of object
                - - represented by an object class entry. This attribute
                - - is used for naming an object class entry.
        }
        MAY CONTAIN {
            commonName,
                 - - This field is used to store the name of the object
            mandatoryNamingAttributes,
            mandatoryAttributes,
            optionalNamingAttibutes,
            optionalAttributes,
            obsolete,
            description,
            subClassOf
        }
        ::= {schemaObjectClass.2}

attributeType OBJECT CLASS
    Subclass of Top
        MUST CONTAIN {
            objectIdentifier
        }
        MAY CONTAIN {

             commonName,
                - - used to store the name of the attribute type
             constraint,
             attributeSyntax,
             multivalued,
             obsolete,
             matchRules,
             description
        }
        ::= {schemaObjectClass.3}

matchingRule OBJECT CLASS
     Subclass of Top
        MUST CONTAIN {
             objectIdentifier
        }
         MAY CONTAIN {
             commonName,
             matchtype,
             description,
             obsolete
        }
        ::= {schemaObjectClass.4}

objectIdentifier ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX
            objectIdentifierSyntax
       ::= {schemaAttribute.1}

mandatoryNamingAttributes ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX
            SET OF OBJECT IDENTIFIER
       ::= {schemaAttribute.2}

mandatoryAttributes ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX
            SET OF OBJECT IDENTIFIER
       ::= {schemaAttribute.3}

optionalNamingAttibutes ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX
            SET OF OBJECT IDENTIFIER
       ::= {schemaAttribute.4}

optionalAttibutes ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX
            SET OF OBJECT IDENTIFIER
       ::= {schemaAttribute.5}

obsolete ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX
            BOOLEAN
                           -- DEFAULT FALSE
       ::= {schemaAttribute.6}

subClassOf      ATTRIBUTE
        WITH ATTRIBUTE-SYNTAX
                SET OF OBJECT IDENTIFIER
       ::= {schemaAttribute.7}

constraint ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX
            Constraint
       ::= {schemaAttribute.8}

Constraint ::=Choice {
             StringConstraint,
             IntegerConstraint
        }

StringConstraint ::= SEQUENCE {
             shortest INTEGER,
             longest  INTEGER
        }

IntegerConstraint ::= SEQUENCE {
             lowerbound INTEGER,
             upperbound INTEGER OPTIONAL
        }

attributeSyntax ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX
              ASN1DataType
       ::= {schemaAttribute.9}

multivalued ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX
            BOOLEAN             -- DEFAULT FALSE
       ::= {schemaAttribute.10}

matchRules ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX
            SET OF OBJECT IDENTIFIER
       ::= {schemaAttribute.11}

matchtype ATTRIBUTE
       WITH ATTRIBUTE-SYNTAX

            INTEGER {
             PRESENT                    (0),
             EQUALITY                   (1),
             ORDERING                   (2),
             CASESENSITIVEMATCH         (3),
             CASEINSENSITIVEMATCH       (4)
            }
       ::= {schemaAttribute.12}

6. References โœจ

[1] CCITT. "Data Communication Networks: Directory", Recommendations X.500 - X.521 1988.

[2] CCITT. "Data Communication Networks: Directory", Recommendations X.500 - X.525 1993.

[3] Barker, P., and S. Kille, "The COSINE and Internet X.500 Schema", RFC 1274, University College London, November 1991.

[4] Howes, T., "Schema Information in the X.500 Directory", Work in Progress, University of Michigan, July 1992.

[5] Howes, T., Rossen, K., Sataluri, S., and R. Wright, "Procedures for Formalization, Evolution, and Maintenance of the Internet X.500 Directory Schema", Work in Progress, June 1995.

7. Security Considerations ๐Ÿ”’

Security issues are not discussed in this memo. ๐Ÿ’€ So bestie, this doc has zero security content, no cap ๐Ÿ™ˆ

8. Authors' Addresses ๐ŸŽ€

Glenn Mansfield

AIC Systems Laboratories,
6-6-3, Minami Yoshinari, Aoba-Ku, Sendai,
Japan

Phone: +81 (22) 279-3310
Fax: +81 (22) 279-3640
EMail: glenn@aic.co.jp

P. V. Rajeev

Hughes Software Systems,
2nd Floor, International Trade Tower,
Nehru Place, New Delhi,
India

EMail: rajeev%hss@lando.hns.com

S. V. Raghavan

Department of Computer Science and Engineering,
Indian Institute of Technology, Madras 600 036,
India

EMail: svr@iitm.ernet.in

Tim Howes

University of Michigan
ITD Research Systems
535 W William St.
Ann Arbor, MI 48103-4943, USA

Phone: +1 (313) 747-4454
EMail: tim@umich.edu
๐Ÿ“ฆ where this page comes from