Annotation of 43BSDReno/contrib/isode-beta/doc/whitepages/report-2/text.tex, revision 1.1

1.1     ! root        1: % -*- LaTeX -*-
        !             2: 
        !             3: \newpage
        !             4: \section       {Introduction}
        !             5: In July of {\oldstyle 1989},
        !             6: NYSERNet started a pilot project offering a White Pages service using OSI
        !             7: technology.
        !             8: Since that time,
        !             9: NYSERNet and PSI have been extending and evaluating the service in response to
        !            10: experience gained during the operation of the pilot.
        !            11: 
        !            12: The service is interesting in three respects:
        !            13: it is a large,
        !            14: distributed information service involving administration by multiple
        !            15: organizations;
        !            16: it is the first production-quality field test of the OSI Directory (X.500);
        !            17: and,
        !            18: it is the first large scale production application of OSI technology on top of
        !            19: the popular Internet (TCP/IP) suite of protocols.
        !            20: 
        !            21: The purpose of this document is to describe the ``refinements'' made to the
        !            22: base X.500 Recommendations in order to produce a workable system.
        !            23: It must be {\bf stressed\/} that none of these refinements are contrary to
        !            24: either the spirit or letter of the X.500 protocols.
        !            25: Rather,
        !            26: if one begins with the assumption that one has a conformant X.500
        !            27: implementation,
        !            28: then these refinements consist of fleshing out the ``for further study'' and
        !            29: ``local matter'' clauses of the X.500 Recommendations.
        !            30: Further,
        !            31: one should note that a system implementing these refinements will still be
        !            32: able to interwork,
        !            33: albeit with less functionality,
        !            34: with conformant X.500 implementations that do not implement these refinements.
        !            35: 
        !            36: For the remainder of this note,
        !            37: the reader is assumed to have a basic understanding of X.500 technology.
        !            38: 
        !            39: The purpose in presenting this information is to advance understanding of
        !            40: these grey areas by describing operational experiences in offering a Public
        !            41: Directory Service using X.500.
        !            42: Having stated what this note is about,
        !            43: it is also appropriate to state what this note is not about:
        !            44: this note is not meant to provide any implementation-specific information.
        !            45: That is,
        !            46: this note considers only the externally visible aspects of a Directory Service
        !            47: which incorporates these refinements.
        !            48: As such,
        !            49: these refinements should be applicable to {\bf any\/} conformant X.500
        !            50: implementation.
        !            51: 
        !            52: This note begins by reviewing the need for a White Pages Service and presents
        !            53: a basic model for offering such a service using the X.500 protocols.
        !            54: Next,
        !            55: a brief overview of the technology used to realize this service is presented.
        !            56: Following this,
        !            57: this note is divided into two major sections:
        !            58: first,
        !            59: issues relating to the Directory System
        !            60: (e.g., refinements in the operation of a DSA or use of the DSP)
        !            61: are discussed;
        !            62: second,
        !            63: issues relating to a Directory User
        !            64: (e.g., refinements in the operation of a DUA or use of the DAP)
        !            65: are considered.
        !            66: 
        !            67: \newpage
        !            68: \subsection    {For Further Reading}
        !            69: There is very little ``new'' information presented in this note.
        !            70: Rather,
        !            71: it is a compilation of several sources,
        !            72: organized to focus on the refinements necessary to produce a workable system
        !            73: using X.500 technology.
        !            74: Interested readers might wish to consult:
        !            75: \begin{itemize}
        !            76: \item  \cite{WPP.Intro},
        !            77:        for an introduction to the NYSERNet/PSI White Pages Pilot Project;
        !            78: 
        !            79: \item  \cite{WPP.Report-1},
        !            80:        for the latest status report (as of this writing);
        !            81: 
        !            82: \item  \cite{WPP.User,WPP.XWP},
        !            83:        for information on user interfaces;
        !            84: 
        !            85: \item  \cite{WPP.Admin},
        !            86:        for information on administering a DMD within the pilot
        !            87:        (i.e., a PRDMD);
        !            88: 
        !            89: \item  \cite{QUIPU.Manual}
        !            90:        for programmatic information on the underlying X.500 implementation.
        !            91: \end{itemize}
        !            92: All of these documents (and many others) were consulted when this note was
        !            93: written.
        !            94: 
        !            95: \newpage
        !            96: \subsection    {Managing Infrastructural Information}
        !            97: A natural function of computer networks is to form the {\em infrastructure\/}
        !            98: between the users they interconnect.
        !            99: For example,
        !           100: the electronic mail service offered by computer networks provides a means for
        !           101: users to collaborate towards some common goal.
        !           102: In the simplest cases,
        !           103: this collaboration may be solely for the dissemination of information.
        !           104: In other cases,
        !           105: two users may work on joint research project,
        !           106: using electronic mail as their primary means of communication.
        !           107: 
        !           108: Most network services are based on the implicit assumption that each user can
        !           109: supply {\em infrastructural information} to 
        !           110: facilitate information transfers through the network.
        !           111: For example,
        !           112: electronic mail services expect that an originator can supply 
        !           113: addressing information 
        !           114: for all the intended recipients.
        !           115: It is not necessarily the task of electronic mail, per se,
        !           116: to provide this infrastructural information to the user.
        !           117: 
        !           118: This model works fine in small environments,
        !           119: particularly those where infrastructural information is not difficult to 
        !           120: obtain and remember.
        !           121: However,
        !           122: the model does not scale well.
        !           123: Consider the case when the membership of a network consists of hundreds of
        !           124: thousands of users belonging to thousands of organizations.
        !           125: It is no longer reasonable for a single user to provide this information,
        !           126: except in very limited circumstances.
        !           127: Further,
        !           128: it is likely that some of the information changes frequently,
        !           129: due to personnel and other resource movement.
        !           130: The goal of a {\em white pages\/} service is to 
        !           131: provide the necessary information, and to mask the complexity of the
        !           132: infrastructural information.
        !           133: 
        !           134: \subsection    {A Public Directory Service}
        !           135: In our context,
        !           136: a public directory service allows a user to ascertain information
        !           137: about a person whose name is (approximately) known.
        !           138: In providing such a service using technology based on the X.500
        !           139: Recommendations,
        !           140: it is necessary to view this somewhat more concretely.
        !           141: 
        !           142: In particular,
        !           143: we assume that the information on a person is represented as an entry in the
        !           144: OSI Directory.
        !           145: As such,
        !           146: the ``handle'' associated with each person is a Directory Distinguished Name
        !           147: (DN).
        !           148: However,
        !           149: we further assume that a user need not know the value of this name.
        !           150: Rather,
        !           151: the user provides commonly known naming information about a person,
        !           152: and the user interface to the Directory somehow determines the correct DN,
        !           153: and then presents publically readable information from the entry associated
        !           154: with that DN.
        !           155: 
        !           156: In the NYSERNet/PSI White Pages Pilot Project,
        !           157: this first step is assumed to be an iterative process:
        !           158: first,
        !           159: ``areas'' of the Directory likely to contain the entry are identified,
        !           160: usually by searching;
        !           161: and,
        !           162: second,
        !           163: in each of those areas,
        !           164: a search for the entry is initiated.
        !           165: In a business context,
        !           166: the area corresponds to an organizational object in the Directory.
        !           167: In contrast,
        !           168: for a personal context,
        !           169: the area might correspond to a locality.
        !           170: In the pilot project,
        !           171: only the organizational case has been extensively used.
        !           172: Nonetheless,
        !           173: experience with the pilot software indicates that the search model is
        !           174: sufficiently general to support either context.
        !           175: 
        !           176: \subsection    {An Implementation}
        !           177: To implement a White Pages service using the OSI Directory,
        !           178: three things are needed:
        !           179: \begin{itemize}
        !           180: \item  an OSI infrastructure,
        !           181:        this is provided by the ISODE,
        !           182:        an openly available implementation of the upper-layers of OSI;
        !           183: 
        !           184: \item  an implementation of the OSI Directory,
        !           185:        this is provided by the ISODE implementation of the Directory,
        !           186:        QUIPU;
        !           187:        and,
        !           188: 
        !           189: \item  a White Pages abstraction,
        !           190:        provided by an administrative discipline along with at least one user
        !           191:        interface through which the service is accessed.
        !           192: \end{itemize}
        !           193: It is important to distinguish between the White Pages {\em service\/} and the
        !           194: OSI Directory {\em technology} as defined in
        !           195: \cite{ISO.Directory,CCITT.Directory}.
        !           196: The White Pages abstraction is provided both by a focused use of the
        !           197: underlying OSI Directory technology
        !           198: and by special user interfaces.
        !           199: Of course,
        !           200: many might view the sole focus of the OSI Directory is to provide a white
        !           201: pages service.
        !           202: As such,
        !           203: the abstraction can be seen simply as the administrative and operational
        !           204: agreements necessary to use X.500.
        !           205: 
        !           206: The ISODE (pronounced {\em I-SO-D-E\/}),
        !           207: or {\em ISO Development Environment}, is a collection of library
        !           208: routines and programs that implements an extensive set of OSI upper-layer
        !           209: services\cite{Open.Book}.%
        !           210: \footnote{It is an unfortunate historical coincidence that the first three
        !           211: letters of the ISODE are ``ISO''.
        !           212: This is not an acronym for the International Organization for Standardization,
        !           213: but rather three letters which,
        !           214: when pronounced in English,
        !           215: produce a pleasing sound.}
        !           216: In brief,
        !           217: the ISODE implementation of the upper-layers of OSI is interesting in four
        !           218: respects:
        !           219: it provides extensive automatic tools for the development of OSI applications;
        !           220: it supports OSI applications on top of both OSI and TCP/IP-based networks;
        !           221: it provides a novel approach to the problems of OSI coexistence
        !           222: and transition;
        !           223: and,
        !           224: it is openly available (non-proprietary).
        !           225: 
        !           226: The ISODE implementation of the OSI Directory,
        !           227: QUIPU\cite{QUIPU.Directory},
        !           228: was donated by University College London.
        !           229: QUIPU was originally developed as a part of the INCA
        !           230: (Integrated Network Architecture) project
        !           231: (under the auspices of the ESPRIT initiative of the EEC).
        !           232: The Inca of Peru did not have writing.
        !           233: Instead,
        !           234: they stored information on strings,
        !           235: carefully knotted in a specific manner with colored thread,
        !           236: and attached to a larger rope.
        !           237: Such a device was known as a {\em Quipu\/}
        !           238: (pronounced {\em kwip-ooo}).
        !           239: The encoding was obscure,
        !           240: and could only be read by selected trained people:
        !           241: the {\em Quipucamayocs}.
        !           242: The Quipu was a key component of Inca society,
        !           243: as it contained information about property and locations throughout
        !           244: the extensive Inca empire.
        !           245: 
        !           246: QUIPU is a complete implementation of the OSI Directory,
        !           247: based on the {\oldstyle 1988\/} CCITT recommendations\cite{CCITT.Directory}
        !           248: and ISO standards\cite{ISO.Directory}.
        !           249: As with the entire ISODE,
        !           250: QUIPU is coded in the {\em C\/} programming language\cite{C.Language} and runs
        !           251: on the \unix/ operating system.
        !           252: 
        !           253: The QUIPU Directory User Agent (DUA) supports a {\em C\/} language procedural
        !           254: interface to access the full Directory Access Service.
        !           255: The interface is relatively straight-forward,
        !           256: mapping ``programmer-friendly'' procedure calls to the formal service.
        !           257: Code to manipulate ASN.1 structures is automatically generated using
        !           258: facilities provided by the ISODE. 
        !           259: 
        !           260: The DUA interface can be used directly at the programmatic level,
        !           261: or exported from a interface process called \verb"dish"~---~the DIrectory
        !           262: SHell.
        !           263: 
        !           264: The QUIPU Directory System Agent (DSA) is memory-based:
        !           265: it uses the native \unix/ file-system to provide stable-storage between
        !           266: reboots, but otherwise maintains all data in program memory.
        !           267: As might be expected,
        !           268: providing that the DSA avoids paging,
        !           269: execution of the lookup and search facilities of the Directory can be realized
        !           270: in a timely fashion.
        !           271: Naturally, when an update operation occurs,
        !           272: the copy on disk is updated and a journal entry written before the update is
        !           273: acknowledged.
        !           274: The disk copy is stored in a textual format to facilitate examination.
        !           275: As this copy is read only once~---~when the DSA starts,
        !           276: typically when \unix/ goes multi-user~---~the cost of such a strategy is
        !           277: believed to be relatively small if properly implemented and tuned.
        !           278: 
        !           279: The DSA supports both Directory distributed operations (DSA-DSA) and the
        !           280: Directory Abstract Service (DUA-DSA),
        !           281: along with the full range of standard Directory object classes and attributes
        !           282: types.
        !           283: Further,
        !           284: a large number of other attribute types have been defined,
        !           285: both to facilitate experimentation and support the White Pages service.
        !           286: Most notably these attribute types were necessary to support automatic use of
        !           287: replication of information in the Directory.
        !           288: 
        !           289: Having now briefly introduced the implementation used in the pilot project,
        !           290: we now describe the refinements which were necessary to offer a working system.
        !           291: 
        !           292: \newpage
        !           293: \section       {Directory System Issues}
        !           294: The system-related refinements used in the pilot project are all artifacts of
        !           295: the QUIPU design\cite{QUIPU.Design}.
        !           296: These are best described in terms of the object classes and associated
        !           297: attribute types which are manipulated by a QUIPU DSA.
        !           298: However,
        !           299: before these are introduced it is necessary to discuss two topics:
        !           300: the textual convention used for writing DNs,
        !           301: and how the DSAs navigate the DIT.
        !           302: 
        !           303: \subsection    {Writing Distinguished Names}
        !           304: Although the textual notation used to write DNs should be unimportant.
        !           305: For expository (and local) purposes it is important to have a concise notation.
        !           306: 
        !           307: A Distinguished Name is written as an ordered series of RDNs separated by
        !           308: an \verb"`@'"-sign with the most significant RDN appearing at the left;
        !           309: e.g.,
        !           310: \begin{quote}\small\begin{verbatim}
        !           311: c=US@o=NYSERNet Inc.
        !           312: \end{verbatim}\end{quote}
        !           313: refers to an entry with an RDN of \verb"o=NYSERNet Inc."
        !           314: whose parent has an RDN of \verb"c=US".
        !           315: In turn,
        !           316: this parent entry is an immediate child of the root.
        !           317: To avoid any potential ambiguity,
        !           318: one usually prefixes a \verb"`@'"-sign to a string when referring to a fully
        !           319: qualified Distinguished Name;
        !           320: e.g.,
        !           321: \begin{quote}\small\begin{verbatim}
        !           322: @c=US@o=NYSERNet Inc.
        !           323: \end{verbatim}\end{quote}
        !           324: always refers to the same entry regardless of context.
        !           325: Finally,
        !           326: if an RDN consists of multiple attributes,
        !           327: then these are separated by a \verb"`%'"-sign;
        !           328: e.g.,
        !           329: \begin{quote}\small\begin{verbatim}
        !           330: @l=North America@o=NYSERNet Inc.%l=US
        !           331: \end{verbatim}\end{quote}
        !           332: 
        !           333: Tables~\ref{attribute-std} and~\ref{attribute-new}
        !           334: on pages~\pageref{attribute-std} and~\pageref{attribute-new},
        !           335: respectively,
        !           336: list the attribute types commonly used in the pilot project,
        !           337: any abbreviations, and the syntax associated with each attribute's value.
        !           338: In the interests of brevity,
        !           339: the abbreviated form is used when writing DNs.
        !           340: 
        !           341: \subsection    {DIT Navigation}
        !           342: When a DUA requests some action from a DSA
        !           343: (e.g., to read an entry),
        !           344: the DSA may not have that information resident.
        !           345: In this case,
        !           346: the DSA has a choice:
        !           347: it may either contact another DSA which is ``closer'' to the information and
        !           348: propagate the request
        !           349: (i.e., {\em chaining\/}),
        !           350: or it may return information about this ``closer'' DSA to the DUA,
        !           351: and let the DUA re-issue its request (i.e., {\em referral\/}).
        !           352: Of course,
        !           353: when DSAs communicate between themselves,
        !           354: they may also chain or refer requests.
        !           355: 
        !           356: The key issue is to understand what the term ``resident'' means with respect
        !           357: to information held by a DSA.
        !           358: In order to improve performance,
        !           359: DSAs {\em employ\/} both replication and caching of information in the
        !           360: Directory.
        !           361: Hence,
        !           362: to explain residency of information,
        !           363: some additional terminology must be introduced.
        !           364: 
        !           365: \subsubsection {Entry Data Blocks}
        !           366: First,
        !           367: we think of the entire global Directory tree as consisting of discrete units
        !           368: of information termed {\em entry data blocks},
        !           369: or simply {\em blocks}.
        !           370: A block consists of a small portion of the tree:
        !           371: the immediate children of a particular node.
        !           372: Thus the phrase ``this DSA holds a copy of the block for \verb"c=US"'' means
        !           373: that the DSA in question has information about the {\em attributes\/} of 
        !           374: the nodes which exist immediately below the \verb"c=US" entry,
        !           375: such as
        !           376: \begin{quote}\small\begin{verbatim}
        !           377: c=US@o=NYSERNet Inc.
        !           378: \end{verbatim}\end{quote}
        !           379: The phrase does not imply that the DSA has any information, whatsoever,
        !           380: about {\em entries\/} beneath these immediately subordinate nodes,
        !           381: e.g.,
        !           382: \begin{quote}\small\begin{verbatim}
        !           383: c=US@o=NYSERNet Inc.@ou=Research and Development
        !           384: \end{verbatim}\end{quote}
        !           385: There are three kinds of blocks that a DSA might hold:
        !           386: \begin{itemize}
        !           387: \item  a {\em slave\/} copy refers to complete, authoritative information of
        !           388: a block:
        !           389: the DSA knows about all of the entries and all of the children of the node
        !           390: corresponding to that particular block.
        !           391: Slave copies are regularly updated by contacting an {\em upstream\/} DSA,
        !           392: and comparing timestamps associated with the two copies of the block.
        !           393: 
        !           394: \item  a {\em cache\/} copy refers to possibly partial information that a DSA
        !           395: has received during its execution lifetime:
        !           396: the DSA may know about some of the children and possibly some of their attributes.
        !           397: When a DSA chains a request for some information and the information returns
        !           398: through the DSA,
        !           399: that DSA may decide to cache that information for some short period of time
        !           400: (e.g., 30~minutes).
        !           401: 
        !           402: \item  the term {\em master\/} copy is self-evident.
        !           403: Only a single DSA may hold the master copy for any portion of the tree.
        !           404: \end{itemize}
        !           405: 
        !           406: With these terms now described,
        !           407: the {\em residency requirement\/} is simply enumerated as:
        !           408: \[\begin{tabular}{|r|l|}
        !           409: \hline
        !           410: \multicolumn{1}{|c|}{\bf Operation Requested}&
        !           411:                \multicolumn{1}{|c|}{\bf Copy Required for Residency}\\
        !           412: \hline
        !           413: read, compare& master, slave, or cache\\
        !           414: list, search&  master, or slave\\
        !           415: update&                master\\
        !           416: \hline
        !           417: \end{tabular}\]
        !           418: (Actually,
        !           419: a cached copy might be used to satisfy a list request,
        !           420: depending on the service controls used with the operation.)
        !           421: 
        !           422: Hence,
        !           423: while the pilot relies primarily on replication (slave blocks) to speed
        !           424: queries,
        !           425: updates still rely on a centralized entity (containing the master block) being
        !           426: available. 
        !           427: (This is the best compromise can be taken without making the system
        !           428: tremendously more complex,
        !           429: e.g.,
        !           430: introducing distributed database technology.)
        !           431: 
        !           432: Finally,
        !           433: note that the EDB approach is much coarser than a
        !           434: ``distributed entry'' capability.
        !           435: Although distributing across several DSAs the attribute and children
        !           436: information for a single entry may be administrative attractive,
        !           437: it is felt to be technically intractable at this time.
        !           438: 
        !           439: \subsubsection {Use of Presentation Address}
        !           440: Only within a single OSI community can homogeneous interworking be achieved.
        !           441: It is important to realize that the value of a white pages service increases
        !           442: as its scope increases.
        !           443: As such,
        !           444: it is important to appreciate that OSI applications are implemented on a wide
        !           445: range of end-to-end protocol combinations.
        !           446: Sadly,
        !           447: these are largely incompatible (e.g., TP4/CLNP and TP0/X.25).
        !           448: In order to provide homogeneous service to the user,
        !           449: the DSAs must be able to compare two OSI presentation addresses and determine
        !           450: if an association can be established directly between the two.
        !           451: This need arises in two cases.
        !           452: 
        !           453: First,
        !           454: a DSA wishes to perform an operation and realizes that it must either chain or
        !           455: refer.
        !           456: The DSA compares the presentation address of the application entity
        !           457: on whose behalf it is performing the operation,
        !           458: with the presentation address of a DSA which is closer to the information.
        !           459: If the two addresses belong to the same ``community''
        !           460: (i.e., are compatible),
        !           461: then the DSA knows that it is safe to return a referral.
        !           462: If not,
        !           463: then the DSA realizes that,
        !           464: barring service controls to the contrary,
        !           465: it should chain.
        !           466: 
        !           467: Second,
        !           468: a DSA might wish to contact other DSAs.
        !           469: In this case,
        !           470: the DSA sees if the presentation address of the other DSA is in one of the
        !           471: communities of the local end-system.
        !           472: If so,
        !           473: the DSA knows that it is possible to chain operations to that DSA.
        !           474: Otherwise,
        !           475: in the absence of transport-level bridging,
        !           476: the DSA knows that it can not reach the other DSA.
        !           477: 
        !           478: To further complicate matters,
        !           479: Directory service may be offered by application entities using non-standard
        !           480: end-to-end protocol combinations
        !           481: (e.g., RFC1006/TCP \cite{TSAP.on.TCP}).
        !           482: There must be a means whereby the addresses associated with such entities can
        !           483: be stored in the Directory and subsequently interpreted by entities with
        !           484: knowledge of these non-standard communities.
        !           485: A mechanism for achieving this is defined in \cite{Interim.Addresses}.
        !           486: 
        !           487: Finally,
        !           488: the textual notation used to write presentation addresses should be
        !           489: unimportant.
        !           490: For expository (and local) purposes it is important to have a concise notation.
        !           491: \cite{String.Addresses} defines such a notation.
        !           492: 
        !           493: \subsection    {Objects}
        !           494: The abstract syntax of the classes and attributes described in this note are
        !           495: largely taken from the THORN naming architecture\cite{thorn-na},
        !           496: which was developed in the RARE community.
        !           497: These are optional extensions to what is defined in the X.500 recommendations.
        !           498: 
        !           499: \subsubsection {Object Class: friendlyCountry}
        !           500: In order to provide more intuitive identification of sovereign nations,
        !           501: a new object class,
        !           502: subordinate to the \verb"country" class,
        !           503: has been added.
        !           504: This has but a single mandatory attribute:
        !           505: \begin{describe}
        !           506: \item[friendlyCountryName:]
        !           507:                        gives a user-friendly rendition of the
        !           508:                        country's name (hence the term \verb"friendlyCountry").
        !           509: \end{describe}
        !           510: 
        !           511: \subsubsection {Object Class: domainRelatedObject}
        !           512: In order to experiment with mappings from user's Internet mailboxes into DNs,
        !           513: a means for inverting the Internet Domain Name System (DNS) is needed.
        !           514: A new object class, \verb"domainRelatedObject", is used for this purpose.
        !           515: There is one mandatory attribute:
        !           516: \begin{describe}
        !           517: \item[associatedDomain:]
        !           518:                        identifies a portion of the DNS which is conceptually
        !           519:                        located at an entry of this class.
        !           520: \end{describe}
        !           521: 
        !           522: \subsubsection {Object Class: quipuObject}
        !           523: In order to provide access control to the Directory,
        !           524: an \verb"accessControlList" attribute type,
        !           525: consisting of zero or more positive-access rules,
        !           526: has been defined.
        !           527: This is a attribute type is mandatory of objects within the \verb"quipuObject"
        !           528: class.
        !           529: Further,
        !           530: all entries occuring in an EDB must be of this class.
        !           531: 
        !           532: In addition,
        !           533: there are two optional attribute types.
        !           534: These are maintained automatically by the DSA:
        !           535: \begin{describe}
        !           536: \item[lastModifiedBy:]
        !           537:                        identifies the Directory entity which last modified
        !           538:                        this entry.
        !           539: 
        !           540: \item[lastModifiedTime:]
        !           541:                        identifies the time at which this entry was last
        !           542:                        modified.
        !           543: \end{describe}
        !           544: 
        !           545: \subsubsection {Object Class: quipuNonLeafObject}
        !           546: In order to provide navigational information for DSAs,
        !           547: all non-leaf objects are within the \verb"quipuNonLeafObject".
        !           548: There is one mandatory attribute type:
        !           549: \begin{describe}
        !           550: \item[masterDSA:]
        !           551:                        identifies the Directory entity which is responsible
        !           552:                        for maintaining the MASTER EDB for the children of
        !           553:                        this entry.
        !           554: \end{describe}
        !           555: In addition,
        !           556: there are two optional attribute types:
        !           557: \begin{describe}
        !           558: \item[slaveDSA:]
        !           559:                        identifies DSA(s) which also have authoritative
        !           560:                        information on the immediate children of a non-leaf
        !           561:                        entry.
        !           562: 
        !           563: \item[treeStructure:]
        !           564:                        if present, lists those object classes which the
        !           565:                        immediate children are allowed to take.
        !           566: \end{describe}
        !           567: 
        !           568: \subsubsection {Object Class: quipuDSA}
        !           569: It is necessary to introduce an additional object class,
        !           570: \verb"quipuDSA",
        !           571: to identify those DSAs
        !           572: which implement these refinements.
        !           573: There are several mandatory attribute types:
        !           574: \begin{describe}
        !           575: \item[eDBinfo:]
        !           576:                        Indicates how the DSA participates when propagating
        !           577:                        authoritative EDB information.
        !           578:                        Each attribute lists the DN of a non-leaf entry,
        !           579:                        along with (optionally) the DN of the upstream DSA
        !           580:                        which provides the associated EDB to this DSA,
        !           581:                        and with (optionally) a list of DNs of downstream DSAs
        !           582:                        to which this DSA provides the associated EDB.
        !           583:                        (The dual of the \verb"masterDSA" and \verb"slaveDSA"
        !           584:                        attribute types.)
        !           585: 
        !           586: \item[userPassword:]
        !           587:                        a string containing a password used by the DSA to
        !           588:                        authenticate itself to other DSAs.
        !           589:                        This attribute is not used for DSP authentication
        !           590:                        as it introduces a livelock problem.
        !           591:                        (When strong authentication matures,
        !           592:                        DSP authentication will be used instead.)
        !           593: 
        !           594: \item[manager:]
        !           595:                        the DN of an entry corresponding to the ``super-user''
        !           596:                        for this DSA.
        !           597: 
        !           598: \item[quipuVersion:]
        !           599:                        a simple string relating the version of the software
        !           600:                        being run by this DSA.
        !           601: \end{describe}
        !           602: along with the \verb"acl" attribute.
        !           603: There is also an optional one:
        !           604: \begin{describe}
        !           605: \item[description:]
        !           606:                        a textual description of the DSA.
        !           607: \end{describe}
        !           608: along with the \verb"lastModifiedBy" and \verb"lastModifiedTime" attribute
        !           609: types.
        !           610: 
        !           611: A DSA which implements these refinements also has the value
        !           612: \verb"quipuDSP" for its \verb"supportedApplicationContext" attribute.
        !           613: In addition to offering all of the DSP services on this application context,
        !           614: there is an additional operation,
        !           615: \verb"getEDB",
        !           616: which is used by a downstream DSA to request EDB information from an upstream
        !           617: DSA,
        !           618: if that EDB information has changed.
        !           619: 
        !           620: When a \verb"quipuDSA" must contact another DSA,
        !           621: and several choices are available,
        !           622: it favors those DSAs of the \verb"quipuDSA" class.
        !           623: For example,
        !           624:  caching can not occur without an understanding of the access control
        !           625: policy being applied to an entry.
        !           626: 
        !           627: \subsection    {Naming DSAs}
        !           628: If a \verb"quipuDSA" does not have information resident to satisfy a request,
        !           629: it identifies,
        !           630: to its local knowledge,
        !           631: the furthest non-leaf entry along the path to the desired entry.
        !           632: The \verb"masterDSA" and \verb"slaveDSA" attributes of this entry are
        !           633: consulted to derive the DNs of DSAs which are more likely to be able to
        !           634: perform the desired operation.
        !           635: 
        !           636: Obviously,
        !           637: in order to resolve the \verb"presentationAddress" attribute of the entries
        !           638: corresponding to the closer DSAs,
        !           639: additional lookup in the Directory is needed.
        !           640: As such,
        !           641: a DSA should be at least one level-higher in the DIT than any EDB for which it
        !           642: holds authoritative information.
        !           643: 
        !           644: To see why this is so,
        !           645: consider a DSA named:
        !           646: \begin{quote}\small\begin{verbatim}
        !           647: c=US@o=NYSERNet Inc.@cn=losing
        !           648: \end{verbatim}\end{quote}
        !           649: which,
        !           650: according to the entry for
        !           651: \begin{quote}\small\begin{verbatim}
        !           652: c=US@o=NYSERNet Inc.
        !           653: \end{verbatim}\end{quote}
        !           654: is a \verb"masterDSA",
        !           655: and that there are no \verb"slaveDSA"s for that entry.
        !           656: Now suppose another DSA,
        !           657: called ``naive'',
        !           658: with knowledge only of \verb"c=US",
        !           659: wishes to satisfy a request for a (possibly distant) child of this
        !           660: organization.
        !           661: In order to satisfy the request,
        !           662: the ``naive'' DSA must know the address of the ``losing'' DSA,
        !           663: which can obviously not be determined.
        !           664: 
        !           665: \subsection    {DSA Management}
        !           666: In order to provide a management capability for these refinements,
        !           667: a new attribute type, \verb"control", is defined for use over the DAP.
        !           668: When a DUA is bound as the DSA's manager,
        !           669: it may issue the modify operation to add a value of type \verb"control".
        !           670: This is interpreted by the DSA rather than being applied to the DIT.
        !           671: 
        !           672: The operations of interest are:
        !           673: \begin{itemize}
        !           674: \item  abort DSA;
        !           675: 
        !           676: \item  restart DSA;
        !           677: 
        !           678: \item  refresh EDB from local stable-storage;
        !           679: 
        !           680: \item  rewrite EDB to local stable-storage;
        !           681: 
        !           682: \item  mark EDB as read-only (lock EDB);
        !           683: 
        !           684: \item  unlock EDB;
        !           685: 
        !           686: \item  initiate EDB update procedure from upstream DSA
        !           687:        (either for all EDBs or a particular EDB).
        !           688: \end{itemize}
        !           689: For example,
        !           690: if it is necessary to make a substantive change to an EDB for which the DAP is
        !           691: unappropriate,
        !           692: a DSA manager tells the DSA to lock the EDB,
        !           693: edits the EDB on local stable-storage,
        !           694: tells the DSA re-read the EDB from local stable-storage,
        !           695: and then tells the DSA to unlock the EDB.
        !           696: 
        !           697: Intead,
        !           698: if a DUA issues a read for the \verb"control" attribute of an entry,
        !           699: then the value returned consists of a string:
        !           700: \begin{quote}\scriptsize\begin{verbatim}
        !           701: %d Master entries (in %d EDBs), %d Slave entries (in %d EDBs), %d Cached entries
        !           702: \end{verbatim}\end{quote}
        !           703: giving some very basic information about the EDBs/entries resident in the DSA.
        !           704: 
        !           705: \newpage
        !           706: \section       {Directory User Issues}
        !           707: An important task in any pilot project is to objectively focus the scope of
        !           708: the project:
        !           709: projects with ill-defined goals tend to fail.
        !           710: In the context of the pilot project,
        !           711: an explicit decision was made to focus solely on data relating to persons and
        !           712: organizations.
        !           713: Thus, although the pilot project software supports the full range of Directory
        !           714: objects and attributes, the objects supported in the pilot project are limited
        !           715: to:
        !           716: \begin{quote}\small\begin{tabular}{l}
        !           717: organizations\\ organizational units\\ organizational roles (e.g., ``Chair of
        !           718: the Department'')\\ localities (for those individuals not belonging to an
        !           719: organization)\\ persons
        !           720: \end{tabular}\end{quote}
        !           721: In addition to supporting the appropriate attribute types for these objects,
        !           722: some additional attributes were defined.  For example, users can store a
        !           723: facsimile image of themselves as their \verb"photo" attribute.
        !           724: 
        !           725: The list of standard attribute types supported in the pilot is shown in
        !           726: Table~\ref{attribute-std}.
        !           727: Table~\ref{attribute-new} shows additional attribute types which have been
        !           728: defined for use with the pilot.
        !           729: \tagtable[tp]{INT-1}{Supported Standard Attribute Types}{attribute-std}
        !           730: \tagtable[tp]{INT-2}{Additional Attribute Types}{attribute-new}
        !           731: 
        !           732: \subsection    {Objects}
        !           733: In the pilot project,
        !           734: all of the objects described above are modeled by the standard the
        !           735: corresponding object class,
        !           736: with one exception.
        !           737: 
        !           738: \subsubsection {Object Class: pilotPerson}
        !           739: The \verb"pilotPerson" object class is used to refer to a person in the pilot
        !           740: project.
        !           741: An entry belonging to this class may have any of several additional attributes:
        !           742: \begin{describe}
        !           743: \item[favouriteDrink:]
        !           744:                        which is a string describing the user's favorite drink.
        !           745: 
        !           746: \item[homePhone:]
        !           747:                which is a string describing the phone number of the object
        !           748:                using the international notation; e.g., ``+1 518-283-8860''.
        !           749: 
        !           750: \item[homePostalAddress:]
        !           751:                        which describes how physical mail is addressed to the
        !           752:                        person's home.
        !           753: 
        !           754: \item[info:]
        !           755:                        which is additional, textual information about the
        !           756:                        person.
        !           757: 
        !           758: \item[mobileTelephoneNumber:]
        !           759:                        which is a string describing the user's mobile
        !           760:                        number (e.g., for a cellular phone).
        !           761: 
        !           762: \item[otherMailbox:]
        !           763:                        which is the user's computer mail address
        !           764:                        in various domains.
        !           765:                        The string syntax of this attribute's value is special:
        !           766: \begin{quote}\small\begin{verbatim}
        !           767: <domain> $ <mailbox>
        !           768: \end{verbatim}\end{quote}
        !           769:                        e.g., ``internet \$ [email protected]''.
        !           770: The current list of mail domains are:
        !           771: applelink, bitnet, compuserve, genie, internet, mcimail, nasamail,
        !           772: preferred, and uucp.
        !           773: 
        !           774: \item[pagerTelephoneNumber:]
        !           775:                        which is a string describing the user's pager number.
        !           776: 
        !           777: \item[photo:]
        !           778:                        which is a facsimile bitmap of the user's face.
        !           779: 
        !           780: \item[rfc822Mailbox:]
        !           781:                        which is the user's computer mail address in the
        !           782:                        Internet.
        !           783: 
        !           784: \item[roomNumber:]
        !           785:                        which is a string describing where the person resides
        !           786:                        at the location.
        !           787: 
        !           788: \item[secretary:]
        !           789:                        which is the Distinguished Name of the user's
        !           790:                        administrative support.
        !           791: 
        !           792: \item[userClass:]
        !           793:                        which describe's the user's classification; e.g.,
        !           794:                        ``staff''.
        !           795: 
        !           796: \item[userid:]
        !           797:                        which is the user's login name; e.g., ``mrose''.
        !           798: \end{describe}
        !           799: Thus,
        !           800: Table~\ref{pilot-person} shows all the attributes that might be associated
        !           801: with a person.
        !           802: \tagtable[tp]{INT-3}{Attribute Types for the pilotPerson Object Class}%
        !           803:        {pilot-person}
        !           804: 
        !           805: \subsubsection {Other Object Classes}
        !           806: For completeness sake,
        !           807: Tables~\ref{friendlyCountry-attributes}
        !           808: through~\ref{organizationalRole-attributes} starting on
        !           809: page~\pageref{friendlyCountry-attributes} list the attributes supported for
        !           810: the standard object classes in use by the pilot.
        !           811: \tagtable[tp]{INT-4}{Attribute Types for the friendlyCountry Object Class}%
        !           812:        {friendlyCountry-attributes}
        !           813: \tagtable[tp]{INT-5}{Attribute Types for the organization Object Class}%
        !           814:        {organization-attributes}
        !           815: \tagtable[tp]{INT-6}{Attribute Types for the organizationalUnit Object Class}%
        !           816:        {organizationalUnit-attributes}
        !           817: \tagtable[tp]{INT-7}{Attribute Types for the locality Object Class}%
        !           818:        {locality-attributes}
        !           819: \tagtable[tp]{INT-8}{Attribute Types for the alias Object Class}%
        !           820:        {alias-attributes}
        !           821: \tagtable[tp]{INT-9}{Attribute Types for the organizationalRole Object Class}%
        !           822:        {organizationalRole-attributes}
        !           823: 
        !           824: \subsection    {Naming}
        !           825: In the pilot project,
        !           826: the structure of the DIT is straight-forward:
        !           827: at the root,
        !           828: countries and country-level DSAs reside;
        !           829: in \verb"c=US",
        !           830: organizations and organizational-level DSAs reside.
        !           831: Beyond this,
        !           832: the administrators of the \verb"c=US" DMD are not concerned with how
        !           833: individual organizations are internally structured.
        !           834: 
        !           835: In addition to this simple structure,
        !           836: to aid searching in North America,
        !           837: there is also a top-level locality,
        !           838: \verb"l=North America",
        !           839: which contains aliases to all organizations in the \verb"c=US" and \verb"c=CA"
        !           840: DMDs,
        !           841: e.g.,
        !           842: \begin{quote}\small\begin{verbatim}
        !           843: @l=North America@o=NYSERNet Inc.%l=US
        !           844: \end{verbatim}\end{quote}
        !           845: which has an \verb"aliasedObjectName" attribute value of
        !           846: \begin{quote}\small\begin{verbatim}
        !           847: @c=US@o=NYSERNet Inc.
        !           848: \end{verbatim}\end{quote}
        !           849: 
        !           850: The tasks of the country-level DSAs
        !           851: (there are currently three for \verb"c=US")
        !           852: are:
        !           853: \begin{itemize}
        !           854: \item  provide authoritative information on the root and \verb"c=US"
        !           855:        for replication purposes to organizational-level DSAs;
        !           856:        and,
        !           857: 
        !           858: \item  act as a conduit for chaining to/from foreign DMDs.
        !           859: \end{itemize}
        !           860: The former task is to allow high replication of top-level information to speed
        !           861: searching.
        !           862: The latter task is to permit a means of harmonizing between different
        !           863: end-to-end protocol combinations.
        !           864: 
        !           865: The RDN for organizations is the full name.
        !           866: However,
        !           867: to aid searching,
        !           868: other name forms are allowed as attribute values.
        !           869: For example,
        !           870: the entry 
        !           871: \begin{quote}\small\begin{verbatim}
        !           872: @c=US@o=Performance Systems International
        !           873: \end{verbatim}\end{quote}
        !           874: might have an additional attribute value of ``PSI'' which is not used in its
        !           875: RDN.
        !           876: Because the Directory searches on the basis of attribute values and not RDNs,
        !           877: a user supplying a search string of ``PSI'' will find (at least) the right
        !           878: entry.
        !           879: 
        !           880: \subsection    {Searching}
        !           881: The single most important aspect of the user interface is to relate the naming
        !           882: architecture to a search algorithm.
        !           883: The interaction model is simple.
        !           884: The user provides the interface with:
        !           885: \begin{enumerate}
        !           886: \item  (optionally) the kind of object being looked for;
        !           887: 
        !           888: \item  naming information about where the object resides;
        !           889:        and,
        !           890: 
        !           891: \item  (optionally) qualifying information on the object.
        !           892: \end{enumerate}
        !           893: Based on the kind of object being looked for,
        !           894: the user interface constructs a ``basic'' filter:
        !           895: \[\begin{tabular}{|r|l|}
        !           896: \hline
        !           897: \multicolumn{1}{|c|}{\bf What}&
        !           898:                \multicolumn{1}{|c|}{\bf Basic Filter}\\
        !           899: \hline
        !           900: default&       \tt cn$\approx$X $\lor$ sn$\approx$X $\lor$ mail=X@*\\
        !           901: organization&  \tt o$\approx$X\\
        !           902: unit&          \tt ou$\approx$X\\
        !           903: role&          \tt cn$\approx$X\\
        !           904: locality&      \tt l$\approx$X\\
        !           905: person&                \tt sn$\approx$X $\lor$ mail=X@*\\
        !           906: (or) person&   \tt cn$\approx$X\\
        !           907: \hline
        !           908: \end{tabular}\]
        !           909: where ``$\approx$'' indicates either wildcard, imprecise, or exact matching,
        !           910: based on user-preference,
        !           911: and ``$=$'' indicates exact matching.
        !           912: If wildcarding is desired,
        !           913: but the user does not explicitly specify the substrings,
        !           914: the string ``\verb"*X*"'' is used.
        !           915: 
        !           916: After the basic filter is constructed,
        !           917: if the user supplied qualifying information on the object,
        !           918: an ``info'' filter is appended to the basic filter using logical-AND.
        !           919: \[\begin{tabular}{|r|l|}
        !           920: \hline
        !           921: \multicolumn{1}{|c|}{\bf What}&
        !           922:                \multicolumn{1}{|c|}{\bf Info Filter}\\
        !           923: \hline
        !           924: organization&  \tt businessCategory=X\\
        !           925: unit&          \tt businessCategory=X\\
        !           926: role&          \tt title=X\\
        !           927: person&                \tt title=X\\
        !           928: \hline
        !           929: \end{tabular}\]
        !           930: Next the depth of search must be determined:
        !           931: \[\begin{tabular}{|r|l|}
        !           932: \hline
        !           933: \multicolumn{1}{|c|}{\bf What}&
        !           934:                \multicolumn{1}{|c|}{\bf Depth}\\
        !           935: \hline
        !           936: default&       whole-subtree\\
        !           937: organization&  single-level\\
        !           938: unit&          whole-subtree\\
        !           939: role&          whole-subtree\\
        !           940: locality&      single-level\\
        !           941: person&                whole-subtree\\
        !           942: \hline
        !           943: \end{tabular}\]
        !           944: Finally,
        !           945: a search is performed with these service controls:
        !           946: \begin{quote}\small\begin{verbatim}
        !           947: -preferchaining
        !           948: -dontdereferencealias
        !           949: -notimelimit
        !           950: -nosizelimit
        !           951: -nosearchaliases
        !           952: -types rfc822Mailbox telephoneNumber aliasedObjectName
        !           953: -values
        !           954: \end{verbatim}\end{quote}
        !           955: The last two lines are probably somewhat cryptic.
        !           956: They indicate that for all matched entries,
        !           957: the DSA should return any values associated with those three attribute types.
        !           958: 
        !           959: The task of the user interface is simple:
        !           960: \begin{itemize}
        !           961: \item  if no matches are found,
        !           962:        it reports this to the user;
        !           963: 
        !           964: \item  if exactly one match is found,
        !           965:        then it reads this entry and displays its to the user;
        !           966:        otherwise,
        !           967: 
        !           968: \item  if more than one match is found,
        !           969:        the user interface displays each entry in a concise one-line format
        !           970:        containing either the mailbox or telephone number.
        !           971:        This aids the user in determining which entry might be the one
        !           972:        actually desired.
        !           973:        The user can then direct the interface to expand that particular entry.
        !           974: \end{itemize}
        !           975: If an entry is read,
        !           976: then the service controls are:
        !           977: \begin{quote}\small\begin{verbatim}
        !           978: -preferchaining
        !           979: -dontdereferencealias
        !           980: -notimelimit
        !           981: -nosizelimit
        !           982: \end{verbatim}\end{quote}
        !           983: 
        !           984: All that need be explained now is how the ``baseobject'' for the search is
        !           985: determined.
        !           986: Recall that the user might have supplied something called
        !           987: \begin{quote}
        !           988: ``naming information where the user resides''
        !           989: \end{quote}
        !           990: to the interface.
        !           991: For each kind of object,
        !           992: the user interface maintains a default area (DN) used for searching.
        !           993: These are set by the system administrator,
        !           994: e.g.,
        !           995: \[\begin{tabular}{|r|l|}
        !           996: \hline
        !           997: \multicolumn{1}{|c|}{\bf What}&
        !           998:                \multicolumn{1}{|c|}{\bf Base}\\
        !           999: \hline
        !          1000: default&       \tt @c=US@o=NYSERNet Inc.\\
        !          1001: organization&  \tt @l=North America\\
        !          1002: unit&          \tt @c=US@o=NYSERNet Inc.\\
        !          1003: role&          \tt @c=US@o=NYSERNet Inc.\\
        !          1004: locality&      \tt @c=US\\
        !          1005: person&                \tt @c=US@o=NYSERNet Inc.\\
        !          1006: \hline
        !          1007: \end{tabular}\]
        !          1008: in order to provide sensible searching.
        !          1009: The user may override this by supplying additional naming information.
        !          1010: 
        !          1011: So,
        !          1012: the user interface decides if the additional information was for an
        !          1013: organization, organizational unit, or locality,
        !          1014: constructs a basic filter, and performs a search.
        !          1015: \begin{itemize}
        !          1016: \item  if no matches are found,
        !          1017:        it reports this to the user;
        !          1018: 
        !          1019: \item  if exactly one match is found,
        !          1020:        then it uses that DN as the baseobject for the search;
        !          1021:        otherwise,
        !          1022: 
        !          1023: \item  if more than one match is found,
        !          1024:        the user interface displays each entry in a concise one-line format
        !          1025:        containing either the mailbox or telephone number.
        !          1026:        This aids the user in determining which entry might be the one
        !          1027:        actually desired.
        !          1028:        The user can then direct the interface to continue searching in the
        !          1029:        appropriate areas.
        !          1030: \end{itemize}
        !          1031: Note that prior to using one of these area entries as a baseobject,
        !          1032: the user interface sees if the search returned an \verb"aliasedObjectName"
        !          1033: attribute for the area.
        !          1034: If so,
        !          1035: then the value of this attribute is used for the baseobject.
        !          1036: This is used,
        !          1037: for example,
        !          1038: when the areas being searched are under \verb"l=North America".
        !          1039: 
        !          1040: \subsection    {Browsing}
        !          1041: To browse the White Pages,
        !          1042: a listing capability is needed.
        !          1043: Rather than use the Directory list operation,
        !          1044: it is usually more direct to perform a single-level search looking for any
        !          1045: entry which has
        !          1046: \begin{quote}\small\tt
        !          1047: objectClass$\neq$dSA
        !          1048: \end{quote}
        !          1049: 
        !          1050: \subsection    {Searching Revisited}
        !          1051: Actually,
        !          1052: there are a couple of additional searching capabilities provided by the White
        !          1053: Pages.
        !          1054: 
        !          1055: Although its use is discouraged
        !          1056: interfaces should be able to accept a DN as typed by a user for either naming
        !          1057: or area information.
        !          1058: 
        !          1059: If the naming information given by the user appears to be an Internet-style
        !          1060: mailbox,
        !          1061: then an entirely different search algorithm is used.
        !          1062: Suppose the user enters ``\verb"X"'' in the form:
        !          1063: \begin{quote}\small\begin{verbatim}
        !          1064: local@domain
        !          1065: \end{verbatim}\end{quote}
        !          1066: and either there is wildcarding present in \verb"domain",
        !          1067: or the user specifies area information.
        !          1068: In this case,
        !          1069: a search filter is constructed,
        !          1070: one of
        !          1071: \begin{quote}\small\begin{verbatim}
        !          1072: rfc822Mailbox=*@domain
        !          1073: \end{verbatim}\end{quote}
        !          1074: if no \verb"local" portion was given in ``\verb"X"'';
        !          1075: \begin{quote}\small\begin{verbatim}
        !          1076: rfc822Mailbox=local@*
        !          1077: \end{verbatim}\end{quote}
        !          1078: if no \verb"domain" portion was given in ``\verb"X"'';
        !          1079: or,
        !          1080: \begin{quote}\small\tt
        !          1081: rfc822Mailbox=X $\lor$ otherMailbox="internet \$ X"
        !          1082: \end{quote}
        !          1083: otherwise,
        !          1084: and a whole-subtree search is done.
        !          1085: 
        !          1086: Otherwise,
        !          1087: the user does not specify area information and there is no wildcarding present
        !          1088: in \verb"domain",
        !          1089: the user interface performs an special search to identify those areas likely
        !          1090: to contain the mailbox.
        !          1091: For each DN in the list of areas,
        !          1092: the interface uses that DN as a base object for a whole-subtree search using
        !          1093: the filter:
        !          1094: \begin{quote}\small\tt
        !          1095: rfc822Mailbox=X $\lor$ otherMailbox="internet \$ X"
        !          1096: \end{quote}
        !          1097: So,
        !          1098: how is this list of areas generated?
        !          1099: The user-interface repeatedly performs single-level searches looking for
        !          1100: entries which have an \verb"associatedDomain" value equal to the domain in
        !          1101: question.
        !          1102: If a match is not found,
        !          1103: then a sub-domain is stripped off,
        !          1104: and the search is tried again.
        !          1105: If one or matches are found,
        !          1106: the routine recurses and searching begins anew.
        !          1107: In this fashion,
        !          1108: the routine finds the deepest entries in the DIT associated information about
        !          1109: a (sub-)domain of the DNS.
        !          1110: 
        !          1111: \newpage
        !          1112: \section       {Acknowledgements}
        !          1113: The NYSERNet/PSI White Pages Pilot Project builds on the work of many others:
        !          1114: \begin{itemize}
        !          1115: \item  At the core,
        !          1116:        the ISODE provides the programmatic infrastructure for OSI
        !          1117:        applications.
        !          1118:        So many people have contributed to the ISODE that it is presumptuous
        !          1119:        to attempt to list them.
        !          1120: 
        !          1121: \item  The QUIPU directory from University College London,
        !          1122:        designed by Stephen E.~Kille and programmed primarily by
        !          1123:        Colin J.~Robbins, form the heart of the pilot's functionality.
        !          1124: 
        !          1125: \item  Although NYSERNet and PSI have devoted considerable resources to the
        !          1126:        hardening of QUIPU,
        !          1127:        it should be noted that UCL has been responsible for the vast majority
        !          1128:        of improvements and fixes.
        !          1129: 
        !          1130: \item  The white pages abstraction was designed primarily at NYSERNet with
        !          1131:        the help of several experts: Kille, Robbins, and Einar Stefferud.
        !          1132: 
        !          1133: \item  Geoffrey S.~Goodfellow was kind enough to be the alpha tester for the
        !          1134:        white pages abstraction.
        !          1135: 
        !          1136: \item  The white pages administrators have been patient as the software
        !          1137:        twitches.
        !          1138: 
        !          1139: \item  Finally,
        !          1140:        it should be noted that none of this would be possible if it
        !          1141:        weren't for the excellent end-to-end services provided by the Internet
        !          1142:        suite of protocols (namely the TCP and the IP).
        !          1143: \end{itemize}
        !          1144: 
        !          1145: \newpage
        !          1146: \section*      {Appendix: Differences from NIST OIW Agreements}
        !          1147: Although QUIPU attempts to be faithful to various Directory implementation
        !          1148: profiles,
        !          1149: it is not entirely successful.
        !          1150: QUIPU is believed to be aligned with with the NIST OIW Agreements on the
        !          1151: Directory,
        !          1152: with these exceptions:
        !          1153: \begin{itemize}
        !          1154: \item  QUIPU doesn't enforce the bounds constraints on attributes, filters or 
        !          1155: APDU size.
        !          1156: 
        !          1157: \item  QUIPU does not reject T.61 string formatting characters.
        !          1158: 
        !          1159: \item  QUIPU does not check to if the value of the \verb"countryName"
        !          1160: attribute is defined in ISO3166.
        !          1161: 
        !          1162: \item  If a DN is supplied with no password in an unprotected simple bind,
        !          1163: then QUIPU does not check to see if the DN exists.
        !          1164: 
        !          1165: \item  When comparing attribute of UTCtime syntax,
        !          1166: if the seconds field is omitted,
        !          1167: then QUIPU does not perform the match correctly.
        !          1168: (i.e.,
        !          1169: the seconds field in the attribute values should be ignored, but are not).
        !          1170: 
        !          1171: \item  QUIPU always supplies the optional Chaining argument \verb"originator"
        !          1172: even if the CommonArgument \verb"requestor" is used.
        !          1173: 
        !          1174: \item  QUIPU always supplies the optional Chaining argument \verb"target"
        !          1175: even if the base object in the DAP arguments is the same.
        !          1176: \end{itemize}

unix.superglobalmegacorp.com

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