|
|
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.