|
|
1.1 root 1: % run this through LaTeX with the appropriate wrapper
2:
3: \chapter{The OSI Directory}
4: \label{dir_model}
5:
6: This Chapter is designed as a quick introduction to the model of X.500
7: directories, to provide the reader with sufficient information to be able to
8: understand the following Chapters.
9:
10: \section {The Model}
11: The OSI Directory is intended to support human user querying, allowing
12: users to find, {\em inter alia}, telephone and address information of
13: organisations and other users.
14:
15: It is also intended to support electronic
16: communication such as message handling systems and file transfer.
17: The Directory provides name to address mapping to support, for example, OSI
18: presentation address look-ups. Message handling systems will be provided with
19: support for user-friendly naming, security and
20: distribution lists.
21:
22: \tagfigure[tp]{q-dit}{Example DIT}{qfig:dit}
23:
24: In essence the Directory is a database with certain key characteristics.
25: \begin{itemize}
26: \item
27: The Directory is intended to be very large and highly distributed. It is
28: anticipated that the Directory will be distributed largely on an
29: organisational basis.
30: \item
31: The Directory is hierarchically structured, the entries being arranged in
32: the form of a tree called the Directory Information Tree (DIT).
33: An example DIT is shown in Figure~\ref{qfig:dit}.
34: Entries near the root of the tree will usually represent
35: objects such as countries (e.g., `GB') and organisations (e.g., `University
36: College London'), entries at or near the leaves
37: of the tree will represent people (e.g., `Colin Robbins'),
38: equipment or application processes.
39:
40: \item
41: Read and search operations will dominate over modification operations.
42: \item
43: Temporary inconsistencies in the data are acceptable. This greatly
44: facilitates the replication of data in the Directory by obviating concerns
45: about record locking and atomic operations.
46: \end{itemize}
47:
48:
49: \section{Information Representation}
50: There are various structures needed to represent the data required in the
51: directory database. These are described
52: briefly below.
53:
54: \subsection {Object Identifiers}
55: An important part of the OSI world is the Object Identifier (OID).
56:
57: An OID is a hierarchy of numbers used to uniquely describe various objects
58: within the OSI world: for example, ``1.0.8571.1.1'' describes the FTAM
59: protocol; ``0.9.2342.19200300.99.1''
60: defines a QUIPU Attribute Type.
61: The strings of numbers look ``horrible'' and can be difficult to remember.
62: As such, QUIPU provides a mapping from OIDs to ``strings'', so that
63: easy to remember strings can be used in place of the numeric OIDs, for
64: example ``iso ftam'' or ``quipuAttributeType''.
65:
66: The mapping are defined in a set of oidtables which are discussed
67: in Section~\ref{oidtables}.
68:
69: \subsection {Attributes}
70:
71: \tagfigure[tp]{q-entry}{Structure of an Entry}{qfig:entry}
72:
73: The directory holds information about various entities, such as a person or
74: an organisation. The information is held in an information object,
75: typically referred to as an {\em entry}.
76: An entry consists of a set of one of more attributes
77: (see Figure~\ref{qfig:entry}).
78:
79: An attribute is represented by an attribute type, and set of attribute values.
80: An attribute with a single value is represented as follows:-
81: \begin{quote}
82: $<$Attribute Type$>$ ``='' $<$Attribute Value$>$
83: \end{quote}
84: The attribute type can either be a string (which must be in the attribute
85: oidtable --- see Section~\ref{oidtables}) or the OID in a dotted decimal
86: format.
87:
88: Each attribute value is represented by a string, the format of the attribute value
89: depends upon the
90: syntax defined in the oidtables, but in general will be a string.
91:
92: So
93: \begin{quote}\begin{verbatim}
94: roomNumber = G24
95: 2.5.4.20 = 453-5674
96: commonName = Colin Robbins & Colin John Robbins
97: photo = {ASN} 0308207b4001488001fd...
98: \end{verbatim}\end{quote}
99: is an example of an entry, with 4 attributes. The ``commonName'' attribute
100: is multi-valued,
101: with the two values separated by the ``\&'' symbol.
102: Notice how the ``photo'' attribute does not have a specific string format,
103: so a hexadecimal ``ASN.1'' representation is used.
104: ``2.5.4.20'' is an Object Identifier represented in numeric form.
105:
106:
107: \subsection {Names}
108: \label{quipu_name}
109: Within an entry, some attributes (generally one) have special importance,
110: and are called {\em distinguished attributes}. The collection of these
111: attributes form the {\em Relative Distinguished Name}
112: (RDN).\index{RDN}
113:
114: An RDN is usually represented by a single valued attribute, thus
115: \begin{quote} \begin{verbatim}
116: commonName = "Alan Turland"
117: organization = "University College London"
118: \end{verbatim}\end{quote}
119: are valid RDNs.
120:
121: An RDN made up of multiple distinguished attributes uses the \verb+%+ symbol
122: to separate the values, for
123: example
124: \begin{quote} \begin{verbatim}
125: userid = quipu % commonName = "Colin Robbins"
126: \end{verbatim}\end{quote}
127:
128: A {\em Distinguished Name} (DN) is the sequence of RDNs that uniquely define
129: a node in the Directory Information Tree (DIT).
130: These are represented as follows:-
131: \begin{quote}
132: RDN [ ``@'' RDN \ldots]
133: \end{quote}
134: So
135: \begin{quote}\small\begin{verbatim}
136: countryName = GB @ organization = University College London
137: \end{verbatim}\end{quote}
138: is an example of a valid DN.
139:
140: In some cases an RDN or DN is specified relative to a node other than the
141: root in the DIT.
142: To be unambiguous a DN may be rooted using a leading ``@'', for example
143: \begin{quote}\small\begin{verbatim}
144: @ countryName = GB @ organization = University College London
145: \end{verbatim}\end{quote}
146:
147:
148: \section{Directory User Agent}
149: The Directory User Agent (DUA) is the entity you as a user will connect to,
150: it will help you formulate your queries, and then pass them to the
151: Directory, and show you the results.
152:
153: The X.500 standard defines only the protocol the DUA should use when taking
154: to the Directory, and as such DUAs come in many varieties, but the basic
155: concepts are the same.
156:
157: A DUA talks to the directory using the Directory Access Protocol
158: (DAP)\index{DAP}.
159:
160: The following Chapters of this Part of the Manual describe five such
161: interfaces:
162: \begin{describe}
163: \item [dish:] The DIrectory SHell\\
164: This interface give a user full access to the DAP, and
165: as such may be complex for novice users.
166: \item [sid:] Steve's Interface to Dish\\
167: A set of scripts that make Dish usable for novice users.
168: \item [fred:] FRont End to Dish\\
169: Fred provides a White Pages User Interface, which hides most
170: of the complexity of the OSI directory.
171: \item [widget:] A curses based windowing interface,
172: \item [sunint:] A suntools based windowing interface.
173: \end{describe}
174:
175: We should point out here that
176: Widget and Sunint are not considered fully developed interfaces,
177: but are included to give would be DUA developers examples of how
178: the procedural interface discussed in Section~\ref{proc_model} can be used.
179:
180:
181: \section{Directory System Agent}
182:
183: \tagfigure[tp]{q-dsa}{DUA/DSA Interaction}{qfig:dsa}
184:
185: The Directory System Agent (DSA) is the entity that generates the results to
186: requests from a DUA.
187: It may handle the request itself, ask another DSA (using the Directory System
188: Protocol\index{DSP}), or advise the DUA to
189: contact another DSA (see Figure~\ref{qfig:dsa}).
190: This part of the directory is discussed more in Parts III and V of this
191: manual. Here we shall concentrate on the DUA.
192:
193:
194: \chapter{DISH}
195: \label{dish}
196:
197: This Chapter describes DISH, a DIrectory SHell interface to the Directory.
198: It provides an interface to the Directory in an similar manner
199: to the way that \MH/ provides an interface to a message handling systems.
200: As with \MH/, dish can either be invoked as a single process with the full
201: repertoire of commands built in, or it can be invoked by individual shell
202: commands.
203: This latter style allows dish to be used with others tools to provide very
204: flexible access to the directory.
205:
206: Dish provides a very powerful interface onto the Directory and gives a user
207: access to the full Directory Access Protocol(DAP).
208: The price of such comprehensiveness is complexity.
209: Dish has a large number of flags, and both the syntax and volume of typing
210: required can seem forbidding to the novice user.
211: One compromise solution is to use dish to build interfaces which are easier
212: to use and more intuitive, for example SID (see Chapter~\ref{DUA:sid}).
213:
214: To run DISH in interactive mode invoke \man dish(1c), then issue any of the
215: commands described in Sections~\ref{dish_start} through \ref{sequences}.
216: This mode of operation is especially useful for novice users.
217: The process of connecting to the Directory -- binding --
218: takes place automatically when the program is invoked, and an unbind
219: is issued when you quit.
220:
221: The arguments to \man dish(1c) are the same as for bind (see
222: Section~\ref{dish_bind}), with the addition of a `-pipe' flag
223: which is used to start dish in ``shell'' mode (see Section~\ref{dish_shell})
224: (NOTE: ``dish -pipe \&'' has the same effect as the shell command ``bind'').
225:
226: \section {Commands}
227:
228: Each of the DISH commands described below has a large number of valid flags,
229: the full names of the flags are given below, however the shortest unique
230: name is sufficient to select the flag.
231: Similarly, when dish is used interactively the shortest unique name is taken
232: for the command name (e.g. ``l'' for ``list'').
233: There is an exception in that ``sh'' is interpreted as ``showentry'',
234: ``shown'' must be typed for ``showname''.
235:
236: The additional flag \tt -help \rm \ can be specified with
237: every command to get limited runtime help.
238:
239: \subsection{Moveto}
240: \label{dish_start}
241: With nearly every command it is possible to supply the distinguished name of
242: the object you want to reference.
243: In the syntax this is represented by
244: \begin{verbatim}
245: <object>.
246: \end{verbatim}
247: An initial `\tt @\rm ' in an object description specifies that the name
248: is relative to the root of the Directory Information Tree (DIT),
249: otherwise the name is relative to the current
250: position in the DIT.
251: The special name component `..' is used to mean `one
252: position up' from the current position.
253: Some examples of valid names and their interpretation relative to
254: how a distinguished name is built up are shown below by the following
255: sequence of names:
256:
257: \begin{description}
258:
259: \item [\verb+"@c=GB@o=University College London@ou=Computer Science"+:]
260: The specified object is \\
261: ``c= GB @ o= University College London @ ou= Computer Science''.
262:
263: \item [\verb+"cn=Colin Robbins"+:]
264: describes the object
265: cn=Colin Robbins relative to the current
266: position (``c= GB @ o= University College London @ ou= Computer Science @ cn= Colin Robbins'').
267: Spaces in a name will be seen as the start of a separate
268: argument by the shell, so the name must be quoted.
269:
270: \item [\verb+"..@cn=Steve Titcombe"+:]
271: describes the entry
272: cn=Steve Titcombe at the same level
273: in the DIT as the current position (``c= GB @ o= University College London @
274: ou= Computer Science @ cn= Steve Titcombe'').
275:
276: \end{description}
277:
278: Objects can also be expressed in the form of sequence numbers and nicknames.
279: See sections \ref{sequences} and \ref{quipurc}.
280:
281: When you specify an object, the current position in the DIT is not changed.
282: To change the current position you should use
283: \begin{verbatim}
284: moveto [-[no]pwd] [-[no]check]
285: [-sequence <name>] [-nosequence] <position>
286: \end{verbatim}
287:
288: The \tt -pwd \rm \ flag tells moveto to print the current position in the
289: DIT.
290: The current position can also be changed with the \tt -move\rm \ flag to
291: showentry and list (see Sections~\ref{dua:list} and ~\ref{dua:show}).
292:
293: The \tt -nocheck \rm \ flag tells moveto NOT to check the entry exists,
294: normally, moveto will invoke a `\verb"read"' to check the named entry exists.
295:
296:
297: \subsection{Showentry}
298: \label{dua:show}
299:
300: \begin{verbatim}
301: showentry [<object>] [-[no]cache] [-[no]name]
302: [-[no]move] [<any of the read arguments>]
303: \end{verbatim}
304:
305: Showentry will show the distinguished
306: name of the current entry (unless \tt -noname\rm \ is specified),
307: followed by each attribute
308: specified in the read arguments.
309: If the `\tt -all\rm ' is given all attributes will be shown.
310: If insufficient information resides in the local cache, a `\tt read\rm ' will
311: be performed.
312:
313: \tt -cache\rm \ is used the tell showentry to use cached information only ---
314: do not issue a read operation.
315: This is used to see what the DUA has cached, and then get information when
316: the local DSA is unavailable.
317:
318: \tt -nocache\rm \ is used to enforce a directory read, this is used to update the cache
319: directly.
320:
321: \tt -move\rm \ is used to tell dish to change the current position in the DIT
322: to the object specified.
323:
324: \subsubsection{read flags}
325:
326: These flags are used by showentry(1), showname(1), search(1) and modify(1).
327:
328: \begin{quote}\begin{verbatim}
329: [-[no]types <attribute-type> *] [-[no]all]
330: [-[no]value] [-[no]show]
331: [-[no]key] [-edb]
332: [-proc <syntax> <process>]
333: [-sequence <name>] [-nosequence]
334: \end{verbatim}\end{quote}
335:
336: The \tt all\rm \ flag request that all attribute are read (default).
337:
338: The \tt value\rm \ flag reads the attribute value, which is the default,
339: the inverse is to read the attribute types only.
340:
341: The \tt novalue\rm \ flag says print the attribute types only.
342:
343: The \tt show\rm \ flag displays the information read.
344:
345: The \tt key\rm \ flag determines whether the key (attribute type) will
346: be shown along with the attribute value.
347:
348: The \tt edb\rm \ flag requests that the data is displayed in ``EDB'' format,
349: that is, a format which can be used in QUIPU data files.
350:
351: The \tt type\rm \ flag requests that only the supplied attributes are
352: read from the DSA, the inverse of this \tt -notype \rm \ does not
353: prevent the attributes being read (as there is no
354: easy mechanism to perform this within X.500),
355: but it does stop them being shown.
356:
357: The \tt proc\rm \ flag is used to instruct the display routines to uses an
358: external process to display the attribute.
359: For example if you have a process that displays presentation elements
360: representing ``OID's'' in a particular
361: way, then you can use
362: \begin{quote}\begin{verbatim}
363: showentry -proc OID /usr/bin/oid_display_process
364: \end{verbatim}\end{quote}
365: then all OIDs will be displayed using ``/usr/bin/oid\_display\_process''.
366:
367: The \tt sequence\rm \ flag is used to control sequences, sequences
368: are described in Section~\ref{sequences}.
369:
370: \subsection{List}
371: \label{dua:list}
372: \begin{verbatim}
373: list [<object>] [-nocache] [-noshow] [-[no]move]
374: \end{verbatim}
375: This function displays all the children below your current position.
376:
377: \tt -nocache\rm \ tells list to re-read the directory - do not use cached information.
378:
379: \tt -noshow\rm \ tells list not to display the names found, but
380: still construct sequences (see section \ref{sequences}).
381:
382: \tt -move\rm \ is used to tell dish to change the current position in the DIT
383: to the object specified.
384:
385: \subsection{Search}
386: \label{search}
387:
388: \begin{verbatim}
389: search [[-object] <object>]
390: [-baseobject] [-singlelevel] [-subtree]
391: [[-filter] <filter>]
392: [-[no]relative] [-[no]searchaliases]
393: [-[no]partial] [-hitone]
394: [<any of the read arguments>]
395: \end{verbatim}
396:
397: Search the DIT starting at the object specified, for entries that match a
398: filter.
399: When an entry is found to match the filter, its distinguished name is printed
400: unless a `\tt-show\rm ' option is
401: specified, when the entry is displayed.
402:
403: If no filter is specified the default filter (which matches any object in
404: the DIT) is used.
405:
406: If no flags are given, then the sole allowed parameter is taken to be the
407: filter (NOT the base object as in ALL the other commands).
408: The flags \tt -filter\rm \ and \tt -object \rm \ are supplied to allow the
409: user to specify if both a filter and base object (NOTE only one need be
410: flagged).
411: For example, the following are all valid search commands
412: \begin{quote}\begin{verbatim}
413: search
414: search <filter>
415: search -filter <filter>
416: search -object <object>
417: search -filter <filter> -object <object>
418: search <filter> -object <object>
419: search -filter <filter> <object>
420: \end{verbatim}\end{quote}
421: Whereas
422: \begin{quote}\begin{verbatim}
423: search <object> (interpreted as a filter !)
424: search <filter> <object>
425: \end{verbatim}\end{quote}
426: are not valid.
427:
428: The flag `\tt -singlelevel\rm ' will search all the children
429: from the current position.
430: The flag `\tt -subtree\rm ' searches all the
431: levels below the current position recursively.
432: The default is
433: `\tt -singlelevel\rm '.
434:
435: For example:-
436: \begin{verbatim}
437: search -object
438: "@c=GB@o=University College London@ou=Computer Science"
439: -subtree -filter "cn=colin robbins" -type telephonenumber -show
440: \end{verbatim}
441: will search the subtree below `c=GB @ o=University College London @ ou=Computer Science' for
442: an exact match of ``colin robbins'', and call showentry to
443: display the {\em telephonenumber} attribute.
444:
445: The \tt -norelative\rm \ flag is used to tell \verb"showname" to print the full
446: distinguished name of the results, otherwise the name relative to the current
447: position is printed.
448:
449: The \tt -[no]searchaliases\rm \ flag direct the search as to whether aliases
450: encountered in the search should be dereferenced and searched.
451:
452: The \tt -hitone\rm \ flag is used to tell Dish to consider it an error if
453: the search returns more than one entry. This is particularly useful when
454: using Dish from shell scripts (see Section~\ref{dish_shell}).
455:
456: From time to time, search will not be able to do the entire search, and will
457: return partial results, the \tt -nopartial\rm \ directs dish not to print
458: the partial result information. To see the full set of partial results, both
459: \tt -partial\rm \ and \tt -show\rm \ are needed, otherwise a summary is
460: printed.
461:
462: \subsubsection{More on Matching}
463:
464: As well as an exact equality match, the
465: following types of match can be specified
466: \begin{quote}\begin{verbatim}
467: ~= Approximately equals.
468: >= Greater than or equal.
469: <= Less than or equal.
470: \end{verbatim}\end{quote}
471:
472: When searching for an exact match (`=')
473: the `\tt *\rm ' character is used as a wildcard, and a substring
474: match takes place (unless only a `\tt *\rm ' is specified, when a {\em
475: presence} match is used - hence any entry
476: containing that attribute will be matched).
477:
478: Filter items can be linked with {\em and} `\tt \&\rm ', or {\em or}
479: `\tt $|$\rm '. Brackets `\tt( )\rm '
480: should be used to enforce the boolean
481: ordering of the expressions, otherwise the evaluation is left to right.
482: A {\em not} `\tt !\rm ' can be used to specify the boolean not operator.
483:
484: If a filter does not have a type specified e.g., ``-filter steve'',
485: then an approximate match for the specified common name is assumed
486: (in this case ``-filter cn$\tilde{\ }$=steve'' is assumed).
487:
488: A more complex example of a filter
489: that searches for anybody whose is a member of staff
490: or a student, who has a ``drink'' attribute,
491: whose name approximately matches ``steve'', but whose surname is
492: not ``Kille'':-
493: \begin{verbatim}
494: cn~=steve & (userClass = staff | userClass = student) &
495: (! surname = Kille) & drink = *
496: \end{verbatim}
497:
498: A list of all the attributes is given in
499: Chapter~\ref{syntaxes}, together with a description of the type matching of
500: matching allowed.
501:
502: \subsection {Add Entry}
503: \label{dish:add}
504:
505: \begin{verbatim}
506: add [<object>] [-draft <draft> [-noedit]] [-newdraft]
507: [-template <draft>] [-objectclass <objectclass>]
508: \end{verbatim}
509:
510: Add is used to add entries to the DIT.
511: This invokes editentry
512: on the draft entry.
513: If there is not a draft entry specified a draft entry of the specified
514: objectclass (default --- thornperson \& quipuObject) is created.
515: The default draft file is ``.dishdraft'' in your home directory, this can be
516: altered with the -draft option.
517:
518: When editing has finished the entry is added to the DIT
519: (the \tt -noedit\rm \ flag following a \tt -draft\rm \ stops the editor
520: being invoked).
521:
522: \tt -newdraft\rm \ causes the current draft to be overwritten with a new
523: template of the appropriate objectclass.
524:
525: \tt -template\rm \ is used to specify a template that should be used during
526: editing.
527:
528: On successful completion of the add, the draft entry is renamed with a suffix of
529: ``.old''.
530:
531: \subsection{Editentry}
532:
533: \begin{verbatim}
534: editentry <draft>
535: \end{verbatim}
536:
537: editentry invokes an editor (as defined by the users
538: \$EDITOR environment variable) on the current draft entry.
539: In a future release it is hoped to have an editor that knows about the syntax
540: of an entry, and thus ensures that the entry you have supplied is syntactically
541: correct.
542:
543: \subsection {Delete Entry}
544: \begin{verbatim}
545: delete [<object>]
546: \end{verbatim}
547: The specified entry is removed from the DIT.
548:
549: \subsection {Modify Entry}
550: \label{dish:modify}
551: \begin{verbatim}
552: modify [<object>] [-draft <draft> [-noedit]] [-newdraft]
553: [<any of the showentry arguments>]
554: \end{verbatim}
555: Modify is used to modify existing entries in the DIT. Initially showentry
556: is used to get the current DIT entry, and place a copy of if in your
557: .dishdraft file. If the -draft option is specified the given file is used.
558: After editing, any changes to the entry are sent to the directory
559: (the \tt -noedit\rm \ flag following a \tt -draft\rm \ stops the editor
560: being invoked).
561:
562: The draft file is handled in the same way as with add, except, when a
563: new draft is created, the current values of the attributes are read from the
564: directory.
565:
566: \subsection {ModifyRDN}
567: \begin{verbatim}
568: modifyrdn [<object>] -name <newrdn> [-[no]delete]
569: \end{verbatim}
570: This is used to modify the RDN of an entry.
571:
572: The \tt -nodelete\rm \ flag is used to prevent the old RDN being removed as
573: an attribute of the entry.
574:
575:
576: \subsection{Showname}
577: \label{showname}
578:
579: \begin{verbatim}
580: showname [<object>] [-compact] [-[no]cache]
581: [<any of the read arguments>]
582: \end{verbatim}
583:
584: A name can be printed either in compact form, just showing the distinguished
585: name, or by showing the distinguished attributes.
586:
587: \subsection{Compare}
588: \label{dua:compare}
589: \begin{verbatim}
590: compare [<object>] -attribute <attribute> [-[no]print]
591: \end{verbatim}
592: For example
593: \begin{quote}\begin{verbatim}
594: compare userclass=student
595: \end{verbatim}\end{quote}
596: This command has a return value of true or false (1 or 0).
597:
598: If `\tt -print\rm ' is specified the strings ``TRUE'' or ``FALSE'' are printed.
599:
600: \subsection {Squid}
601:
602: \begin{verbatim}
603: squid [-sequence [<sequence name>]]
604: [-alias <alias>] [-version]
605: \end{verbatim}
606:
607: The command \pgm {squid} (Status QUIpu Dish) with no
608: parameters will inform you of the current status
609: of you dish process for example:
610: \begin{quote}\begin{verbatim}
611: Connected to Armadillo at Internet=128.40.16.220+2005
612: Current position: @c=GB@o=Nottingham University
613: User name: @c=GB@o=University College London@
614: ou=Computer Science@cn=Colin Robbins
615: Current sequence 'default'
616: \end{verbatim}\end{quote}
617:
618: \tt -sequence\rm \ makes squid print the specified sequence.
619: Sequences are described in Section~\ref{sequences}.
620:
621: \tt -alias\rm \ adds the given DN to the current sequence.
622:
623: \tt -version\rm \ print the version number of the dish process and
624: associated libraries.
625:
626: \subsection {Bind}
627: \label{dish_bind}
628:
629: \begin{verbatim}
630: bind [-noconnect] [[-user] [<username>]]
631: [-password [<password>]] [-[no]refer] [-call <dsaname>]
632: [-simple] [-protected] [-strong] [-noauthentication]
633: \end{verbatim}
634:
635: This is used to (re)connect to the directory. This is not normally
636: required, as each command will bind as necessary, but allows advanced users
637: to contact specified DSA's.
638:
639: \tt -noconnect\rm \ is used to start dish (and cache) without connection to a
640: directory.
641:
642: For an explanation of the `\tt -cache\rm ' flag see Section~\ref{dua_cache}
643:
644: \tt -norefer\rm \ is used to tell Dish whether to automatically follow
645: referrals issued by the DSA.
646:
647: To connect to the directory you need to be authenticated.
648: The are four flags to control the level of authentication required.
649: \tt -noauthentication\rm \ will gain you ``public'' rights to the directory,
650: thus you typically won't be able to modify data.
651: \tt -simple\rm \ and \tt -protected \rm \ present a textual password to the
652: directory which it the uses to authenticate you.
653: Using \tt -simple\rm \ the password is sent across the network ``in the
654: clear'', whereas \tt -protected \rm \ encrypts it, thus you are advised to
655: used \tt -protected \rm \ if your directory supports it.
656:
657: The \tt -strong \rm \ flag tells Dish to send strong authentication
658: credentials to the directory. This is not fully implemented in this version
659: of QUIPU.
660:
661: To connect to the DSA using ``simple'' or ``protected'' authentication,
662: you must supply a
663: distinguished name (\tt -user\rm ) and password (\tt -password\rm ).
664: This however reveals you password to anybody who is looking at your
665: terminal, but is useful for issuing bind operations from
666: a shell script. To prevent this you need to place the
667: password in your \unix/ protected ``.quipurc'' (see Section~\ref{quipurc}).
668: Alternatively, if you do not supply a password, you will be prompted for one.
669:
670:
671: \subsection {Unbind}
672:
673: \begin{verbatim}
674: unbind [-noquit]
675: \end{verbatim}
676:
677: This is used to break the connection to a DSA.
678: If -noquit is specified, the dish process does not die (This is used to
679: maintain the cache).
680:
681: To be ``friendly''
682: to other users, you should unbind
683: when you have finished using the directory --- put an \tt unbind\rm \ in
684: you ``.logout'' file if you use \verb"dish" from the shell.
685:
686: \section {Sequences}
687: \label{sequences}
688:
689: Results returned by {\em search} and {\em list} may be long, and for
690: this reason have a reference number printed beside them.
691: The reference number can be used as the ``object'' in any of the calls to the
692: directory. Thus
693: \begin{quote}\begin{verbatim}
694: showentry 6
695: \end{verbatim}\end{quote}
696: shows the entry labelled with the sequence number
697: ``6'' by a previous {\em search} or {\em list}.
698:
699: When you come into dish
700: by default, the resultant numbers of list and search operations
701: are added to a sequence called ``default''.
702:
703: To get a different sequence (hence renumber from 1 again), you can change
704: this to ``mysequence'' with a
705: \begin{quote}\begin{verbatim}
706: -sequence mysequence
707: \end{verbatim}\end{quote}
708: flag.
709:
710: To completely remove the concept of sequences (so no numbers are printed by list
711: or search) use ``\tt -nosequence\rm ''.
712:
713: The special keyword ``\tt reset\rm '' is used to reset the current sequence,
714: thus causing future operations to be renumbered from 1.
715: This is different to setting a new sequence, as the old sequence values are
716: removed.
717:
718: Occasionally you will want to search an entry defined in one sequence,
719: putting the results in another, for this purpose the special token
720: ``result'' is recognised, thus
721: \begin{quote}\begin{verbatim}
722: search 4 -sequence xxx -sequence result yyy
723: \end{verbatim}\end{quote}
724: will search entry 4 as defined by sequence ``xxx'', but place the results in
725: sequence ``yyy''.
726:
727: \section {Service Controls}
728: \label{dish_serv}
729:
730: All the commands described in Sections~\ref{dua:show}
731: through \ref{dua:compare}
732: have additional flags to control the type of service provided. The
733: advice to a novice user is let these flags take their default values.
734:
735: The flags recognised are listed below:-
736:
737: \begin{description}
738:
739: \item [-(no)preferchain] Advise the DSA (not) to chain the operation if
740: required.
741:
742: \item [-(no)chaining] (Prohibit) Allow the use of chaining.
743:
744: \item [-(dont)usecopy] (Prohibit) Allow the use of a cached or slave
745: copy of the data.
746: Note this refers to data cached in the DSA, there are separate flags
747: (already described)
748: for data cached in the DUA.
749:
750: \item [-(dont)dereferencealias] (Do not) dereference aliases if found in
751: the path of a query.
752:
753: \item [-low] Flag the query as low priority.
754: \item [-medium] Flag the query as medium (default) priority.
755: \item [-high] Flag the query as high priority.
756:
757: \item [-timelimit $n$] Set the time limit to $n$ seconds.
758: \item [-notimelimit] Do not specify a time limit.
759:
760: \item [-sizelimit $n$] Set the size limit to $n$ entries.
761: \item [-nosizelimit] Do not specify a size limit.
762:
763: \item [-(no)localscope] (Do not) limit operation to local scope.
764:
765: \item [-(no)refer] (Do not) automatically follow referrals issued by the DSA.
766:
767: \item [-strong] Ask the DSA to use strong authentication when sending the
768: results.
769:
770: \end{description}
771:
772:
773:
774: \section {Tailoring}
775:
776: There are two levels of tailoring that control the operation of the DISH DUA.
777: First of all there is the system wide tailor file \file{dsaptailor}
778: (found in the ISODE \verb"ETCDIR" directory, usually \file{/usr/etc/}), and
779: then users private tailor file \file{.quipurc}.
780:
781: The file \file{dsaptailor} is described in Section~\ref{dua:tailor}.
782:
783: \subsection {.quipurc}
784: \label{quipurc}\index{.quipurc}
785: The file \file{.quipurc} is read by \verb"dish" on start up, and
786: has the following format:-
787:
788: \begin{verbatim}
789: flag: value
790: \end{verbatim}
791:
792: The following flags are currently recognised:-
793: \begin{description}
794:
795: \item [username] The name of the user to bind as.
796:
797: \item [password] The password to use when binding. For this reason care
798: should be taken to ensure you .quipurc file is not publicly readable.
799:
800: \item [cache\_time] How long to keep the dish process alive after unbinding
801: (specified in minutes)
802:
803: \item [connect\_time] How long to keep a connection open, it there is no
804: activity (specified in minutes)
805:
806: \item [service] A list of default service control flags
807: (as defined in Section~\ref{dish_serv}).
808:
809: \item [sequence] Add the supplied DN parameter to the default sequence.
810:
811: \item [dsap] This can be followed by one of the dsaptailor options
812: described in the Section~\ref{dua:tailor}.\index{dsaptailor}
813:
814: \item [isode]
815: This can be followed by one of the ISODE tailor options
816: described in \volone/ of this Manual.
817:
818: \item [notype] The argument is expected to be an attribute type.
819: This attribute will not be displayed by showentry by default.
820:
821: \item [type] The only valid argument for this entry is ``unknown'', and says
822: that unknown attributes should be shown, by default, they are not shown.
823:
824: \item [certificate] Used for strong authentication.
825:
826: \item [secret\_key] Used for strong authentication.
827:
828: \item [$<$dish command$>$] A list of default flags
829: to be used when `command' is used.
830: For example
831: \begin{verbatim}
832: showname: -compact
833: \end{verbatim}
834: says that ``showname'' should always be invoked with the
835: \tt -compact \rm \ flag set.
836:
837: \item [$<$nickname$>$] A nickname entry, for example
838: \begin{quote}\smaller\begin{verbatim}
839: cjr: ``c= GB @ o= University College London @ ou= Computer Science @ CN= Colin Robbins''
840: \end{verbatim}\end{quote}
841: This can then be used in distinguished name arguments, for example
842: \begin{quote}\begin{verbatim}
843: showentry cjr
844: \end{verbatim} \end{quote}
845: will show the entry for `Colin Robbins'.
846:
847: \end{description}
848:
849:
850: \section {Remote Management of the DSA}\label{dua:mgmt}
851: \begin{verbatim}
852: dsacontrol [-[un]lock <entry>] [-dump <directory>]
853: [-tailor <string>] [-abort]
854: [-restart] [-info] [-refresh <entry>]
855: [-resync <entry>] -slave [<entry>]
856: \end{verbatim}
857:
858: If the \pgm{dish} program is bound to the DSA as the Directory manager
859: (See Section~\ref{dish_bind} on binding),
860: then it may be used to (primitively) manage the DSA.
861: This feature is discussed in \cite{QUIPU.Design} and Section~\ref{dsa:mgmt}
862: of this Manual.
863:
864: \tt (un)lock\rm \ used to (un)lock subtrees of the DIT held locally. This
865: (allows) prevents users to modify the DIT.
866:
867: \tt dump\rm \ causes a copy of the local DIT to be dumped into the specified
868: directory.
869: Note that when the DSA dumps its in-core database,
870: it does so relative to the (possibly remote) \unix/ directory from which the
871: DSA was started,
872: not the directory that \man dish(1c) was invoked in!
873: So it is best to specify path names in full to ensure the database is dumped
874: where you expect it to be!
875:
876: \tt tailor\rm \ is used to pass tailor command to a running DSA. The format of
877: ``string'' is the same as a line in the ``quiputailor'' file.
878: For example:-
879: \begin{quote}\begin{verbatim}
880: dsacontrol -tailor "dsaplog level=all"
881: \end{verbatim}\end{quote}
882: will turn the DSA logging on full.
883:
884: \tt refresh\rm \ tells the DSA to re-read sub-tree `entry' from disk.
885: As with all `dsacontrol' commands, `entry' must be the full DN of the target
886: entry, the dish concept of `current position' is not used.
887: Also, if relating to a disk operation, the CASE of the DN must be correct
888: as well.
889:
890: \tt resync\rm \ tells the DSA to re-write the sub-tree `entry' to disk.
891:
892: \tt slave\rm \ tell the DSA to update its SLAVE EDB files, see Section
893: \ref{slave_update} for details.
894:
895: \tt abort\rm \ tells the DSA to stop.
896: \tt restart\rm \ tells the DSA to stop, then restart.
897:
898: \tt info\rm \ asks the DSA to return some statistics about its database.
899:
900: The error messages returned from a DSA are somewhat obscure.
901: There are 3 things dish may report:
902: \verb+DONE+ --- the operation has been successfully completed;
903: \verb+Access rights insufficient+ --- you are not bound as the DSA manager;
904: \verb+Unwilling to perform+ --- the DSA was unable to perform the task, this
905: generally means the argument to dsacontrol was wrong.
906:
907: \section {Caching in the DUA}
908: \label {dua_cache}
909:
910: All results returned from read and list operations are cached in memory
911: in the DUAs. The cache is then used if possible to answer queries.
912: The cache is kept for ``cache\_time'' minutes as specified in the tailor
913: files.
914:
915: Disk caching has not been implemented yet,
916: but it is intended to extend the in-core caching,
917: so that the cached data can be written to disk. When the DUA's start up, the
918: user will have the option to read this cache.
919: Similar support for private data may be provided.
920:
921: \section {Running DISH from the Shell}
922: \label{dish_shell}
923:
924: Each of the dish commands mentioned in this Chapter to
925: \ref{dua:mgmt}
926: can be applied directly to the shell, without having to first invoke
927: \pgm{dish}. This has the advantage that the result can be piped through
928: programs like \pgm{more} thus giving the user flexibility in how
929: they view the data.
930:
931: Chapter~\ref{quipu:install} describes how to install this ``extra'' feature of
932: dish.
933:
934: \subsection {Dishinit}
935: A program called \pgm{dishinit}
936: \label{dishinit}
937: can be use to
938: bind to the directory as the manager, read certain information
939: and create a
940: default \verb".quipurc"
941: file for a specified user.
942: This is a useful utility for new databases.
943: If the \verb"dsaptailor" variable \verb"dishinit" is set to \verb"on",
944: dishinit will be invoked by \verb"dish" whenever is can not find a
945: .quipurc file.
946:
947: \verb"dishinit" needs three parameters to be set in order to bind as the
948: manager, and search the local subtree.
949: These parameters are defined at the top of the dishinit script and are:-
950: \begin{description}
951: \item [manager] The DN of the manager of the local DSA
952: \item [password] The managers password (the script should be protected
953: with \unix/ file protection).
954: \item [position] The DN of the local sub-set of the DIT. This is where
955: the entries for users will be looked for
956: \end{description}
957:
958: \subsection{Example Scripts}
959: Two example scripts have been supplied as part of ISODE, and can be found in
960: the \file{others/quipu/uips/dish} directory.
961: \begin{description}
962: \item [dsaping] contacts all the DSAs at a given level in the DIT, and
963: gathers some statistics.
964: \item [dsalist] produces a list of all the (known) DSAs in the DIT.
965: \end{description}
966:
967: Each time a new shell is invoked and a dish command entered, a new DISH will
968: be invoked. This is sometimes not required. To prevent this from happening
969: an environment variable ``DISHPROC'' can be set, and should be the TCP
970: address to use for communication, for example
971: \begin{quote}\begin{verbatim}
972: 127.0.0.1 12345
973: \end{verbatim}\end{quote}
974: where 127.0.0.1 is the IP address, and 12345 is the TCP port.
975: The two example scripts show how the TCP port may be generated if required
976: under \verb+sh+.
977: For \verb+csh+ you might use
978: \begin{verbatim}
979: if (${?DISHPROC} == 0) then
980: setenv DISHPROC "127.0.0.1 `expr $$ + 10000`"
981: endif
982: \end{verbatim}
983:
984: For people not running in the TCP environment this is not a problem, as
985: ``named pipes'' are used, with the pipe name being bound to the terminal
986: identifier, the section below identifies these files.
987:
988: \subsection {Files}
989:
990: When the multiple command version of dish is compile on a machine that does
991: not support sockets, name pipes are used
992: to communicate with the
993: a background process.
994:
995: The file ``/tmp/dish$<$pid$>$'' is used by dish to write results to the calling
996: processes, where the ``pid'' is the process id of the calling process.
997:
998: The file ``/tmp/dish--$<$tty$>$--$<$uid$>$'' is used by calling process to send commands to
999: dish, where ``tty'' is the users terminal number, and ``uid'' their user id.
1000:
1001: \chapter {SID}
1002: \index{sid}
1003: \label{DUA:sid}
1004: SID (Steve's Interface to Dish) is a Directory User Agent, designed to be
1005: incredibly easy to use.
1006: It is implemented as a simple set of scripts to the DISH DUA.
1007:
1008: There are a lot of flags to DISH, this can make it awkward to use, and in
1009: general shows too much directory specific information.
1010: Fred has a centralised view of the world, and does not give
1011: the advantages of a shell based interface.
1012:
1013: SID is a simple approach of giving appropriate aliases to access DISH
1014: commands. It is targetted for searching for people and organisations.
1015: It may be useful ``as is'' to others, and also give an indication as to how
1016: DISH may be used.
1017:
1018:
1019: \section {Quickstart}
1020:
1021:
1022: \begin{description}
1023: \item[WARNING] Before you start to try SID, you must have the variable
1024: DISHPROC set in your environment. The mechanism suggested in
1025: Section~\ref{profile} is a good way to achieve this. To experiment,
1026: csh users can type the incantation:
1027: \begin{verbatim}
1028: % setenv DISHPROC "127.0.0.1 `expr $$ + 1000`"
1029: \end{verbatim}
1030: \end{description}
1031:
1032:
1033: To find users within your Organisation is very easy.
1034: The default setup is optimised for
1035: your particular Organisational Unit. Simply use the command {\bf psearch}
1036: with a single argument to identify the user looked for. This will identify
1037: all users with this key as a substring. For example:
1038:
1039: \begin{quote}\small\begin{verbatim}
1040: % psearch steve
1041: countryName=GB
1042: organisation=University College London
1043: department=Computer Science
1044:
1045: 1 cn=Steve Kille
1046: telephoneNumber - +44-1-380-7294 (work)
1047: telephoneNumber - 01-350-2888 (home)
1048: 2 cn=Stephen Titcombe
1049: telephoneNumber - +44-1-387-7050 x 3674/5
1050: telephoneNumber - Term = 01-388-4741
1051: 3 cn=Stephen Sackin
1052: 4 cn=Steve Wilbur
1053: telephoneNumber - +44-1-380-7287
1054: 5 cn=Stephen Usher
1055: telephoneNumber - +44-1-387-7050 x 3674/5
1056: 6 cn=Kevin Steptoe
1057: 7 cn=Tomasz Stepniak
1058: 8 cn=Stefan Penter
1059: telephoneNumber - +44-1-387-7050 x 3674/5
1060: 9 cn=Stephania Loizidou
1061: 10 cn=Steve Hodges
1062: telephoneNumber - +44-1-387-7050 x 3674/5
1063: 11 cn=Steve Davey
1064: telephoneNumber - +44-1-387-7050 x 7280 or 7289
1065: 12 cn=Steve Chan
1066: telephoneNumber - +44-1-387-7050 x 3674/5
1067: 13 cn=Steven Britton
1068: telephoneNumber - +44-1-387-7050 x 3715
1069: 14 cn=Stephen Beckles
1070: telephoneNumber - +44-1-387-7050 x 3674/5
1071: 15 cn=Steven Bacall
1072: telephoneNumber - +44-1-387-7050 x 3674/5
1073: telephoneNumber - dd 01-387-6978 (Campbell House)
1074: \end{verbatim}\end{quote}
1075:
1076:
1077: Each match will have an associated number. To show a given entry, just use
1078: the command {\bf showentry}, with the number identifying the entry as the
1079: single argument. For example to show entry 1 (Steve Kille):
1080:
1081: \begin{quote}\smaller\begin{verbatim}
1082: % showentry 1
1083: c=GB@o=University College London@ou=Computer Science@cn=Steve Kille
1084: Address - 35 Elspeth Road
1085: London
1086: SW11 1DW
1087: userClass - csresstaff
1088: photo - (See X window, pid 598)
1089: roomNumber - G24
1090: favouriteDrink - Pinta - Brakspears
1091: info - Directory worker
1092: rfc822Mailbox - [email protected]
1093: textEncodedORaddress - /Pn=Stephen.Kille/Ou=cs/O=ucl/ \
1094: Prmd=uk.ac/admd=gold 400/c=gb/
1095: userid - steve
1096: telephoneNumber - +44-1-380-7294 (work)
1097: telephoneNumber - 01-350-2888 (home)
1098: description - New Description
1099: surname - Kille
1100: name - Steve E. Kille
1101: name - Stephen Kille
1102: name - Steve Kille
1103: \end{verbatim}\end{quote}
1104:
1105: If you are running X windows, a picture will be displayed if it is present.
1106:
1107: If you wish to search all of your Organisation, simply give a second argument
1108: to {\bf
1109: psearch}. For example, to search UCL give `ucl' as shown:
1110:
1111: \begin{quote}\small\begin{verbatim}
1112: % psearch baker ucl
1113: Searching for People matching "baker" under:
1114: countryName=GB
1115: organisation=University College London
1116:
1117: 4 ou=French Lang and Lit@cn=F Baker
1118: telephoneNumber - 3077
1119: 5 ou=Economics@cn=V Bashkar
1120: telephoneNumber - 2286
1121: 6 ou=Biochemistry@cn=J Basra
1122: telephoneNumber - 2185
1123: 7 ou=Bartlett School@cn=H Bowker
1124: telephoneNumber - 7453
1125: 8 ou=Anatomy and Embryol@cn=D Becker
1126: telephoneNumber - 3293
1127: 9 ou=Computer Science@cn=Malcolm Booker
1128: telephoneNumber - +44-1-387-7050 x 3645
1129: 10 ou=Computer Science@cn=Imtiaz Bashir
1130: telephoneNumber - +44-1-387-7050 x 7304
1131: 11 ou=Computer Science@cn=Benjamin Bacarisse
1132: telephoneNumber - +44-1-380-7212 (work)
1133: telephoneNumber - 01 987 2746 (home)
1134: 12 ou=Surgery@cn=L Baker
1135: telephoneNumber - 82-5255
1136: 13 ou=History Of Art@cn=B A Boucher
1137: telephoneNumber - 7210
1138: 14 ou=Geological Sciences@cn=J R Baker
1139: telephoneNumber - 2382
1140: 15 ou=Secretary's Office@cn=I H Baker
1141: telephoneNumber - 3000
1142: \end{verbatim}\end{quote}
1143:
1144:
1145: \section {Example Usage}
1146:
1147: A typical sequence to find someone outside you organisation is now shown:
1148:
1149:
1150: \begin{quote}\small\begin{verbatim}
1151: % osearch nott
1152: Searching in country "gb" for Organisations matching "nott"
1153: 1 o=Nottingham University
1154: telephoneNumber - +44-0602-484848x2862
1155: 2 o=NPL
1156: 3 o=JNT
1157: telephoneNumber - +44-0235-445724
1158: % psearch smith 1
1159: Searching for People matching "smith" under:
1160: countryName=GB
1161: organisation=Nottingham University
1162:
1163: 4 ou=Computer Science@cn=Hugh Smith
1164: telephoneNumber - extn 2862 (Departmental Secretary)
1165: % showentry 4
1166: c=GB@o=Nottingham University@ou=Computer Science@cn=Hugh Smith
1167: photo - (See X window, pid 1076)
1168: telephoneNumber - extn 2862 (Departmental Secretary)
1169: description - lecturer
1170: surname - Smith
1171: name - Hugh.Smith
1172: name - Hugh Smith
1173: \end{verbatim}
1174: \end{quote}
1175:
1176:
1177:
1178: \section {Use of Nicknames}
1179:
1180: It is convenient to have nicknames (privaet aliases) set up for commonly accessed parts of the
1181: Directory Information Tree. These can be set up in the QUIPU Profile (see
1182: Section~\ref{profile}), which sets up the nickname ``us''.
1183: Two nicknames used in the examples are:
1184:
1185: \begin{description}
1186: \item[ucl] Country GB; Organsisation University College London.
1187: \item[cs] Country GB; Organsisation University College London;
1188: Organisational Unit Computer Science.
1189: \end{description}
1190:
1191: Aliases may be used as an alternative to sequence numbers.
1192:
1193: \section {SID Commands}
1194:
1195: The initial SID commands are:
1196:
1197: \begin{description}
1198:
1199: \item[osearch] (Organisation Search) Search for an organisation. The first argument is the
1200: organisation being searched for. For example:
1201:
1202: \begin{verbatim}
1203: % osearch nott
1204: \end{verbatim}
1205:
1206: This searches for any organisations approximating to this string, or
1207: containing it as a substring.
1208:
1209: The second (optional) argument is the two letter country code (e.g., GB, US,
1210: ES, etc.). Use {\bf clist} to find these codes. The default country is the
1211: previous one searched. Example:
1212:
1213: \begin{verbatim}
1214: % osearch nyser us
1215: \end{verbatim}
1216:
1217: \item[psearch] (Person Search) Search for a person. The first argument is a key to identify
1218: the person. Approximate and substring matches are made.
1219: There are two ways of using psearch.
1220:
1221:
1222: \begin{enumerate}
1223: \item Search an identified organisation, using the second argument to
1224: osearch. Examples where the organisation is identified by a nickname:
1225:
1226: \begin{verbatim}
1227: % psearch kirstein ucl
1228: \end{verbatim}
1229:
1230: Example where the organisation is identified by a sequence number, returned
1231: by a previous osearch command.
1232:
1233: \begin{verbatim}
1234: % psearch steve 29
1235: \end{verbatim}
1236:
1237:
1238: \item Move explicitly to an organistion, and then use psearch with only one
1239: argument. This is useful when repeated searches will be made from one point.
1240: Example:
1241:
1242: \begin{verbatim}
1243: % moveto ucl
1244: % psearch kirstein
1245: \end{verbatim}
1246:
1247: \end{enumerate}
1248:
1249:
1250:
1251: \item[clist] (Country List) Used to give a list of countries, with friendly descriptions,
1252: as well as the two letter code.
1253:
1254: \item[ousearch] (Organisational Unit Search) Search for an OU. Analogous to psearch. This is
1255: appropriate for use where organisations are large, and a full search takes
1256: too long.
1257:
1258: \item[dlist] (Directory List) This uses the search command to provide a listing of directory
1259: information, without a clutter of wild South American animals.
1260:
1261: \end{description}
1262:
1263: \section {Standard DISH commands}
1264:
1265: The following DISH commands are useful ``as is'' for normal users, and are
1266: considered to be a part of SID.
1267:
1268: \begin{description}
1269: \item[showentry] Show an entry. The sinle argument is typically the numeric
1270: key returned by a search. This will be used a lot, and it is likely to be
1271: worthwhile setting up an alias. The author uses ``ds'' (directory show).
1272: Example, using a sequence number returned by a search.
1273:
1274: \begin{verbatim}
1275: % showentry 36
1276: \end{verbatim}
1277:
1278:
1279: \item[moveto] Move to a defined location. Example of moving to a nickname
1280: defined location:
1281:
1282: \begin{verbatim}
1283: % moveto ucl
1284: \end{verbatim}
1285:
1286:
1287: \item[modify] To modify your own entry, this command is used with the single
1288: argument ``me''. For example:
1289:
1290: \begin{verbatim}
1291: % modify me
1292: \end{verbatim}
1293:
1294: \end{description}
1295:
1296:
1297: \section {QUIPU Profile}
1298: \label {profile}
1299: This is a suggested template for ``.quipurc'', note that this is very
1300: similar to the default file installed by \pgm{dishinit} described in
1301: Section~\ref{dishinit}.
1302:
1303:
1304: \begin{quote}\smaller\begin{verbatim}
1305: username:c=GB@o=University College London@ou=Computer Science@cn=Steve Kille
1306: me:c=GB@o=University College London@ou=Computer Science@cn=Steve Kille
1307: password:steve
1308:
1309: position: @c=GB@o=University College London@ou=Computer Science
1310: notype: acl
1311: notype: treestructure
1312: notype: masterdsa
1313: notype: slavedsa
1314: notype: objectclass
1315: notype: lastmodifiedby
1316: notype: lastmodifiedtime
1317: notype: userpassword
1318: cache_time: 30
1319: connect_time: 2
1320:
1321: us: c=us
1322: moveto: -pwd
1323: showentry: -name
1324:
1325: \end{verbatim}\end{quote}
1326:
1327: You must set the environment variable DISHPROC. This can be done by the
1328: following in the .login file (csh).
1329:
1330: \begin{verbatim}
1331: if (${?DISHPROC} == 0) then
1332: setenv DISHPROC "127.0.0.1 `expr $$ + 1000`"
1333: endif
1334: \end{verbatim}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.