Annotation of 43BSDReno/contrib/isode-beta/doc/whitepages/administrator/introduction.tex, revision 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.