Annotation of 43BSDReno/contrib/isode-beta/doc/whitepages/administrator/introduction.tex, revision 1.1.1.1

1.1       root        1: % run this through LaTeX with the appropriate wrapper
                      2: 
                      3: \chapter      {Introduction}
                      4: This document is {\em The Administrator's Guide\/} for the
                      5: NYSERNet/PSI White Pages Pilot.
                      6: The goal of \theguide/ is to provide a site administrator
                      7: with enough information to be able to participate in the White Pages
                      8: Pilot.
                      9: In practical terms,
                     10: this means that \theguide/ provides information on how
                     11: to install and maintain an OSI Directory at your site.
                     12: 
                     13: The OSI Directory is used to provide the white pages service.
                     14: \theguide/ is not intended as a tutorial nor a detailed description
                     15: of the OSI Directory.
                     16: However, as administrative responsibilities and procedures are
                     17: outlined,
                     18: the appropriate Directory concepts will be introduced.%
                     19: \footnote{Actually this paragraph is a lie:
                     20: you can't administer the white pages without knowing what you're
                     21: doing,
                     22: and you don't know what you're doing unless you understand both
                     23: the basics of the OSI Directory and how the pilot project software
                     24: implements the Directory Service.
                     25: As such,
                     26: this entire chapter is really a thinly-veiled primer on these
                     27: two topics.}
                     28: 
                     29: Your comments are welcome!
                     30: The OSI Directory is a new, complex technology.
                     31: Although \theguide/ attempts to be straight-forward it probably doesn't
                     32: succeed all the time.
                     33: If you have comments on this document, send them to the Internet
                     34: mailbox
                     35: \begin{quote}\begin{verbatim}
                     36: [email protected]
                     37: \end{verbatim}\end{quote}
                     38: so that \theguide/ can be improved.
                     39: 
                     40: \newpage
                     41: 
                     42: \section*     {Related Documentation}
                     43: The white paper
                     44: {\em An Introduction to a NYSERNet White Pages Pilot Project\/}
                     45: introduces the goals and phases of the pilot project.
                     46: Administrators should familiarize themselves with this document
                     47: before proceeding.
                     48: 
                     49: There is also a document which you should provide to the user community at
                     50: your organization.
                     51: It is called
                     52: {\em NYSERNet/PSI White Pages Pilot Project: User's Handbook},
                     53: or simply \thebook/.
                     54: 
                     55: The OSI Directory standard is defined in \cite{ISO.Directory,CCITT.Directory}.
                     56: 
                     57: The research note {\em The Design of QUIPU\/} \cite{QUIPU.Design}
                     58: describes the design of the software used for the pilot project,
                     59: whilst {\em Volume Five\/} of the ISODE User's Manual \cite{QUIPU.Manual},
                     60: henceforth termed \volfive/,
                     61: describes the implementation of the software.
                     62: \theguide/ is intended to replace these later two documents as the
                     63: primary reference for administrators of the pilot project.
                     64: 
                     65: PostScript versions of these documents are available via anonymous FTP
                     66: from host \verb"nisc.nyser.net" (\verb"[192.33.4.10]"):
                     67: \begin{quote}\small\begin{verbatim}
                     68: % cd /usr/src/local/
                     69: % ftp nisc.nyser.net
                     70: Connected to nisc.nyser.net.
                     71: 220 nisc.nyser.net FTP server ready
                     72: Name (nisc.nyser.net:user): anonymous
                     73: Password (nisc.nyser.net:anonymous): guest
                     74: 331 Guest login ok, send ident as password.
                     75: 230 Guest login ok, access restrictions apply.
                     76: ftp> binary
                     77: 200 Type set to I.
                     78: ftp> cd pub/isode
                     79: ftp> get isode-ps.tar.Z
                     80: ftp> get pilot-ps.tar.Z
                     81: ftp> quit
                     82: % uncompress < isode-ps.tar.Z | tar xf -
                     83: % uncompress < pilot-ps.tar.Z | tar xf -
                     84: % rm isode-ps.tar.Z pilot-ps.tar.Z
                     85: \end{verbatim}\end{quote}
                     86: 
                     87: \newpage
                     88: \section      {Informational Model}
                     89: From a theoretical standpoint,
                     90: the internals of the white pages service can be viewed from 
                     91: four different perspectives.
                     92: We begin with the Informational Model which describes the service in terms of
                     93: information objects.
                     94: The Directory's representation of an information object,
                     95: typically called an {\em entry},
                     96: contains information about a person, a place, an organization, etc.
                     97: Each entry consists of one or more attributes.
                     98: 
                     99: Each attribute consists of a type,\index{attribute types}
                    100: indicating what kind of attribute it is,
                    101: and one or more values
                    102: (one of which is termed the {\em distinguished value\/}).
                    103: Attribute values are structured using a data definition language
                    104: called  Abstract Syntax Notation One (ASN.1).
                    105: As such,
                    106: different programs using the Directory will interpret information in the same
                    107: way.
                    108: In addition,
                    109: the Directory will perform type-checking on the values in order
                    110: to keep things consistent.
                    111: 
                    112: \subsection    {Naming}
                    113: One of the attributes of an entry is particularly special:
                    114: it is referred to as the {\em Relative Distinguished Name\/} (RDN) of
                    115: the entry.
                    116: The RDN is formed by taking the name of the attribute and its
                    117: distinguished value.
                    118: For example,
                    119: if the attribute in question was called \verb"countryName" and it had
                    120: a distinguished value of \verb"US", then we might say that the RDN
                    121: for the entry was \verb"countryName=US".
                    122: Of course,
                    123: this is strictly a ``user-friendly'' notation:
                    124: the Directory uses a concise binary format for representing an RDN.
                    125: Fortunately,
                    126: the pilot project software allows simple textual strings to be used in their
                    127: place and converts back and forth accordingly.
                    128: 
                    129: In the OSI Directory,
                    130: information is primarily organized according to a hierarchical tree
                    131: structure.
                    132: The top of the tree is termed the {\em root},
                    133: and has no explicit name.
                    134: To find the  name of an object,
                    135: termed its {\em Distinguished Name\/} (DN),
                    136: one concatenates the RDNs found when traversing the tree by starting
                    137: at the root and proceeding directly to the object's entry.
                    138: 
                    139: For purposes of discussion,
                    140: we write a Distinguished Name as an ordered series of RDNs separated by
                    141: an \verb"`@'"-sign with the most significant RDN appearing at the left;
                    142: e.g.,
                    143: \begin{quote}\small\begin{verbatim}
                    144: countryName=US@organizationName=NYSERNet Inc.
                    145: \end{verbatim}\end{quote}
                    146: refers to an entry with an RDN of \verb"organizationName=NYSERNet Inc."
                    147: whose parent has an RDN of \verb"countryName=US".
                    148: In turn,
                    149: this parent entry is an immediate child of the root.
                    150: 
                    151: To avoid any potential ambiguity when using an interface to the Directory
                    152: such as \man fred(1c) or \man dish(1c),
                    153: one prefixes a \verb"`@'"-sign to a string when referring to a fully
                    154: qualified Distinguished Name;
                    155: e.g.,
                    156: \begin{quote}\small\begin{verbatim}
                    157: @countryName=US@organizationName=NYSERNet Inc.
                    158: \end{verbatim}\end{quote}
                    159: always refers to the same entry regardless of context.
                    160: Note that this is a convention only for interface programs such as these.
                    161: 
                    162: As a rule,
                    163: unless searching,
                    164: text before the \verb"`='"-sign is not case sensitive,
                    165: neither is text after the \verb"`='"-sign.
                    166: 
                    167: Of course, names like \verb"countryName",
                    168: while more friendly than binary strings,
                    169: are still rather long,
                    170: so there are several abbreviations that the pilot project software permits.
                    171: Table~\ref{attribute-types} lists the attribute types supported by
                    172: the pilot project, any abbreviations, and the syntax associated with
                    173: each attribute's value.
                    174: Throughout \theguide/,
                    175: the semantics of these attributes will be introduced.
                    176: When using this document later on,
                    177: refer to the Index to quickly find a particular attribute you are interested
                    178: in.
                    179: \tagtable[tp]{INT-1}{Supported Attribute Types}{attribute-types}
                    180: 
                    181: The entities which access the Directory on behalf of a user
                    182: are termed {\em Directory User Agents\/} (DUAs).
                    183: The entities which provide the Directory service are termed
                    184: {\em Directory System Agents\/} (DSAs).
                    185: Both kinds of entities are identified by their Distinguished Name.
                    186: That is,
                    187: the DSAs and DUAs are not only network processes,
                    188: they are also objects which have entries in the Directory.
                    189: 
                    190: \subsection    {How Entries and Objects are Described}\label{edb:format}
                    191: It is now time to explain the notation used to describe entries.
                    192: This notation is termed the ``EDB format'',
                    193: and is named after the disk-resident data structures used by the
                    194: pilot project software.
                    195: 
                    196: An entry is textually described in an ASCII formatted file.
                    197: The format of the file is simple:
                    198: \begin{itemize}
                    199: \item  Each entry consists of two or more lines followed by a blank line.
                    200: 
                    201: \item  Each line consists of an attribute type/value pair using
                    202:        the familiar
                    203: \begin{quote}\small\begin{verbatim}
                    204: name=value
                    205: \end{verbatim}\end{quote}
                    206: notation,
                    207: such as:
                    208: \begin{quote}\small\begin{verbatim}
                    209: c=US
                    210: \end{verbatim}\end{quote}
                    211: 
                    212: \item  If multiple values are present for an entry,
                    213:        then either multiple lines may be used or the values may
                    214:        be separated by the \verb"`&'"-sign.
                    215:        The first value occurring is the distinguished value.
                    216:        Hence,
                    217: \begin{quote}\small\begin{verbatim}
                    218: co=US
                    219: co=United States of America
                    220: \end{verbatim}\end{quote}
                    221: and
                    222: \begin{quote}\small\begin{verbatim}
                    223: co=US & United States of America
                    224: \end{verbatim}\end{quote}
                    225: are identical:
                    226: both say that the attribute \verb"friendlyCountryName" has two values:
                    227: the distinguished value is \verb"US" and an alternate value is
                    228: \verb"United States of America".
                    229: 
                    230: \item  Most attributes take textual strings for their value.
                    231:        However, for a large number of attributes,
                    232:        the actual characters used are limited to a subset of the
                    233:        ``printable'' characters: 
                    234: \begin{quote}\begin{tabular}{l}
                    235: \verb"A" through \verb"Z"\\
                    236: \verb"a" through \verb"z"\\
                    237: \verb"0" through \verb"9"\\
                    238: \verb"'" (apostrophe)\\
                    239: \verb"(" (left parenthesis)\\
                    240: \verb")" (right parenthesis)\\
                    241: \verb"+" (plus-sign)\\
                    242: \verb"," (comma)\\
                    243: \verb"-" (hyphen)\\
                    244: \verb"." (period)\\
                    245: \verb"/" (solidus)\\
                    246: \verb":" (colon)\\
                    247: \verb"?" (question-mark)\\
                    248: space
                    249: \end{tabular}\end{quote}
                    250:        In particular, note that the characters \verb"`='", \verb"`&'",
                    251:        \verb"`$'" and \verb"`#'" are not allowed.
                    252: 
                    253:        If it makes sense to use a particular character, e.g., \verb"`@'"
                    254:        in a mail address,
                    255:        then this usage is usually permitted.
                    256: 
                    257:        If it is necessary to characters from the restricted set,
                    258:        proceed the value with \verb"{T.61}", e.g.,
                    259: \begin{quote}\small
                    260: \begin{verbatim}
                    261: {T.61}whatever$you$want
                    262: \end{verbatim}\end{quote}
                    263: 
                    264:        Always use the appropriate case (upper or lower) when entering
                    265:        values.
                    266:        Although the Directory supports imprecise matching for searching,
                    267:        direct lookup is made on the basis of an exact match.
                    268: 
                    269:        When strings are read by the pilot project software,
                    270:        it strips leading and trailing blanks and also compresses multiple
                    271:        blanks to a single blank space.
                    272: 
                    273: \item  Another common kind of attribute value is a Distinguished
                    274:        Name, which is specified using the DN notation described earlier.
                    275:        Note that a DN is always interpreted in absolute form when it is
                    276:        written in an EDB file.
                    277:        Hence, the leading \verb"`@'"-sign is never written.
                    278: 
                    279: \item  Of course,
                    280:        there are a few attributes with very special syntaxes,
                    281:        when these attributes are introduced,
                    282:        the associated notation will be discussed.
                    283: \end{itemize}
                    284: Note that the first line for an entry gives the object's RDN.
                    285: This line should be repeated later on in the entry,
                    286: this causes it to be included in the attributes for the object.
                    287: (The pilot software includes this attribute automatically,
                    288: but it is a good practice regardless.)
                    289: 
                    290: An EDB file contains all of the child objects of a node in the tree.
                    291: The first line of the file consists of a single keyword, one of:
                    292: \begin{describe}
                    293: \item[MASTER:] indicating that this EDB file is the original source of the
                    294:                information;
                    295: 
                    296: \item[SLAVE:]  indicating that this EDB file is a copy of the information
                    297:                from an authoritative source;
                    298:                and,
                    299: 
                    300: \item[CACHE:]  indicating that this EDB file is a partial, unauthoriative
                    301:                copy of the information.
                    302: \end{describe}
                    303: The second line of the file contains the creation date of the information
                    304: in the file.
                    305: This is expressed as a \verb"UniversalTime".
                    306: Put simply,
                    307: the format used is:\label{UniversalTime}
                    308: \begin{quote}\small\begin{verbatim}
                    309: yymmddhhmmssZ
                    310: \end{verbatim}\end{quote}
                    311: as in:
                    312: \begin{quote}\small\begin{verbatim}
                    313: 890509213614Z
                    314: \end{verbatim}\end{quote}
                    315: which is May 9$^{\underline{\mbox{\scriptsize th}}}$, {\oldstyle 1989},
                    316: 21:36:14 hours at UT.
                    317: 
                    318: Hence,
                    319: the format of an EDB file is:
                    320: \begin{quote}\small\begin{verbatim}
                    321: <keyword>
                    322: yymmddhhmmssZ
                    323: <entries>
                    324: \end{verbatim}\end{quote}
                    325: (remember that each entry ends with a blank line).
                    326: Figure~\ref{edb-example} shows an example of a simple EDB file
                    327: containing two entries.
                    328: \tagfigure[tp]{INT-1}{An Example of an EDB file}{edb-example}
                    329: 
                    330: \subsection    {Object Classes}\index{object classes}\index{attribute types, objectClass}
                    331: One attribute of an entry,
                    332: its \verb"objectClass",
                    333: determines what kind of object this entry corresponds to (e.g., a person).
                    334: The value of this attribute indicates what types of attributes the
                    335: entry {\em must\/} and {\em may\/} contain.
                    336: For example,
                    337: if the value of \verb"objectClass" indicates that the entry corresponds
                    338: to a person,
                    339: then it would make sense for that entry to have a \verb"surName"
                    340: attribute.
                    341: On the other hand,
                    342: if the value of \verb"objectClass" indicates that the entry corresponds
                    343: to an organization,
                    344: then a \verb"surName" attribute would be inappropriate.
                    345: 
                    346: The OSI Directory is flexible in that it defines several common
                    347: types of objects,
                    348: and then allows users to define their own objects.
                    349: Further,
                    350: object definition is based on the notion of {\em class inheritance}.
                    351: This means that an object class can be defined as a ``subclass'' of
                    352: a previously defined object class with additional refinements.
                    353: As a subclass,
                    354: the newly defined object ``inherits'' all the semantics of its
                    355: superclass,
                    356: in addition to having additional semantics.
                    357: 
                    358: For example,
                    359: the Directory defines an object class called \verb"person".
                    360: This object class defines the attributes which a person in
                    361: the real world might have.
                    362: It may be useful to refine this somewhat to talk about persons
                    363: who have Internet access.
                    364: So, we need a new object class, e.g., \verb"internetPerson".
                    365: This can be defined in a straight-forward fashion:
                    366: \begin{quote}
                    367: The object class \verb"internetPerson" is a subclass of the object class
                    368: \verb"person" which {\em may\/} contain an additional attribute,
                    369: \verb"internetMailbox".
                    370: 
                    371: The syntax of an \verb"internetMailbox" is a simple string of printable
                    372: characters which is not case sensitive when performing comparisons.
                    373: \end{quote}
                    374: Thus,
                    375: when entries are defined with an \verb"objectClass" attribute which contains
                    376: the value \verb"internetPerson":
                    377: \begin{itemize}
                    378: \item  they {\em must\/} contain whatever attributes an entry with
                    379:        \verb"objectClass" \verb"person" {\em must\/} contain;
                    380: 
                    381: \item  they {\em may\/} contain whatever attributes an entry with
                    382:        \verb"objectClass" \verb"person" {\em may\/} contain;
                    383:        and,
                    384: 
                    385: \item  they {\em may\/} contain the \verb"internetMailbox" attribute.
                    386: \end{itemize}
                    387: 
                    388: As was seen in Figure~\ref{edb-example} on page~\pageref{edb-example},
                    389: the \verb"objectClass" attribute is multi-valued.
                    390: For our purposes,
                    391: object class values fall into one of two categories:
                    392: \begin{itemize}
                    393: \item  the primary class,
                    394:        of which each object has one
                    395:        (this is the class that inherited all the properties from the
                    396:        superclasses);
                    397:        and,
                    398: 
                    399: \item  one or more superclasses.
                    400: \end{itemize}
                    401: In order to limit the focus of the pilot project,
                    402: only a few primary classes are supported.
                    403: Further,
                    404: of those classes,
                    405: not all optional attributes are supported.%
                    406: \footnote{This limitation is specific to the pilot project;
                    407: the pilot project software can support the entire range of object classes
                    408: and attribute types.}
                    409: Before discussing the primary classes and their class-specific attributes,
                    410: there are a few attributes which are required for every object.
                    411: These are introduced by looking at a few key superclasses.
                    412: 
                    413: \subsubsection {The top objectClass}\index{object classes, top}
                    414: The Directory requires that every object have \verb"top" as a super
                    415: class.
                    416: Only one attribute is required for members of this class:
                    417: \begin{describe}
                    418: \item[objectClass:]\index{attribute types, objectClass}
                    419:                        which defines all the classes that this object belongs
                    420:                        to.
                    421: \end{describe}
                    422: 
                    423: \subsubsection {The quipuObject objectClass}\index{object classes, quipuObject}
                    424: In addition,
                    425: the pilot project software requires that every object also have the object
                    426: class \verb"quipuObject" as a superclass.
                    427: Only one attribute is required for members of this class:
                    428: \begin{describe}
                    429: \item[accessControlList:]\index{attribute types, accessControlList}\index{attribute types, acl (accessControlList)}
                    430:                        which defines how users of the Directory may
                    431:                        access the entry.
                    432: \end{describe}
                    433: The \verb"accessControlList" attribute uses a special notation to enter
                    434: its value in the EDB file:
                    435: \begin{quote}\small\begin{verbatim}
                    436: <syntax> ::= <who> "#" <action> "#" <what>
                    437: 
                    438: <who> ::=       "group" "#" DN
                    439:             |   "prefix" "#" DN
                    440:             |   "others"
                    441:             |   "self"
                    442: 
                    443: <action> ::=    "none"
                    444:             |   "detect"
                    445:             |   "compare"
                    446:             |   "read"
                    447:             |   "add"
                    448:             |   "write"
                    449: 
                    450: <what> ::=      "child"
                    451:             |   "entry"
                    452:             |   "default"
                    453:             |   "attributes" "#" <attribute-list>
                    454: 
                    455: <attribute-list> ::=
                    456:                 attribute-name
                    457:             |   attribute-name "$" <attribute-list>
                    458: \end{verbatim}\end{quote}
                    459: The \verb"<who>" part indicates who the rule applies to.
                    460: Recall that when a user connects to the Directory,
                    461: the user {\em binds\/} on behalf of a Distinguished Name.
                    462: This DN is used to determine which rules apply to the user:
                    463: \begin{describe}
                    464: \item[group:]  indicates a DN which has an \verb"objectClass" attribute
                    465:                of \verb"groupOfNames" or \verb"organizationalRole",
                    466:                or it indicates a particular DN, which is the most
                    467:                common case.
                    468: 
                    469: \item[prefix:] indicates all DNs which start with the indicated
                    470:                prefix.  Thus, access may be granted to all users
                    471:                at or below a particular part of the tree.
                    472: 
                    473: \item[self:]   indicates the DN which corresponds to this object.
                    474: 
                    475: \item[others:] the default case.
                    476: \end{describe}
                    477: The \verb"<what>" part indicates what part of the entry the rule applies
                    478: to:
                    479: \begin{describe}
                    480: \item[child:]  the access control rule applies to children immediately below
                    481:                the entry.
                    482: 
                    483: \item[entry:]  the access control rule applies to the entry itself.
                    484: 
                    485: \item[attributes:] the access control rule applies to exactly those
                    486:                attributes listed.
                    487:                Multiple attributes pertaining to the same rule are
                    488:                separated by the \verb"`$'"-sign.
                    489: 
                    490: \item[default:]        the default rule for attributes.
                    491: \end{describe}
                    492: The \verb"<action>" part indicates the actions which are permitted.
                    493: The semantics of this part vary, depending on the \verb"<what>" part.
                    494: However,
                    495: the \verb"<action>" values are ordered from least- to most-significant;
                    496: e.g., having ``read'' permission implies both ``compare'' and ``detect''
                    497: permission.
                    498: \begin{describe}
                    499: \item[none:]
                    500: \begin{tabular}[t]{rp{3.35in}}
                    501: for entries:&          any knowledge of the entry is hidden\\
                    502: for attributes:&       any knowledge of the attribute is hidden\\
                    503: for children:&         downwards progress is blocked
                    504: \end{tabular}
                    505: 
                    506: \item[detect:]
                    507: \begin{tabular}[t]{rp{3.35in}}
                    508: for entries:& determination of the entry's existence is permitted\\
                    509: for attributes:& determination of the attribute's existence is permitted\\
                    510: for children:& the existence of children is admitted, but downwards progress is still blocked\\
                    511: \end{tabular}
                    512: 
                    513: \item[compare:]
                    514: \begin{tabular}[t]{rp{3.35in}}
                    515: for entries:& the RDN may be compared\\
                    516: for attributes:& the values of the attribute may be compared\\
                    517: for children:& exactly specified RDNs may be matched\\
                    518: \end{tabular}
                    519: 
                    520: \item[read:]
                    521: \begin{tabular}[t]{rp{3.35in}}
                    522: for entries:& the RDN may be read\\
                    523: for attributes:& the attribute values may be read\\
                    524: for children:& the child information may be listed, and downward searches are permitted\\
                    525: \end{tabular}
                    526: 
                    527: \item[add:]
                    528: \begin{tabular}[t]{rp{3.35in}}
                    529: for entries:& new attributes may be added\\
                    530: for attributes:& new attribute values may be added\\
                    531: for children:& new children may be added\\
                    532: \end{tabular}
                    533: 
                    534: \item[write:]
                    535: \begin{tabular}[t]{rp{3.35in}}
                    536: for entries:& the RDN may be changed and existing attributes may be added\\
                    537: for attributes:& values may be modified or removed\\
                    538: for children:& children may be removed\\
                    539: \end{tabular}
                    540: \end{describe}
                    541: The only exception to these rules is the \verb"accessControlList" attribute
                    542: itself: access control rules may be added only to the extent access is
                    543: allowed by the user.
                    544: 
                    545: The default access control list is
                    546: \begin{quote}\small\begin{verbatim}
                    547: acl=
                    548: \end{verbatim}\end{quote}
                    549: which simply means ``read'' access for everything and also
                    550: \begin{quote}\small\begin{verbatim}
                    551: self # write # entry
                    552: self # write # default
                    553: \end{verbatim}\end{quote}
                    554: 
                    555: There are two optional attributes.
                    556: These are maintained automatically by the Directory:
                    557: \begin{describe}
                    558: \item[lastModifiedBy:]\index{attribute types, lastModifiedBy}
                    559:                        identifies the Directory entity which last modified
                    560:                        this entry.
                    561:                        The value is a Distinguished Name.
                    562: 
                    563: \item[lastModifiedTime:]\index{attribute types, lastModifiedTime}
                    564:                        identifies the time at which this entry was last
                    565:                        modified.
                    566:                        The value is a \verb"UniversalTime",
                    567:                        the syntax of which was described earlier on
                    568:                        page~\pageref{UniversalTime}.
                    569: \end{describe}
                    570: 
                    571: \subsubsection {The quipuNonLeafObject objectClass}\index{object classes, quipuNonLeafObject}
                    572: If an object is permitted children,
                    573: the pilot project software requires that that object also have
                    574: \verb"quipuNonLeafObject" as a superclass.
                    575: 
                    576: This class has one mandatory attribute:
                    577: \begin{describe}
                    578: \item[masterDSA:]\index{attribute types, masterDSA}
                    579:                        identifies the Directory entity which is responsible
                    580:                        for maintaining the MASTER EDB for the children of
                    581:                        this entry.
                    582:                        The value is a Distinguished Name.
                    583: \end{describe}
                    584: There is typically a single MASTER for a particular entry in the tree.
                    585: Hence, this value is usually single-valued.
                    586: When an entry is to be modified,
                    587: the Directory must contact the entity responsible for the MASTER EDB for
                    588: that entry in order to perform the modification.
                    589: 
                    590: This class has two optional attributes:
                    591: \begin{describe}
                    592: \item[slaveDSA:]\index{attribute types, slaveDSA}
                    593:                        identifies any Directory entities which have
                    594:                        authoritative copies of the EDB for the children
                    595:                        of this entry.
                    596:                        The value is one or more Distinguished Names.
                    597: 
                    598: \item[treeStructure:]\index{attribute types, treeStructure}
                    599:                        identifies the object classes which may exist
                    600:                        immediately below this entry.
                    601:                        The value is one or more object classes.
                    602: \end{describe}
                    603: Since a fundamental assumption of the Directory is that reads (queries)
                    604: occur much more frequently than writes (updates),
                    605: it is common to have several entities containing authoritative copies of an
                    606: EDB.
                    607: By keeping copies locally,
                    608: queries can be answered with less latency.
                    609: 
                    610: \subsubsection {The domainRelatedObject objectClass}\index{object classes, domainRelatedObject}
                    611: If an object has some relationship to the Internet Domain Name System (DNS),
                    612: the pilot project software requires that that object also have
                    613: \verb"domainRelatedObject" as a superclass.
                    614: 
                    615: This class has one mandatory attribute:
                    616: \begin{describe}
                    617: \item[associatedDomain:]\index{attribute types, associatedDomain}
                    618:                        identifies the domain which corresponds to this object.
                    619:                        The value is a domain string, e.g.,
                    620: \begin{quote}\small\begin{verbatim}
                    621: nyser.net
                    622: \end{verbatim}\end{quote}
                    623: \end{describe}
                    624: There is typically a single MASTER for a particular entry in the tree.
                    625: Hence, this value is usually single-valued.
                    626: When an entry is to be modified,
                    627: the Directory must contact the entity responsible for the MASTER EDB for
                    628: that entry in order to perform the modification.
                    629: 
                    630: Now we look at the primary object classes.
                    631: Keep in mind that these all have both \verb"top" and \verb"quipuObject" as
                    632: superclasses.
                    633: Further,
                    634: the primary classes which are permitted children all have
                    635: \verb"quipuNonLeafObject" as a superclass.
                    636: 
                    637: \subsubsection {The friendlyCountry objectClass}\index{object classes, friendlyCountry}
                    638: Objects of this class represent a sovereign nation.
                    639: For the purposes of the NYSERNet/PSI White Pages Pilot,
                    640: there is only one of these,
                    641: although the pilot project is attached to a world-wide Directory service.
                    642: 
                    643: Table~\ref{friendlyCountry-attributes} summarizes the attributes types for
                    644: a \verb"friendlyCountry" object.
                    645: There are two mandatory attributes:
                    646: \begin{describe}
                    647: \item[countryName:]\index{attribute types, countryName}\index{attribute types, c (countryName)}
                    648:                        which gives the name of the country.
                    649:                        The value of this attribute is a two-letter ISO~3166
                    650:                        code; e.g.,
                    651: \begin{quote}\small\begin{verbatim}
                    652: US
                    653: \end{verbatim}\end{quote}
                    654: 
                    655: \item[friendlyCountryName:]\index{attribute types, friendlyCountryName}\index{attribute types, co (friendlyCountryName)}
                    656:                        which gives a user-friendly rendition of the
                    657:                        country's name (hence the term \verb"friendlyCountry").
                    658:                        The value of this attribute is a string; e.g.,
                    659: \begin{quote}\small\begin{verbatim}
                    660: United States of America
                    661: \end{verbatim}\end{quote}
                    662: \end{describe}
                    663: \tagtable[tp]{INT-2}{Attribute Types for the friendlyCountry Object Class}%
                    664:        {friendlyCountry-attributes}
                    665: 
                    666: In addition,
                    667: there is one attribute that may be present:
                    668: \begin{describe}
                    669: \item[description:]\index{attribute types, description}
                    670:                        which is a simple textual description;
                    671:                        e.g.,
                    672: \begin{quote}\small\begin{verbatim}
                    673: the land of the free and the home of the brave
                    674: \end{verbatim}\end{quote}
                    675: \end{describe}
                    676: 
                    677: Putting everything together,
                    678: one could describe an entry for an object of class \verb"friendlyCountry"
                    679: thusly:
                    680: \begin{quote}\small\begin{verbatim}
                    681: c=US
                    682: masterDSA= cn=Alpaca#
                    683: slaveDSA= cn=Fruit Bat#
                    684: slaveDSA= cn=Giant Tortoise# 
                    685: acl= others # read # entry
                    686: acl= group # c=US@cn=Manager # write # entry
                    687: acl= others # read # default
                    688: acl= group # c=US@cn=Manager # write # default
                    689: treeStructure= quipuNonLeafObject & organization & locality
                    690: treeStructure= quipuDSA & alias & organizationalRole
                    691: c= US
                    692: co= USA & US & United States of America
                    693: objectClass= top & quipuObject & quipuNonLeafObject
                    694: objectClass= country & friendlyCountry
                    695: \end{verbatim}\end{quote}
                    696: These lines indicate that:
                    697: \begin{itemize}
                    698: \item  The RDN for this object is \verb"c=US"
                    699:        (read ``country name is US'').
                    700: 
                    701: \item  The user-friendly name for this country takes on one of three values
                    702: \begin{quote}\small\begin{verbatim}
                    703: USA
                    704: US
                    705: United States of America
                    706: \end{verbatim}\end{quote}
                    707: 
                    708: \item  There are two DSAs which have SLAVE copies of the EDB for this
                    709:        object, one is called \verb"cn=Giant Tortoise" and the other
                    710:        is called \verb"cn=Fruit Bat".
                    711:        (We'll discuss how these colorful names are chosen later on.)
                    712: 
                    713: \item  The DSA responsible for maintaining the MASTER copy of the EDB
                    714:        is called \verb"cn=Alpaca".
                    715:        Note that all three of these DSAs live directly under the ROOT of
                    716:        the Directory tree.
                    717: 
                    718: \item  Everyone is allowed to read the entry and all of its attributes,
                    719:        and only \verb"c=US@cn=Manager" is allowed to change anything.
                    720: 
                    721: \item  The \verb"treeStructure" attribute says that the children immediately
                    722:        below this object:
                    723:     \begin{itemize}
                    724:      \item     may have children themselves (\verb"quipuNonLeafObject"),
                    725:                in which case, the objects under \verb"c=US" are either
                    726:                \verb"organization" or \verb"locality" objects; or,
                    727: 
                    728:      \item     needn't have children, being a DSA
                    729:                (of object class \verb"quipuDSA")
                    730:                or an \verb"organizationalRole";
                    731:                or,
                    732: 
                    733:     \item      may be an \verb"alias".
                    734:     \end{itemize}
                    735: 
                    736: \item  The official name of this country is \verb"US".
                    737: 
                    738: \item  This object belongs to five object classes:
                    739:     \begin{itemize}
                    740:     \item      \verb"top" and \verb"quipuObject" because membership is
                    741:                mandatory;
                    742: 
                    743:     \item      \verb"quipuNonLeafObject" so that children may reside
                    744:                under the entry;
                    745: 
                    746:     \item      \verb"friendlyCountry" which is the primary object class; and,
                    747: 
                    748:     \item      \verb"country" which is a superclass of \verb"friendlyCountry".
                    749:     \end{itemize}
                    750: \end{itemize}
                    751: 
                    752: \subsubsection {The organization objectClass}\index{object classes, organization}
                    753: Objects of this class represent a top-level organizational entity,
                    754: such as a corporation, university, government entity, and so on.
                    755: There is an \verb"organization" object for each organization participating in
                    756: the NYSERNet/PSI White Pages Pilot.
                    757: 
                    758: Table~\ref{organization-attributes} summarizes the attributes types for
                    759: an \verb"organization" object.
                    760: There is one mandatory attribute:
                    761: \begin{describe}
                    762: \item[organizationName:]\index{attribute types, organizationName}\index{attribute types, o (organizationName)}
                    763:                        which gives the name of the organization.
                    764:                        The value of this attribute is a string; e.g.,
                    765: \begin{quote}\small\begin{verbatim}
                    766: NYSERNet Inc.
                    767: \end{verbatim}\end{quote}
                    768: \end{describe}
                    769: \tagtable[tp]{INT-3}{Attribute Types for the organization Object Class}%
                    770:        {organization-attributes}
                    771: 
                    772: There are several attributes that may be present,
                    773: which are divided into three groups:
                    774: physical address, telecommunications address, and miscellaneous information.
                    775: 
                    776: The first group describes the physical address of the object:
                    777: \begin{describe}
                    778: \item[postalAddress:]\index{attribute types, postalAddress}
                    779:                        which describes how physical mail is addressed to the
                    780:                        object.
                    781:                        The syntax of this attribute's value is special:
                    782:                        it consists of~1 to~6 fields, seperated by the
                    783:                        ``\verb"$"''-sign, each field being from~1 to~30
                    784:                        characters long; e.g.
                    785: \begin{quote}\small\begin{verbatim}
                    786: NYSERNet Inc. $ 165 Jordan Road $ Troy, NY 12180
                    787: \end{verbatim}\end{quote}
                    788: 
                    789: \item[registeredAddress:]\index{attribute types, registeredAddress}
                    790:                        which defines how registered physical mail is
                    791:                        addressed to the object.
                    792:                        The syntax is identical to that of the
                    793:                        \verb"postalAddress" attribute.
                    794: 
                    795: \item[streetAddress:]\index{attribute types, streetAddress}
                    796:                        which is a string describing where the object
                    797:                        physically resides
                    798:                        (i.e., the street name, place, avenue, and building
                    799:                        number); e.g.,
                    800:                        object
                    801: \begin{quote}\small\begin{verbatim}
                    802: 165 Jordan Road
                    803: \end{verbatim}\end{quote}
                    804:                        This need have no relationship to the object's
                    805:                        postal address.
                    806: 
                    807: \item[postOfficeBox:]\index{attribute types, postOfficeBox}
                    808:                        which is a string describing the box at which the
                    809:                        object will receive physical postal delivery; e.g.,
                    810: \begin{quote}\small\begin{verbatim}
                    811: 1010
                    812: \end{verbatim}\end{quote}
                    813: 
                    814: \item[physicalDeliveryOfficeName:]\index{attribute types, physicalDeliveryOfficeName}
                    815:                        which is a string describing the geographical location
                    816:                        of the physical delivery office which services the
                    817:                        postal address of this object; e.g.,
                    818: \begin{quote}\small\begin{verbatim}
                    819: Troy
                    820: \end{verbatim}\end{quote}
                    821: 
                    822: \item[stateOrProvinceName:]\index{attribute types, stateOrProvinceName}
                    823:                        which is a string describing the state in which
                    824:                        the \verb"locality" is found; e.g.,
                    825: \begin{quote}\small\begin{verbatim}
                    826: New York
                    827: \end{verbatim}\end{quote}
                    828: 
                    829: \item[postalCode:]\index{attribute types, postalCode}
                    830:                        which is a string containing the ZIP code; e.g.,
                    831: \begin{quote}\small\begin{verbatim}
                    832: 12180
                    833: \end{verbatim}\end{quote}
                    834: or
                    835: \begin{quote}\small\begin{verbatim}
                    836: 94043-2112
                    837: \end{verbatim}\end{quote}
                    838: 
                    839: \item[localityName:]\index{attribute types, localityName}\index{attribute types, l (localityName)}
                    840:                        which is a string describing the geographical
                    841:                        area containing the \verb"streetAddress"; e.g.,
                    842: \begin{quote}\small\begin{verbatim}
                    843: Troy, New York
                    844: \end{verbatim}\end{quote}
                    845: \end{describe}
                    846: The second optional group describes telecommunications addressing information
                    847: for the object.
                    848: \begin{describe}
                    849: \item[telephoneNumber:]\index{attribute types, telephoneNumber}
                    850:                which is a string describing the phone number of the object
                    851:                using the international notation; e.g.,
                    852: \begin{quote}\small\begin{verbatim}
                    853: +1 518-283-8860
                    854: \end{verbatim}\end{quote}
                    855: or
                    856: \begin{quote}\small\begin{verbatim}
                    857: +1 518-283-8860 x1234
                    858: \end{verbatim}\end{quote}
                    859: In general, the syntax is:
                    860: \begin{quote}\smaller\begin{verbatim}
                    861: +<<country code>> <<national number>> [x<<extension>>]
                    862: \end{verbatim}\end{quote}
                    863: 
                    864: \item[facsimileTelephoneNumber:]\index{attribute types, facsimileTelephoneNumber}
                    865:                which is a string describing the fax number of the object
                    866:                using the international notation; e.g.,
                    867: \begin{quote}\small\begin{verbatim}
                    868: +1 518-283-8904
                    869: \end{verbatim}\end{quote}
                    870: 
                    871: \item[telexNumber:]\index{attribute types, telexNumber}
                    872:                which is defines the TELEX address of the object in a
                    873:                three-field format:
                    874: \begin{quote}\small\begin{verbatim}
                    875: number $ country $ answerback
                    876: \end{verbatim}\end{quote}
                    877:                e.g.,
                    878: \begin{quote}\small\begin{verbatim}
                    879: 650 103 7390 $ US $ MCI UW
                    880: \end{verbatim}\end{quote}
                    881: \end{describe}
                    882: The final optional group contains one miscellaneous attribute:
                    883: \begin{describe}
                    884: \item[description:]\index{attribute types, description}
                    885:                        which is a simple textual description;
                    886:                        e.g.,
                    887: \begin{quote}\small\begin{verbatim}
                    888: Not-for-profit organization providing network services
                    889: \end{verbatim}\end{quote}
                    890: \end{describe}
                    891: Figure~\ref{organization-edb} shows an entry for an \verb"organization" object.
                    892: \tagfigure[tp]{INT-2}{An Example of an Entry for the organization Object Class}%
                    893:        {organization-edb}
                    894: 
                    895: \subsubsection {The organizationalUnit objectClass}\index{object classes, organizationalUnit}
                    896: Objects of this class represent a unit within an organization,
                    897: such as a division or department.
                    898: Each organization participating in the NYSERNet/PSI White Pages Pilot decides
                    899: how many organizational units it wishes to maintain as subordinates to
                    900: its organization entry.
                    901: 
                    902: Table~\ref{organizationalUnit-attributes} summarizes the attributes types for
                    903: an \verb"organizationalUnit" object.
                    904: There is one mandatory attribute:
                    905: \begin{describe}
                    906: \item[organizationalUnitName:]\index{attribute types, organizationUnitName}\index{attribute types, ou (organizationUnitName)}
                    907:                        which gives the name of the organizational unit.
                    908:                        The value of this attribute is a string; e.g.,
                    909: \begin{quote}\small\begin{verbatim}
                    910: Research and Development
                    911: \end{verbatim}\end{quote}
                    912: \end{describe}
                    913: \tagtable[tp]{INT-4}{Attribute Types for the organizationalUnit Object Class}%
                    914:        {organizationalUnit-attributes}
                    915: 
                    916: There are several attributes that may be present.
                    917: They belong to the physical address, telecommunications address,
                    918: and miscellaneous information groups described earlier.
                    919: 
                    920: Figure~\ref{organizationalUnit-edb} shows an entry for an
                    921: \verb"organizationalUnit" object.
                    922: \tagfigure[tp]{INT-3}%
                    923:        {An Example of an Entry for the organizationalUnit Object Class}%
                    924:        {organizationalUnit-edb}
                    925: 
                    926: \subsubsection {The locality objectClass}\index{object classes, locality}
                    927: Objects of this class represent a geographical area,
                    928: such as a state, county, or city.
                    929: The sponsors of the NYSERNet/PSI White Pages Pilot maintain such an entry for
                    930: the State of New York.
                    931: This is used to contain objects corresponding to individuals who are
                    932: associated with organizations that are not participating in the pilot
                    933: project.
                    934: 
                    935: Table~\ref{locality-attributes} summarizes the attributes types for
                    936: a \verb"locality" object.
                    937: There is one mandatory attribute:
                    938: \begin{describe}
                    939: \item[localityName:]\index{attribute types, localityName}\index{attribute types, l (localityName)}
                    940:                        which gives the name of the locality.
                    941:                        The value of this attribute is a string; e.g.,
                    942: \begin{quote}\small\begin{verbatim}
                    943: NY
                    944: \end{verbatim}\end{quote}
                    945: or
                    946: \begin{quote}\small\begin{verbatim}
                    947: Rensselaer County
                    948: \end{verbatim}\end{quote}
                    949: \end{describe}
                    950: \tagtable[tp]{INT-5}{Attribute Types for the locality Object Class}%
                    951:        {locality-attributes}
                    952: 
                    953: There is only one attribute that may be present,
                    954: it  belongs to the miscellaneous information group described earlier.
                    955: 
                    956: Figure~\ref{sony-edb} shows the entry for the State of New York,
                    957: whilst Figure~\ref{locality-edb} shows an entry for a subordinate
                    958: \verb"locality" object.
                    959: \tagfigure[tp]{INT-4}{The Entry for The State of New York}{sony-edb}
                    960: \tagfigure[tp]{INT-5}{An Example of an Entry for the locality Object Class}%
                    961:                {locality-edb}
                    962: 
                    963: \subsubsection {The pilotPerson objectClass}\index{object classes, pilotPerson}
                    964: Objects of this class represent a person participating in the pilot project.
                    965: 
                    966: Table~\ref{pilotPerson-attributes} summarizes the attributes types for
                    967: a \verb"pilotPerson" object.
                    968: There are two mandatory attributes:
                    969: \begin{describe}
                    970: \item[commonName:]\index{attribute types, commonName}\index{attribute types, cn (commonName)}
                    971:                        which gives a (potentially ambiguous) name for
                    972:                        the person.
                    973:                        The value of this attribute is a string usually
                    974:                        containing the person's first and last names; e.g.,
                    975: \begin{quote}\small\begin{verbatim}
                    976: Marshall Rose
                    977: \end{verbatim}\end{quote}
                    978:                        This attribute is usually multi-valued, containing
                    979:                        variations on the first, middle, and last names; e.g.,
                    980: \begin{quote}\small\begin{verbatim}
                    981: Colin Robbins
                    982: Colin John Robbins
                    983: Colin J. Robbins
                    984: \end{verbatim}\end{quote}
                    985:                        For purposes of the pilot project, the distinguished
                    986:                        value of the attribute usually contains only the
                    987:                        person's first and last names.
                    988:                        (See Section~\ref{naming:people} on 
                    989:                        page~\pageref{naming:people} for a discussion of this.)
                    990: 
                    991: \item[surName:]\index{attribute types, surName}
                    992:                        which gives the person's last name.
                    993:                        The value of this attribute is a string; e.g.,
                    994: \begin{quote}\small\begin{verbatim}
                    995: Rose
                    996: \end{verbatim}\end{quote}
                    997: \end{describe}
                    998: \tagtable[tp]{INT-6}{Attribute Types for the pilotPerson Object Class}%
                    999:        {pilotPerson-attributes}
                   1000: 
                   1001: There are several attributes that may be present,
                   1002: which are divided into five groups:
                   1003: physical address, telecommunication information, 
                   1004: computer environment,
                   1005: miscellaneous information,
                   1006: and home information.
                   1007: The first two groups have been previously described.
                   1008: 
                   1009: The third group describes information relating to the person's
                   1010: computer environment:
                   1011: \begin{describe}
                   1012: \item[rfc822Mailbox:]\index{attribute types, rfc822Mailbox}
                   1013:                        which is the user's computer mail address,
                   1014:                        e.g., 
                   1015: \begin{quote}\small\begin{verbatim}
                   1016: [email protected]
                   1017: \end{verbatim}\end{quote}
                   1018: 
                   1019: \item[otherMailbox:]\index{attribute types, otherMailbox}
                   1020:                        which is the user's computer mail address
                   1021:                        in various domains.
                   1022:                        The syntax of this attribute's value is special:
                   1023: \begin{quote}\small\begin{verbatim}
                   1024: <domain> $ <mailbox>
                   1025: \end{verbatim}\end{quote}
                   1026:                        e.g., 
                   1027: \begin{quote}\small\begin{verbatim}
                   1028: internet $ [email protected]
                   1029: \end{verbatim}\end{quote}
                   1030: The current list of mail domains are:
                   1031: \[\begin{tabular}{l}
                   1032: applelink\\
                   1033: bitnet\\
                   1034: compuserve\\
                   1035: genie\\
                   1036: internet\\
                   1037: mcimail\\
                   1038: nasamail\\
                   1039: preferred\\
                   1040: uucp
                   1041: \end{tabular}\]
                   1042: 
                   1043: \item[userid:]\index{attribute types, userid}
                   1044:                        which is the user's login name; e.g.,
                   1045: \begin{quote}\small\begin{verbatim}
                   1046: mrose
                   1047: \end{verbatim}\end{quote}
                   1048: 
                   1049: \item[userClass:]\index{attribute types, userClass}
                   1050:                        which describe's the user's classification; e.g.,
                   1051: \begin{quote}\small\begin{verbatim}
                   1052: staff
                   1053: \end{verbatim}\end{quote}
                   1054: \end{describe}
                   1055: The next optional group contains a few miscellaneous attributes:
                   1056: \begin{describe}
                   1057: \item[description:]\index{attribute types, description}
                   1058:                        which is a simple textual description;
                   1059:                        e.g.,
                   1060: \begin{quote}\small\begin{verbatim}
                   1061: Principal Implementor of the ISO Development Environment
                   1062: \end{verbatim}\end{quote}
                   1063: 
                   1064: \item[info:]\index{attribute types, info}
                   1065:                        which is additional information about the object;
                   1066:                        e.g.,
                   1067: \begin{quote}\small\begin{verbatim}
                   1068: It's nearly as good as BIND
                   1069: \end{verbatim}\end{quote}
                   1070: 
                   1071: \item[businessCategory:]\index{attribute types, businessCategory}
                   1072:                        which describes the person's business,
                   1073:                        e.g.,
                   1074: \begin{quote}\small\begin{verbatim}
                   1075: networking
                   1076: \end{verbatim}\end{quote}
                   1077: 
                   1078: \item[title:]\index{attribute types, title}
                   1079:                        which is the person's job title,
                   1080:                        e.g.,
                   1081: \begin{quote}\small\begin{verbatim}
                   1082: Senior Scientist
                   1083: \end{verbatim}\end{quote}
                   1084: 
                   1085: \item[roomNumber:]\index{attribute types, roomNumber}
                   1086:                        which is a string describing where the object resides
                   1087:                        at the location, e.g.,
                   1088: \begin{quote}\small\begin{verbatim}
                   1089: Building T-30
                   1090: \end{verbatim}\end{quote}
                   1091: 
                   1092: \item[userPassword:]\index{attribute types, userPassword}
                   1093:                        which is a string containing the object's
                   1094:                        password in the Directory.  This is used,
                   1095:                        for example, when the user wants to update
                   1096:                        the entry.
                   1097:                        The password is kept in the clear
                   1098:                        (the security ramifications of this are
                   1099:                        discussed later on); e.g.,
                   1100: \begin{quote}\small\begin{verbatim}
                   1101: secret
                   1102: \end{verbatim}\end{quote}
                   1103: 
                   1104: \item[mobileTelephoneNumber:]\index{attribute types, mobileTelephoneNumber}\index{attribute types, mobile (mobileTelephoneNumber)}
                   1105:                        which is a string describing the user's mobile
                   1106:                        number (e.g., for a cellular phone).
                   1107: 
                   1108: \item[pagerTelephoneNumber:]\index{attribute types, pagerTelephoneNumber}\index{attribute types, pager (pagerTelephoneNumber)}
                   1109:                        which is a string describing the user's pager number.
                   1110: 
                   1111: \item[favouriteDrink:]\index{attribute types, favouriteDrink}\index{attribute types, drink (favouriteDrink)}
                   1112:                        which is a string describing the user's favorite drink.
                   1113: 
                   1114: \item[secretary:]\index{attribute types, secretary}
                   1115:                        which is the Distinguished Name of the user's
                   1116:                        secretary.
                   1117: 
                   1118: \item[seeAlso:]\index{attribute types, seeAlso}
                   1119:                        which is a Distinguished Name pointing to another
                   1120:                        entry related to the user (perhaps in a different
                   1121:                        role).
                   1122: 
                   1123: \item[photo:]\index{attribute types, photo}
                   1124:                        which is a facsimile bitmap of the user's face.
                   1125: \end{describe}
                   1126: The final optional group contains a few attributes about the person at home:
                   1127: \begin{describe}
                   1128: \item[homePostalAddress:]\index{attribute types, homePostalAddress}
                   1129:                        which describes how physical mail is addressed to the
                   1130:                        person's home.
                   1131:                        The syntax of this attribute's value is special:
                   1132:                        it consists of~1 to~6 fields, seperated by the
                   1133:                        ``\verb"$"''-sign, each field being from~1 to~30
                   1134:                        characters long; e.g.
                   1135: \begin{quote}\small\begin{verbatim}
                   1136: NYSERNet Inc. $ 165 Jordan Road $ Troy, NY 12180
                   1137: \end{verbatim}\end{quote}
                   1138: 
                   1139: \item[homePhone:]\index{attribute types, homePhone}
                   1140:                which is a string describing the phone number of the object
                   1141:                using the international notation; e.g.,
                   1142: \begin{quote}\small\begin{verbatim}
                   1143: +1 518-283-8860
                   1144: \end{verbatim}\end{quote}
                   1145: \end{describe}
                   1146: Figure~\ref{pilotPerson-edb} shows an entry for a \verb"pilotPerson" object.
                   1147: \tagfigure[tp]{INT-6}{An Example of an Entry for the pilotPerson Object Class}%
                   1148:        {pilotPerson-edb}
                   1149: 
                   1150: \subsubsection {The alias objectClass}\index{object classes, alias}
                   1151: Objects of this class represent an alias to some other entry in the
                   1152: NYSERNet/PSI White Pages Pilot.
                   1153: Each organization participating in the pilot must define at least two of
                   1154: these:
                   1155: \begin{itemize}
                   1156: \item  a manager responsible for the organization's portion of the Directory
                   1157:        tree;
                   1158:        and,
                   1159: 
                   1160: \item  a postmaster responsible for the organization's electronic mail.
                   1161: \end{itemize}
                   1162: 
                   1163: Table~\ref{alias-attributes} summarizes the attributes types for
                   1164: an \verb"alias".
                   1165: There are two mandatory attributes:
                   1166: \begin{describe}
                   1167: \item[commonName:]\index{attribute types, commonName}\index{attribute types, cn (commonName)}
                   1168:                        which gives the name of the alias.
                   1169:                        The value of this attribute is a string; e.g.,
                   1170: \begin{quote}\small\begin{verbatim}
                   1171: PostMaster
                   1172: \end{verbatim}\end{quote}
                   1173: 
                   1174: \item[aliasedObjectName:]\index{attribute types, aliasedObjectName}
                   1175:                        which is a pointer to another object in the Directory;
                   1176:                        e.g.,
                   1177: \begin{quote}\small\begin{verbatim}
                   1178: c=US@o=NYSERNet Inc.@ou=Operations@cn=Chris Kolb
                   1179: \end{verbatim}\end{quote}
                   1180: \[\fbox{\begin{tabular}{lp{0.4\textwidth}}
                   1181: \bf NOTE:&     The value of this attribute must not be another alias:
                   1182:                each alias must point to a non-aliased entry!
                   1183: \end{tabular}}\]
                   1184: \end{describe}
                   1185: There are no optional attributes for this object class.
                   1186: Figure~\ref{alias-edb} shows an entry for an \verb"alias" object.
                   1187: \tagtable[tp]{INT-7}{Attribute Types for the alias Object Class}%
                   1188:        {alias-attributes}
                   1189: \tagfigure[tp]{INT-7}{An Example of an Entry for the alias Object Class}%
                   1190:        {alias-edb}
                   1191: 
                   1192: \subsubsection {The organizationalRole objectClass}\index{object classes, organizationalRole}
                   1193: Objects of this class represent a position filled by a person.
                   1194: 
                   1195: Table~\ref{organizationalRole-attributes} summarizes the attributes types for
                   1196: a \verb"organizationalRole".
                   1197: There is one mandatory attribute:
                   1198: \begin{describe}
                   1199: \item[commonName:]\index{attribute types, commonName}\index{attribute types, cn (commonName)}
                   1200:                        which gives the name of the role.
                   1201:                        The value of this attribute is a string; e.g.,
                   1202: \begin{quote}\small\begin{verbatim}
                   1203: Manager
                   1204: \end{verbatim}\end{quote}
                   1205: \end{describe}
                   1206: There are several attributes that may be present,
                   1207: which are divided into three groups:
                   1208: physical address, telecommunication information, 
                   1209: and miscellaneous information.
                   1210: The first two groups have been previously described.
                   1211: The final optional group contains two miscellaneous attributes:
                   1212: \begin{describe}
                   1213: \item[description:]\index{attribute types, description}
                   1214:                        which is a simple textual description;
                   1215:                        e.g.,
                   1216: \begin{quote}\small\begin{verbatim}
                   1217: Manager of the Troy Office
                   1218: \end{verbatim}\end{quote}
                   1219: 
                   1220: \item[roleOccupant:]\index{attribute types, roleOccupant}
                   1221:                        which is a pointer to another object in the Directory,
                   1222:                        referring to the person who currently fills the role.
                   1223:                        e.g.,
                   1224: \begin{quote}\small\begin{verbatim}
                   1225: c=US@o=NYSERNet Inc.@ou=Administration@cn=Kimberly Brown
                   1226: \end{verbatim}\end{quote}
                   1227: \end{describe}
                   1228: Figure~\ref{organizationalRole-edb} shows an entry for a \verb"organizationalRole"
                   1229: object.
                   1230: \tagtable[tp]{INT-9}{Attribute Types for the organizationalRole Object Class}%
                   1231:        {organizationalRole-attributes}
                   1232: \tagfigure[tp]{INT-14}%
                   1233:        {An Example of an Entry for the organizationalRole Object Class}%
                   1234:        {organizationalRole-edb}
                   1235: 
                   1236: \subsubsection {The quipuDSA objectClass}\index{object classes, quipuDSA}
                   1237: Objects of this class represent a Directory System Agent (DSA) running 
                   1238: the pilot project software.
                   1239: Each organization participating in the NYSERNet/PSI White Pages Pilot typically
                   1240: runs at least one DSA.
                   1241: 
                   1242: Table~\ref{quipuDSA-attributes} summarizes the attributes types for
                   1243: a \verb"quipuDSA".
                   1244: There are several mandatory attributes:
                   1245: \begin{describe}
                   1246: \item[commonName:]\index{attribute types, commonName}\index{attribute types, cn (commonName)}
                   1247:                        which gives the name of the DSA,
                   1248:                        by convention this is the name of an endangered species
                   1249:                        in South America; e.g.,
                   1250: \begin{quote}\small\begin{verbatim}
                   1251: Fruit Bat
                   1252: \end{verbatim}\end{quote}
                   1253: 
                   1254: \item[eDBinfo:]\index{attribute types, eDBinfo}
                   1255:                        which indicates how the DSA participates when
                   1256:                        propagating authoritative EDB information
                   1257:                        (this is the dual
                   1258:                        of the \verb"masterDSA" and \verb"slaveDSA"
                   1259:                        attribute types discussed earlier).
                   1260:                        The syntax of this attribute's value is special:
                   1261: \begin{quote}\small\begin{verbatim}
                   1262: <name> # <upstream> # <downstream>
                   1263: \end{verbatim}\end{quote}
                   1264: The \verb"<name>" field is a Distinguished Name referring to the object
                   1265: containing the EDB.
                   1266: By convention, if absent this refers to the ROOT (unnamed) EDB.
                   1267: The \verb"<upstream>" field is the Distinguished Name of a DSA which is
                   1268: considered to be ``closer'' to the MASTER of this EDB.
                   1269: It may be the name of the actual DSA containing the MASTER EDB,
                   1270: but it might also be the name of an intermediate DSA (containing a SLAVE copy).
                   1271: If this field is empty,
                   1272: then this DSA does not pull the EDB from another DSA
                   1273: (this needn't mean that it holds the MASTER EDB,
                   1274: though usually this is the case).
                   1275: The \verb"<downstream>" field is the Distinguished Name of a DSA which is
                   1276: allowed to copy the EDB from this DSA.
                   1277: If this field is empty,
                   1278: then this DSA does not allow other DSAs to copy the EDB.
                   1279: If the \verb"<downstream>" field is to contain more than one DSA,
                   1280: either enter multiple \verb"eDBinfo" lines or separate the Distinguished
                   1281: Names of the downstream DSAs with the \verb"`$'"-sign.
                   1282: 
                   1283: A few examples:
                   1284: \begin{quote}\small\begin{verbatim}
                   1285: # cn=Giant Tortoise # cn=Fruit Bat
                   1286: c=US # # cn=Fruit Bat
                   1287: c=US # # c=US@cn=Spectacled Bear
                   1288: c=US@l=NY # cn=Fruit Bat #
                   1289: \end{verbatim}\end{quote}
                   1290: Note that there is no harm to using multiple \verb"eDBinfo" lines,
                   1291: even if they refer to the same EDB.
                   1292: These lines indicate that:
                   1293: \begin{itemize}
                   1294: \item  The ROOT EDB is read from the \verb"cn=Giant Tortoise" DSA,
                   1295:        further the \verb"cn=Fruit Bat" DSA is allowed to read the
                   1296:        ROOT EDB from this DSA.
                   1297: 
                   1298: \item  The \verb"cn=Fruit Bat" DSA and the \verb"c=US@cn=Spectacled Bear" DSA
                   1299:        are allowed to read the EDB for \verb"c=US". 
                   1300:        Note that the second and third line could be combined as:
                   1301: \begin{quote}\small\begin{verbatim}
                   1302: c=US # # cn=Fruit Bat$c=US@cn=Spectacled Bear
                   1303: \end{verbatim}\end{quote}
                   1304: While more concise,
                   1305: this format is not recommended as it is probably more difficult to read.
                   1306: 
                   1307: \item  The DSA named \verb"cn=Fruit Bat" supplies the EDB for \verb"c=US@l=NY"
                   1308:        to this DSA.
                   1309: \end{itemize}
                   1310: 
                   1311: \item[presentationAddress:]\index{attribute types, presentationAddress}
                   1312:                        which is the OSI presentation address that the DSA
                   1313:                        resides at.
                   1314:                        The syntax of this attribute's value is special:
                   1315: \begin{quote}\small\begin{verbatim}
                   1316: '0101'H/Internet=<quad>+<port>
                   1317: \end{verbatim}\end{quote}
                   1318: or
                   1319: \begin{quote}\small\begin{verbatim}
                   1320: '0101'H/Internet=<quad-1>+<port>|Internet=<quad-2>+<port>
                   1321: \end{verbatim}\end{quote}
                   1322: if the DSA is capable of listing on multiple IP addresses.%
                   1323: \footnote{Actually, the rules for forming OSI presentation addresses are
                   1324: {\em much\/} more complicated;
                   1325: however, for the purposes of the pilot project,
                   1326: this should suffice.}
                   1327: The \verb"<quad>" field is a 32-bit IP address expressed in the
                   1328: usual quad notation (e.g., \verb"130.117.128.2").
                   1329: The \verb"<port>" field is a decimal TCP port which isn't likely to
                   1330: be used on your system.
                   1331: The value \verb"17003" is recommended for the purposes of the pilot project.
                   1332: 
                   1333: A simple example:
                   1334: \begin{quote}\small\begin{verbatim}
                   1335: '0101'H/Internet=130.117.128.2+17003
                   1336: \end{verbatim}\end{quote}
                   1337: Note that multiple values for the \verb"presentationAddress" attribute type
                   1338: should not be used:
                   1339: multiple IP addresses (up to~4) can be specified using a single attribute value.
                   1340: 
                   1341: \item[manager:]\index{attribute types, manager}
                   1342:                        which is a pointer to another object in the Directory
                   1343:                        of the person who manages this DSA;
                   1344:                        e.g.,
                   1345: \begin{quote}\small\begin{verbatim}
                   1346: c=US@o=NYSERNet Inc.@cn=Manager
                   1347: \end{verbatim}\end{quote}
                   1348: 
                   1349: \item[userPassword:]\index{attribute types, userPassword}
                   1350:                        which is a string containing the DSA's
                   1351:                        password in the Directory.  This is used
                   1352:                        when the manager of the DSA wants to
                   1353:                        change the entry for the DSA itself
                   1354:                        (as opposed to the entries held by the DSA).
                   1355:                        The password is kept in the clear
                   1356:                        (the security ramifications of this are
                   1357:                        discussed later on); e.g.,
                   1358: \begin{quote}\small\begin{verbatim}
                   1359: secret
                   1360: \end{verbatim}\end{quote}
                   1361: 
                   1362: \item[quipuVersion:]\index{attribute types, quipuVersion}
                   1363:                        which is a simple string relating the version of
                   1364:                        the pilot project software being run by this DSA;
                   1365:                        e.g.,
                   1366: \begin{quote}\small\begin{verbatim}
                   1367: Version 5.0
                   1368: \end{verbatim}\end{quote}
                   1369: \end{describe}
                   1370: There are two optional attributes:
                   1371: \begin{describe}
                   1372: \item[description:]\index{attribute types, description}
                   1373:                        which, by convention, is multi-valued.
                   1374:                        The distinguished value is the wildlife description
                   1375:                        of the \verb"commonName" attribute whilst the other
                   1376:                        values describe the role that the DSA plays in
                   1377:                        the pilot project;
                   1378:                        e.g.,
                   1379: \begin{quote}\small\begin{verbatim}
                   1380: The Mischevous Varmint
                   1381: A MASTER DSA for l=NY under c=US
                   1382: A SLAVE DSA for ROOT and c=US
                   1383: \end{verbatim}\end{quote}
                   1384: 
                   1385: \item[supportedApplicationContext:]\index{attribute types, supportedApplicationContext}
                   1386:                        which defines the application ports offerred by this
                   1387: process.
                   1388:                        The current values are:
                   1389: \begin{quote}\small\begin{verbatim}
                   1390: x500DSP & x500DAP & quipuDSP
                   1391: \end{verbatim}\end{quote}
                   1392: \end{describe}
                   1393: Figure~\ref{quipuDSA-edb} shows an entry for a \verb"quipuDSA" object.
                   1394: \tagtable[tp]{INT-8}{Attribute Types for the quipuDSA Object Class}%
                   1395:        {quipuDSA-attributes}
                   1396: \tagfigure[tp]{INT-8}{An Example of an Entry for the quipuDSA Object Class}%
                   1397:        {quipuDSA-edb}
                   1398: 
                   1399: \section      {Functional Model}
                   1400: The Functional Model describes the service in terms of entities.
                   1401: As noted earlier,
                   1402: two kinds of entities exist:
                   1403: {\em Directory User Agents\/} (DUAs),
                   1404: which operate on behalf of a user,
                   1405: and
                   1406: {\em Directory System Agents\/} (DSAs),
                   1407: which provide the service.
                   1408: 
                   1409: The key aspect of the functional model is deciding how information
                   1410: is transferred through the system.
                   1411: When a DUA requests some action from a DSA
                   1412: (e.g., to read an entry),
                   1413: the DSA may not have that information resident.
                   1414: In this case,
                   1415: the DSA has a choice:
                   1416: it may either contact another DSA which is ``closer'' to the information
                   1417: and propagate the request (this is called {\em chaining\/}),
                   1418: or it may return information about this ``closer'' DSA to the DUA,
                   1419: and let the DUA re-issue its request
                   1420: (this is called {\em referral\/}).
                   1421: WHen DSAs communicate between themselves,
                   1422: they may also chain or refer requests.
                   1423: 
                   1424: For the purposes of the pilot,
                   1425: it is important to understand what the term ``resident'' means with respect
                   1426: to information.
                   1427: This residency requirement is:
                   1428: \[\begin{tabular}{|l|l|}
                   1429: \hline
                   1430: \multicolumn{1}{|c|}{\bf Operation Requested}&
                   1431:                \multicolumn{1}{|c|}{\bf EDB Required for Residency}\\
                   1432: \hline
                   1433: read, compare& MASTER, SLAVE, or CACHE\\
                   1434: list, search&  MASTER, or SLAVE\\
                   1435: update&                MASTER\\
                   1436: \hline
                   1437: \end{tabular}\]
                   1438: Note that after an update occurs,
                   1439: the DSA actually performing the update (the one holding the MASTER EDB)
                   1440: will write the in-core EDB structure to disk prior to returning the result
                   1441: of the operation.
                   1442: Of course,
                   1443: once a MASTER DSA updates its copy of the EDB,
                   1444: there is still the question of how DSAs with SLAVE copies receive this
                   1445: new information.
                   1446: The MASTER DSA does not explicitly inform them.
                   1447: A polling model is used instead.
                   1448: 
                   1449: 
                   1450: At present,
                   1451: a SLAVE DSA will reload its copy of an EDB when it starts,
                   1452: or when its \verb"manager" issues a management command directing it to do so.
                   1453: Later on,
                   1454: a script will be discussed which performs this task.
                   1455: The frequency at which the script runs (or how often a DSA reboots)
                   1456: determines how out of date a SLAVE copy of an EDB can become.
                   1457: 
                   1458: Prior to requesting a copy of an EDB,
                   1459: a DSA checks to see if the timestamp has changed.
                   1460: If so,
                   1461: the EDB is updated.
                   1462: As noted earlier,
                   1463: the timestamp is the second line of an EDB file.
                   1464: Whenever a modification is made to an entry in an EDB file,
                   1465: the MASTER DSA for that EDB will update the timestamp accordingly.
                   1466: Similarly,
                   1467: whenever a text editor is used to modify an EDB file,
                   1468: the user should update the timestamp.
                   1469: The actual value is unimportant:
                   1470: when a DSA examines the timestamp,
                   1471: it looks only for a change;
                   1472: it does not consider whether the EDB is newer or older.
                   1473: 
                   1474: Thus, while replication in the pilot is important to speed queries,
                   1475: updates still rely on a centralized entity being available.
                   1476: (This is the best compromise which can be taken without making the system
                   1477: tremendously more complex.)
                   1478: 
                   1479: \section      {Organizational Model}
                   1480: The Organizational Model describes the service in terms of the policy
                   1481: defining interactions between entities and the information they hold.
                   1482: That is,
                   1483: this model describes how portions of the Directory tree map onto the DSAs.
                   1484: This includes issues of replication and access control.
                   1485: A {\em Directory Management Domain\/} (DMD) defines a portion of the
                   1486: Directory Tree and how it is managed.
                   1487: 
                   1488: For the purposes of the pilot project,
                   1489: DSAs are divided into three categories:
                   1490: \begin{describe}
                   1491: \item[Level-0:]        These DSAs are run by the sponsors of the NYSERNet/PSI White
                   1492:                Pages Pilot.  Their goal is to be highly-available
                   1493:                authoritative servers.
                   1494: 
                   1495: \item[Level-1:]        Each organization participating in the pilot project runs
                   1496:                a Level-1 DSA.%
                   1497: \footnote{The pilot project sponsors may run the Level-1 DSA on behalf of an
                   1498: organization so requested.
                   1499: This is discouraged, but may be necessary for resource constrained sites.}
                   1500: The Level-1 DSA for a participating organization holds authoritative
                   1501: information about that organization object.
                   1502: 
                   1503: \item[Level-2:]        As the size of the organization's subtree requires,
                   1504: an organization runs one or more Level-2 DSA to hold a portion of that subtree.
                   1505: Typically,
                   1506: a Level-2 DSA is run for each top-level organizational unit in the
                   1507: participating organization.
                   1508: \end{describe}
                   1509: Figure~\ref{dmd-topology} shows the top-level topology of the pilot project DMD.
                   1510: Each participating organization is represented by an \verb"organization"
                   1511: object ($O_1$ through $O_n$) under the \verb"c=US" tree.
                   1512: Underneath each \verb"c=US@o=O_i" object,
                   1513: one or more objects of class \verb"organizationalUnit" are placed.
                   1514: The structure beneath each \verb"c=US@o=O_i@ou=U_j" object
                   1515: is decided by the participating organization.
                   1516: The pilot project sponsors suggest that only \verb"pilotPerson" objects
                   1517: be placed underneath the organizational units.
                   1518: \tagfigure[tp]{INT-9}{Topology of the Pilot Project Directory Management Domain}%
                   1519:        {dmd-topology}
                   1520: 
                   1521: Now that the general structure is outlined,
                   1522: how does this portion of the Directory tree map onto DSAs?
                   1523: 
                   1524: \subsection    {Level-0 DSAs}
                   1525: There are two Level-0 DSAs.
                   1526: Both reside directly under the ROOT.
                   1527: 
                   1528: The first Level-0 DSA, \verb"cn=Alpaca",
                   1529: contains a copy of the ROOT EDB which it obtains directly from the
                   1530: DSA holding the MASTER copy of the ROOT EDB.
                   1531: In addition,
                   1532: \verb"cn=Alpaca" is a MASTER DSA for \verb"c=US".
                   1533: It propagates this EDB to the second Level-0 DSA,
                   1534: and to the Level-1 DSAs of all participating organizations
                   1535: (e.g., each DSA holding the MASTER of the \verb"c=US@o=O_i" EDB).
                   1536: In addition,
                   1537: these Level-1 DSAs propagate a copy of their EDB for \verb"c=US@o=O_i"
                   1538: to this Level-0 DSA.
                   1539: Finally,
                   1540: this DSA receives a copy of the EDB for \verb"c=US@l=NY".
                   1541: 
                   1542: Figure~\ref{alpaca-edb} shows the entry corresponding to this DSA.
                   1543: A single participating organization is shown in this entry.
                   1544: \tagfigure[tp]{INT-10}{The Entry for the Level-0 DSA, cn=Alpaca}{alpaca-edb}
                   1545: 
                   1546: The second Level-0 DSA, \verb"cn=Fruit Bat",
                   1547: contains a copy of the ROOT and \verb"c=US" EDBs which it obtains from
                   1548: \verb"cn=Alpaca".
                   1549: It may propagate these EDBs to any Level-1 DSA
                   1550: (in case \verb"cn=Alpaca" is unavailable for an extended period of time).
                   1551: In addition,
                   1552: these Level-1 DSAs
                   1553: propagate a copy of their MASTER EDB to this Level-0 DSA.
                   1554: Finally,
                   1555: \verb"cn=Fruit Bat" is a MASTER DSA for \verb"c=US@l=NY",
                   1556: which it propagates to \verb"cn=Alpaca".
                   1557: 
                   1558: Figure~\ref{fruitbat-edb} shows the entry corresponding to this DSA.
                   1559: As with the \verb"cn=Alpaca" DSA,
                   1560: a single participating organization is shown.
                   1561: \tagfigure[tp]{INT-11}{The Entry for the Level-0 DSA, cn=Fruit Bat}%
                   1562:        {fruitbat-edb}
                   1563: 
                   1564: Level-0 DSAs perform chaining when handling requests from other DSAs.
                   1565: 
                   1566: \subsection    {Level-1 DSAs}
                   1567: Each participating organization runs a DSA which contains the MASTER EDB
                   1568: for that organization.
                   1569: This DSA resides directly under \verb"c=US".
                   1570: 
                   1571: This DSA receives a copy of the ROOT and \verb"c=US" EDBs from
                   1572: one of the Level-0 DSAs (usually \verb"cn=Alpaca").
                   1573: It also propagates its MASTER copy of the \verb"c=US@o=O_i" EDB to
                   1574: both Level-0 DSAs.
                   1575: 
                   1576: In addition,
                   1577: this DSA propagates its EDB and a copy of the ROOT and \verb"c=US" EDBs
                   1578: to all Level-2 DSAs run by this organization.
                   1579: Similarly,
                   1580: each of these Level-2 DSAs propagate {\em all\/} of the EDBs they
                   1581: MASTER (e.g., \verb"c=US@o=O_i@ou=U_j") to this Level-1 DSA.
                   1582: 
                   1583: Level-1 DSAs perform chaining when handling requests from other DSAs.
                   1584: 
                   1585: Figure~\ref{spectacledbear-edb} shows the entry corresponding to a Level-1 DSA,
                   1586: which might be named \verb"c=US@cn=Spectacled Bear".
                   1587: A single subordinate Level-2 DSA is shown in this entry.
                   1588: \tagfigure[tp]{INT-12}{The Entry for a Level-1 DSA}{spectacledbear-edb}
                   1589: 
                   1590: \subsection    {Level-2 DSAs}
                   1591: Each participating organization runs zero or more Level-2 DSAs as the size of
                   1592: their organizational units require.
                   1593: These DSAs reside directly under \verb"c=US@o=O_i".
                   1594: 
                   1595: \[\fbox{\begin{tabular}{lp{0.8\textwidth}}
                   1596: \bf NOTE:&     At present, the pilot sponsors discourage the use of Level-2
                   1597:                DSAs.
                   1598: 
                   1599:                Nevertheless,
                   1600:                it is important to structure an organization so that it 
                   1601:                contains organizational units.
                   1602:                In this fashion,
                   1603:                when a Level-1 DSA is too large to run on an available system,
                   1604:                a Level-2 DSA can be used to reduce the memory requirements
                   1605:                on the system running the Level-1 DSA.
                   1606: \end{tabular}}\]
                   1607: 
                   1608: Level-2 DSAs receive a copy of the \verb"c=US@o=O_i" EDB from their
                   1609: superior Level-1 DSA,
                   1610: along with SLAVE copies of the ROOT and \verb"c=US" EDBs.
                   1611: They also propagate all MASTER copies of the EDBs they hold to this Level-1
                   1612: DSA. 
                   1613: 
                   1614: Level-1 DSAs perform referrals when handling requests from other DSAs.
                   1615: 
                   1616: Figure~\ref{toucan-edb} shows the entry corresponding to a Level-2 DSA,
                   1617: which might be named \verb"c=US@o=NYSERNet Inc.@cn=Toucan".
                   1618: \tagfigure[tp]{INT-13}{The Entry for a Level-2 DSA}{toucan-edb}
                   1619: 
                   1620: \subsection    {DUAs}
                   1621: In terms of the pilot project,
                   1622: DUAs conceptually exist at the same level as Level-2 DSAs.
                   1623: When a DUA associates with a DSA to access the Directory service,
                   1624: chaining is preferred over referrals,
                   1625: so that the associated DSA may cache the results to any query made by the DUA.
                   1626: This will slightly enhance the performance for other DUAs which later
                   1627: associate with this particular DSA.
                   1628: 
                   1629: The preference to be used when associating with a DSA is:
                   1630: \begin{itemize}
                   1631: \item  ``closest'' Level-2 DSA; followed by
                   1632: 
                   1633: \item  Level-1 DSA; followed by
                   1634: 
                   1635: \item  \verb"cn=Fruit Bat"; followed by
                   1636: 
                   1637: \item  \verb"cn=Alpaca".
                   1638: \end{itemize}
                   1639: 
                   1640: \section      {Security Model}
                   1641: The Security Model describes the service in terms of authentication
                   1642: and authorization.
                   1643: For the purposes of the pilot project,
                   1644: ``simple'' authentication is performed (i.e., passwords).
                   1645: The pilot project supports an anonymous DN, termed the NULL DN,
                   1646: which may be used for public, read-only access.
                   1647: Otherwise,
                   1648: users are required to bind to the Distinguished Name which corresponds
                   1649: to them.
                   1650: 
                   1651: Note that an important feature of the DMD topology presented in the
                   1652: Organizational Model is that information on users
                   1653: (and hence their passwords and any other sensitive information)
                   1654: is kept only on Level-1 and Level-2 DSAs.
                   1655: Since,
                   1656: in general,
                   1657: these DSAs are run by each participating organization,
                   1658: each organization may safeguard the disk-resident EDB files accordingly.
                   1659: 
                   1660: Because the ROOT, \verb"c=US", and \verb"c=US@o=O_i" EDBs are widely
                   1661: replicated,
                   1662: entries contained therein should not rely on \verb"self" access control
                   1663: for modification.
                   1664: That is,
                   1665: the entries contained in this EDBs should:
                   1666: \begin{itemize}
                   1667: \item  if of object class \verb"quipuDSA", have a \verb"manager"
                   1668:        attribute which resolves to an entry which is not propagated outside
                   1669:        of the associated organization; e.g.,
                   1670: \begin{quote}\small\begin{verbatim}
                   1671: manager= c=US@o=O_i@cn=Manager
                   1672: \end{verbatim}\end{quote}
                   1673: which is an object of classe \verb"alias" to
                   1674: \begin{quote}\small\begin{verbatim}
                   1675: c=US@o=O_i@ou=Development@cn=FirstName LastName
                   1676: \end{verbatim}\end{quote}
                   1677:        and,
                   1678: 
                   1679: \item  regardless of the object class,
                   1680:        always use \verb"group" access to specify an entry which is not
                   1681:        propagated outside of the associated organization; e.g.,
                   1682: \begin{quote}\scriptsize\begin{verbatim}
                   1683: acl= others # read # entry
                   1684: acl= group # c=US@o=O_i@cn=Manager # write # entry
                   1685: acl= others # read # default
                   1686: acl= group # c=US@o=O_i@cn=Manager # write # default
                   1687: acl= others # compare # attributes # accessControlList$userPassword
                   1688: acl= group # c=US@o=O_i@cn=Manager # write # attributes # accessControlList$userPassword
                   1689: \end{verbatim}\end{quote}
                   1690: \end{itemize}
                   1691: Note that the object associated with the \verb"manager" attribute of a DSA
                   1692: is effectively the ``super user'' for all EDBs which that DSA MASTERs.
                   1693: As such,
                   1694: the \verb"userPassword" associated with the corresponding object should be 
                   1695: protected to the greatest extent practical.
                   1696: 
                   1697: Since there is no hope of protecting the passwords for a DSA or any object
                   1698: residing in the ROOT, \verb"c=US", and possibly \verb"c=US@o=O_i" EDBs,
                   1699: this policy effectively revokes any privileges assocated with the passwords of
                   1700: the entries contained in these EDBs.
                   1701: 
                   1702: \section      {Running your DMD}
                   1703: The pilot sponsors prefer that you administer your own DMD by running the
                   1704: pilot software on one of your own systems,
                   1705: doing maintenance,
                   1706: and so on.
                   1707: You should now continue with Chapter~\ref{installation}.
                   1708: 
                   1709: However,
                   1710: if your site is a member of NYSERNet, Inc.,
                   1711: then the pilot sponsors will administer the DMD for you,
                   1712: if you lack the facilities to do so.
                   1713: In this case,
                   1714: you will be required to provide EDB files to the pilot sponsors.
                   1715: Contact 
                   1716: \begin{quote}\small\begin{verbatim}
                   1717: [email protected]
                   1718: \end{verbatim}\end{quote}
                   1719: to find out the full details.
                   1720: 
                   1721: For now, 
                   1722: note that entries are formatted as described above,
                   1723: but with a few read-only modifications:
                   1724: \begin{itemize}
                   1725: \item  The \verb"accessControlList" attribute is simply:
                   1726: \begin{quote}\small\begin{verbatim}
                   1727: acl=
                   1728: \end{verbatim}\end{quote}
                   1729: 
                   1730: \item  The \verb"userPassword" attribute is not present.
                   1731: \end{itemize}
                   1732: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.