|
|
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}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.