|
|
1.1 root 1: %run this through LaTeX with the appropriate wrapper
2:
3: \chapter {Installing QUIPU}
4:
5: \label{quipu:install}
6:
7: This section describes how to install QUIPU, and make it operate in a basic
8: fashion. This is reasonably prescriptive, as it should be possible to
9: install and operate a QUIPU DUA and/or DSA without too much
10: knowledge about how it functions.
11:
12: QUIPU comes in 4 separate parts of the ISODE tree, none of which are
13: ``made'' as part of the default installation of ISODE.
14: This section assumes you have installed ISODE.
15: You should consult the \file{READ-ME} file in the
16: top level of the source tree, and \volone/ to \volfour/ of this Manual
17: if you have not installed ISODE.
18:
19: There are various options you can set which control
20: the operation of QUIPU. These are set in the file \file{h/quipu/config.h}
21: but are probably best left to their default values, unless you qualify
22: as a ``large'' site. Larger sites may want to consider enabling
23: the TURBO options described in the next section.
24:
25: To generate QUIPU type \verb"make all-quipu" in the top-level ISODE
26: directory.
27:
28: A version of \pgm{dish} that runs directly
29: from a \unix/ shell,
30: \pgm{dishinit}:
31: a script to create a default \file{.quipurc} file for new users, and
32: \pgm{sid}: a set of scripts that utilise the shell version of dish, are all
33: installed from the \file{others/quipu/uips/dish} directory.
34: The \pgm{fred}, \pgm{widget} and \pgm{sunint} interfaces
35: can be installed by looking at
36: \file{others/quipu/uips/READ-ME}.
37:
38: Each of these interfaces knows about the ``photo'' attribute that an entry
39: in the DIT can have. In order to display the photographs, the photo
40: handling code must be compiled, instructions on this can be found in
41: Section~\ref{dua:photo} of this Manual and the file
42: \file{others/quipu/photo/READ-ME}.
43:
44: \section{TURBO Options for Large Sites}
45: This section describes two options (TURBO\_LOAD and TURBO\_DISK) that
46: can be set in the file \file{h/quipu/config.h}. Both options are
47: most useful for sites with a large amount of data (e.g. hundreds of
48: entries per EDB file). The first option, TURBO\_LOAD, can be used to speed
49: the process of loading data from disk during startup.
50: When QUIPU starts, it must check each entry that it loads
51: against those sibling entries already loaded
52: to ensure that the data in each EDB
53: file contains no duplicate entries. Normally, this is done by
54: searching a linked list of loaded entries. The TURBO\_LOAD option
55: works by building and searching an AVL (height-balanced)
56: tree instead of the linked list. Also, it allocates space for this
57: tree in large chunks to help reduce paging. The AVL tree is only
58: used during the loading process and does not affect operation of the
59: DSA once the database is loaded. There is some extra
60: overhead involved in buildng the AVL tree, and the point at which
61: the TURBO\_LOAD option starts improving things seems to be about
62: 100+ entries per EDB file. If you have EDB files containing
63: significantly more
64: than 100 entries, you may want to consider enabling the TURBO\_LOAD
65: option.
66:
67: To use the TURBO\_LOAD option, add a line like this to the
68: \file{h/quipu/config.h} file:
69: \begin{verbatim}
70: #define TURBO_LOAD /* enable fast loading of big EDB files */
71: \end{verbatim}
72: There are two run time tailor options you should be aware if the
73: TURBO\_LOAD option has been enabled ({\it turbo\_size}
74: and {\it turbo\_namelen}). These options are set in the
75: \file{quiputailor} file and should be left to their default values
76: unless the loading process fails with a message indicating that
77: these parameters should be changed.
78:
79: The second option, TURBO\_DISK, can be used to make modify operations
80: run much faster, especially on large data sets. It requires the use
81: of the \pgm{gdbm} library. \pgm{Gdbm} is a library of simple database routines
82: providing functionality similar to \pgm{dbm} and \pgm{ndbm}, but without the
83: filesystem page size limitations of those systems. \pgm{Gdbm} is GNU
84: software and is available from the Free Software Foundation. It is
85: not a part of the ISODE.
86: Normally, when an
87: entry is modified, QUIPU writes the entire EDB file the entry lives
88: in synchronously out to disk. If the EDB file is very large, this can
89: take some time, especially on a heavily loaded system. The TURBO\_DISK
90: option works by keeping the disk data in \pgm{gdbm} files instead of the
91: regular EDB files. This way, when an update is made, only the
92: affected entry need be written to disk. The performance increase
93: is directly proportional to the size of the EDB file.
94: Whereas a normal update operation takes time proportional to the size
95: of the EDB file, with the TURBO\_DISK option it takes a small constant
96: amount of time. As for TURBO\_LOAD, if you don't have EDB files with
97: at least a hundred or so entries, it's probably not worth enabling
98: the TURBO\_DISK option.
99:
100: To use the TURBO\_DISK option, add a line like this to the
101: \file{h/quipu/config.h} file:
102: \begin{verbatim}
103: #define TURBO_DISK /* enable fast EDB update operations */
104: \end{verbatim}
105: Next, if you have enabled the TURBO\_LOAD option as described above, you
106: will need to edit the file \file{quipu/turbo\_disk.c} and make a small
107: change. The line:
108: \begin{verbatim}
109: #include "/u/up/tim/src/gdbm-1.3/gdbmdefs.h"
110: \end{verbatim}
111: should be changed to reflect the actual location of the \file{gdbmdefs.h}
112: include file on your system. Note that this file is not installed in
113: the normal process of installing \pgm{gdbm}. It is in the \pgm{gdbm} source
114: directory. Disgustingly enough, the {\it turbo\_start} routine needs
115: to be able to {\it stat} the \pgm{gdbm} file, and needs the definitions
116: in \file{gdbmdefs.h} to do so. If you are not using the TURBO\_LOAD
117: option, this step is not necessary.
118:
119: Now make and install QUIPU as usual.
120: Before running QUIPU, you will have to
121: convert your EDB file hierarchy into a gdbm file hierarchy. This step
122: is only necessary once. The \file{quipu/turbo} directory contains some
123: tools to help in this process. The shell script \pgm{tree2dbm} will
124: convert an EDB file hierarchy to a gdbm file hierarchy. To use it,
125: type ``\verb+tree2dbm database-directory+'' where database-directory is the
126: directory where the EDB file hierarchy begins. This script does a
127: find starting in that directory for files named EDB and runs them through the
128: \pgm{edb2dbm} program which creates a file called \file{EDB.gdbm}.
129: The original EDB file is neither removed nor
130: molested, so you'll need roughly twice the disk space. Alternatively, you
131: can run \pgm{edb2dbm} by hand on each EDB file. The reverse operation
132: (converting from a \pgm{gdbm} hierarchy to an EDB hierarchy) is done
133: by the \pgm{synctree} shell script. It is a good idea to run
134: \pgm{synctree} out of \file{crontab} once in a while to update the
135: EDB file hierarchy.
136:
137: Finally, it should be noted that parse errors will be reported
138: somewhat differently in the \file{dsap.log} file with the
139: TURBO\_DISK option enabled. Since line numbers don't make much
140: sense in a \pgm{gdbm} file, errors will be reported based on the
141: Relative Distinguished Name of the offending entry. If you get
142: a parse error (because of a non-printable character, for example),
143: the best approach is to do something like this:
144: \begin{verbatim}
145: edbcat EDB >bob
146: edit the file bob, locate the entry, and fix the problem
147: edb2dbm bob
148: mv bob.gdbm EDB.gdbm
149: \end{verbatim}
150: where this procedure assumes you are in the directory containing
151: the bad EDB.gdbm file. The edbcat program can be found in the
152: \file{quipu/turbo} directory and is used to convert from \pgm{gdbm}
153: back to plain text EDB format.
154:
155: \section{Files}
156: Regardless of how you install QUIPU and the ISODE,
157: the number of files needed to run QUIPU are quite small.
158:
159: In ISODE's \verb"BINDIR" directory,
160: typically \file{/usr/local/bin/},
161: there are a few programs of interest:
162: \begin{describe}
163: \item[dish:] The DIrectory SHell\\
164: This is discussed in Chapter~\ref{dish}.
165:
166: \item[bind:] Shell interface to \pgm{dish}\\
167: There are actually several links (listed below) to a program called
168: \pgm{bind}.
169: These act to export the \pgm{dish} interface to the \unix/
170: shell.
171: As such,
172: you can issue commands to \pgm{dish} from the shell,
173: rather than running \pgm{dish} directly.
174: \begin{quote}
175: \begin{tabular}{l}
176: add\\
177: compare\\
178: delete\\
179: dsacontrol\\
180: list\\
181: modify\\
182: modifyrdn\\
183: moveto\\
184: search\\
185: showentry\\
186: showname\\
187: squid
188: \end{tabular}
189: \end{quote}
190:
191: \item[fred:] A white pages user interface\\
192: See Chapter~\ref{DUA:fred}.
193:
194: \item[editentry:] Edit a Directory entry\\
195: This is a simple shell script that \pgm{dish} invokes when you
196: ask \pgm{dish} to edit an entry in the Directory.
197:
198: \item[unbind:] Unbind from \pgm{dish}\\
199: This command is used to terminate \pgm{dish}.
200: \end{describe}
201: In ISODE's \verb"SBINDIR" directory,
202: typically \file{/usr/etc/},
203: the DSA resides:
204: \begin{describe}
205: \item[ros.quipu:] The QUIPU DSA\\
206: This program will be started once, for each DSA you
207: are running, from rc.local.
208: A script is provided to invoke this program,
209: in case you need to restart it.
210:
211: %%%\item[dsaconfig:] a configurator for Level-1 DSAs.
212: \end{describe}
213: In ISODE's \verb"ETCDIR" directory,
214: also typically \file{/usr/etc/},
215: there are a few programs and files of interest:
216: \begin{describe}\sloppy
217: \item[oidtable.at, oidtable.gen, oidtable.oc:]
218: These define the attribute types,
219: generic object identifiers,
220: and object classes known to the system.
221: (An object identifier is a method used to unambiguously
222: encode, among other things,
223: the names of attributes and object classes.)
224: These files you never deal with unless they are
225: accidently corrupted.
226:
227: \item[dsaptailor:] This is the run-time tailor file for the DUAs.
228: You will configure this file initially and then
229: probably leave it alone.
230:
231:
232: \item[isoaliases, isobjects, isoentities, isomacros, isoservices:]
233: These are \\ %%%
234: various databases used by the ISODE.
235: These files you never deal with unless they are
236: accidently corrupted.
237:
238: \item[isologs:] This script runs nightly under \man cron(8) to
239: trim the ISODE log files, kept in ISODE's \verb"LOGDIR"
240: directory,
241: typically \file{/usr/tmp/}.
242: This file you never deal with unless it is
243: accidently corrupted.
244:
245: \item[isotailor:] This is the run-time tailor file for the ISODE.
246: You will configure this file initially and then
247: probably leave it alone.
248: \end{describe}
249:
250: \chapter {Configuring a DUA}
251:
252: It is suggested that you try to get a DUA operational by connecting to
253: a ``well known'' DSA before you attempt
254: to operate a local DSA.
255: Or, if you have a DSA from a previous release of QUIPU - try an connect to
256: that.
257:
258: \section {Connecting to a DSA}
259: \label{dua:connect}
260:
261: A DUA essentially only needs to know one thing to be able to contact a
262: DSA, that is the network address of the DSA.
263: This parameter is defined in the file \file{dsaptailor},
264: together with some other parameters.
265: The full set of parameters are described in Section \ref{dua:tailor}.
266:
267: The \verb"dsa_address" parameter defines the name and address of the DSA to
268: initially contact. For example,
269: \begin{quote}\begin{verbatim}
270: dsa_address vicuna Internet=bells.cs.ucl.ac.uk+50987
271: \end{verbatim}\end{quote}
272:
273: declares the DSA \verb"vicuna" at the indicated presentation
274: address\footnote{The syntax of presentation addresses is discussed in
275: \volone/ of this manual and \cite{String.Addresses}.}
276: \index{presentation addresses}
277: to be the
278: default DSA for the DUA to contact.
279: As shown above, the address is preceded by a private key. This can
280: be used in some DUAs (including DISH) to specifying the address of the DSA
281: to contact.
282: If there are more than one \verb"dsa_address" entries, the first
283: entry will be used to supply the default DSA address.
284:
285: A default dsaptailor file
286: (taken from \file{dsap/dsaptailor}) is installed as
287: \file{dsaptailor} in the ISODE \verb"ETCDIR" directory
288: (usually \file{/usr/etc/}) when
289: the dsap library is installed, this supplies the addresses
290: of various DSAs that you
291: may be able to access.
292:
293: To try to connect to one of the DSAs listed in dsaptailor,
294: invoke \pgm{dish}, with a \verb"-call"
295: flag, e.g. ``\verb"dish -call giant"'' will try to contact the DSA ``giant''
296: running at UCL.
297: If the connection is successful, then the prompt ``\verb"dish ->"'' will be returned.
298: If the connection fails, the
299: program will exit with an appropriate error
300: message.
301:
302: If this fails
303: you might want to
304: try connecting to some of the other registered DSAs,
305: for example, try ``\verb"dish -call alpaca"'', ``\verb"dish -call eel"''
306: or ``\verb"dish -call anaconda"''.
307: A list of registered DSAs is given in Appendix~\ref{dsa:sites}.
308:
309: If you fail to contact a DSA at this point, there are likely to be lower
310: level problems. You should turn up the ISODE logging
311: (see \voltwo/ of this manual) to see what is happening to the
312: network calls.
313:
314: If you invoke \pgm{dish} without a \verb"-c" flag (using the default \file{dsaptailor}), it will
315: try to connect to the DSA defined by the first
316: \verb"dsa_address" entry.
317:
318: \pgm{dish} is described in full in Chapter~\ref{dish}
319: of this Manual.
320:
321: \section{Tailoring}
322: \label{dua:tailor}
323: \index{dsaptailor}
324:
325: The program configuration is tailored to
326: allow you to change logging levels, and other parameters at
327: run time.
328: It is used by the QUIPU DUA procedures, and by the QUIPU User Interfaces.
329:
330: The file \file{dsaptailor} is used for this purpose and
331: consists of single value entries (e.g. oidtable), unless otherwise
332: stated (e.g dsaplog).
333: Each entry has a parameter followed by its
334: value.
335: The various options are:
336: \begin{describe}
337: \item [\verb"oidtable":]
338: The path for the OID definition tables.
339: NOTE: It is best to have this appear as the first entry of the tailor file, as
340: other entries may contain attributes that need to be looked up in these
341: tables
342: There are three:
343: \begin{itemize}
344: \item \file{file.gen},
345: which contains generic names for building OIDs;
346: \item \file{file.at},
347: which contains the OIDs for attributes; and,
348: \item \file{file}.oc,
349: which contains the OIDs for object classes.
350: \end{itemize}
351: For example,
352: \begin{quote}\small\begin{verbatim}
353: oidtable /usr/lib/quipu/OIDTable
354: \end{verbatim}\end{quote}
355: will direct the DSA to consult:
356: \begin{quote}\begin{verbatim}
357: /usr/lib/quipu/OIDTable.gen
358: /usr/lib/quipu/OIDTable.at
359: /usr/lib/quipu/OIDTable.oc
360: \end{verbatim}\end{quote}
361: By default this is set to \verb"oidtable" which refers to the tables
362: \file{oidtable.*} in the ISODE \verb"ETCDIR" directory.
363:
364: \item [\verb"dsa\_address":]
365: This parameter is described in Section~\ref{dua:connect}.
366:
367: \item [\verb"dsaplog":]
368: Tailoring for the normal logging file.
369: Each entry consists of one or more key/value pairs expressed as:
370: \begin{quote}\small\begin{verbatim}
371: key=value
372: \end{verbatim}\end{quote}
373: The keys are:
374: \begin{describe}
375: \item [\verb"file":]
376: The name of the logfile.
377: \item [\verb"size":]
378: The size in KBytes to which the logfile should be allowed to grow.
379: When the log has reached this size, if the ``zero'' option
380: below is set, then the log will be truncated, otherwise, no further
381: logging will take place.
382: \item [\verb"level":]
383: The levels of logging to be written to this log file.
384: This can be any of the following levels:
385: \begin{describe}
386: \item [\verb"fatal":]
387: fatal errors only
388: \item [\verb"exceptions":]
389: serious, but hopefully temporary, errors
390: \item [\verb"notice":]
391: general logging information
392: \item [\verb"trace":]
393: program tracing
394: \item [\verb"pdus":]
395: pdu tracing
396: \item [\verb"debug":]
397: full tracing of events
398: \item [\verb"all":]
399: log all events
400: \end{describe}
401: For example to have all errors written to the file you will need
402: \begin{quote}\footnotesize\begin{verbatim}
403: dsaplog level=fatal level=exceptions
404: \end{verbatim}\end{quote}
405: \item [\verb"dlevel":]
406: Do not log the specified log level, this is the opposite of the above
407: entry.
408: \item [\verb"dflags"/\verb"sflags":]
409: The flags associated with the log may be set (with \verb"sflag")
410: or unset (with \verb"dflag"). The allowable options are:
411: \begin{describe}
412: \item [\verb"close":]
413: close the log after each entry
414: \item [\verb"create":]
415: create the log file if it doesn't exist
416: \item [\verb"zero":]
417: truncate the file when it gets too big
418: \item [\verb"tty":]
419: copy the logging information to the users tty
420: \end{describe}
421: \end{describe}
422: An example might be:
423: \begin{quote}\footnotesize\begin{verbatim}
424: dsaplog level=notice size=30 file=quipulog dflags=close
425: \end{verbatim}\end{quote}
426: This says log events at ``notice'' level, into the file ``quipulog'', do not
427: let the file grow larger than 30Kbytes, and do not close the file
428: after each logging message.
429:
430: \item [\verb"stats":] Used to control the level of statistical logging
431: (parameters as for \verb+dsaplog+ above).
432:
433: \item [\verb"local\_DIT":]
434: The argument is a distinguished name. When some User Interfaces start, you
435: will be automatically moved to this position in the DIT.
436:
437: \item [\verb"oidformat":]
438: Defines how object identifiers should be printed.
439: Use one of:
440: \begin{quote}\small\begin{verbatim}
441: oidformat short
442: \end{verbatim}
443: \end{quote}
444: to print in short local key form, e.g.,
445: \begin{quote}\small\begin{verbatim}
446: Country
447: \end{verbatim}\end{quote}
448: or,
449: \begin{quote}\small\begin{verbatim}
450: oidformat long
451: \end{verbatim}
452: \end{quote}
453: to print in long object identifier form, e.g.,
454: \begin{quote}\small\begin{verbatim}
455: joint.ds.attributeType.country
456: \end{verbatim}\end{quote}
457: or,
458: \begin{quote}\small\begin{verbatim}
459: oidformat numeric
460: \end{verbatim}
461: \end{quote}
462: to print in numeric form, e.g.,
463: \begin{quote}\small\begin{verbatim}
464: 2.5.4.6
465: \end{verbatim}\end{quote}
466:
467: \item [\verb"photo":]
468: The argument is has two parts, a ``terminal type'' such as
469: ``sun'' or ``xterm'', the second is the name of the process that should
470: handle displaying of photographs, for example
471: \begin{quote}
472: photo xterm Xphoto
473: \end{quote}
474: tells the DUA to call the process Xphoto to handle photograph attributes if
475: the user is on a terminal of type ``xterm''.
476: Handling photographs is described more fully in Section~\ref{dua:photo}.
477:
478: \item [\verb"quipurc":]
479: If the argument has the value \verb"on", then a program called
480: \pgm{dishinit} will be run every time a user without a ``.quipurc''
481: file tries to access the directory. \pgm{dishinit} is discussed
482: in Section~\ref{dishinit}.
483:
484: \item [\verb"sizelimit":]
485: Defines the maximum number of entries a successful list or search should
486: return.
487: For example,
488: \begin{quote}\small\begin{verbatim}
489: sizelimit 20
490: \end{verbatim}\end{quote}
491: sets the DAP default service control ``sizelimit'' to be 20 entries.
492: \end{describe}
493:
494: \chapter {Configuring a DSA}
495:
496: This Chapter discusses how to configure a QUIPU DSA.
497: We recommend that you get a DUA running before you try to
498: get a DSA working.
499:
500: \section{Basic Formats and Structures}
501:
502: All of the information a DSA requires is
503: stored on disk and is text structured. This includes
504: various files (described later), and the local DIT database itself.
505: A complete BNF description of the files
506: is given in Appendix~\ref{bnf} on page~\pageref{bnf}.
507:
508: \subsection {Entry Data Block}
509: \label{edb}
510: A key component of the Directory database is the Entry Data Block, which is
511: described fully in \cite{QUIPU.Design}.
512: Figure \ref{example_edb} shows an example EDB \index{EDB} file containing two ``person''
513: entries.
514:
515: \begin{figure}
516: \smaller
517: \begin{verbatim}
518: MASTER
519: 19891025113003Z
520: CN= Colin Robbins
521: CN= Colin John Robbins
522: Phone= +44-1-387-7050 ext 3683
523: Surname= Robbins
524: Room= G10
525: Userid= crobbins
526: userClass= csstaff
527: rfc822Mailbox= [email protected]
528: Photo= {FILE}crobbins.photo
529: objectClass =thornPerson & quipuObject
530: acl=others # none # attribute # photo
531: acl=self # read # attribute # photo
532:
533: CN= Steve Kille
534: CN= Steve E. Kille & Stephen Kille
535: Phone= +44-1-387-7050 ext 7294
536: Surname= Kille
537: objectClass = thornPerson & quipuObject
538: Room= G24
539: Userid= steve
540: userClass= csstaff
541: rfc822Mailbox= [email protected]
542: \end{verbatim}
543: \caption{Example EDB File}
544: \label{example_edb}
545: \end{figure}
546:
547:
548: An EDB file contains a header, followed by a sequence of entries.
549:
550: The header consists of two lines of text, the first must contain the string
551: ``\verb"MASTER"'', ``\verb"SLAVE"'' or ``\verb"CACHE"'',
552: which indicates whether the data in the EDB
553: file represents the authoritative \verb"MASTER" data, a \verb"SLAVE"
554: copy of the data, or \verb"CACHE"d entries.
555: The next line is a string that describes the version of the EDB. Every
556: time the EDB is altered, the version\index{version - of an EDB} number
557: should be changed, so that
558: \verb"SLAVE" EDBs elsewhere will be automatically updated.
559: When a DSA alters an EDB file, it writes the current (UTC) time in string
560: format as the version string.
561:
562: Following the header are a sequence of blank line separated entries.
563: An entry consists of a set of attributes. The first line is
564: the Relative Distinguished Name
565: \index{RDN} (RDN) of the entry.
566:
567: \subsection{Object Class attribute}
568: Of the attributes an entry may have, the ``objectClass''\index{objectClass attribute}
569: attribute is one of the most important from the configuration point of view.
570: It defines the set of mandatory and optional attributes that must and may be
571: present in the entry.
572: For example, the object class ``person'' insists that there is a ``surname''
573: attribute, and there may optionally be a ``telephone number'' attribute.
574:
575: QUIPU knows about all the standard object classes and attributes, some of
576: those defined by the THORN\index{thorn} project (see Section~\ref{thorn:na}) and
577: those defined by QUIPU itself (see Appendix~\ref{naming}).
578: The full set of object classes and attributes a DSA knows about is
579: defined by the ``oidtables'' which are explained in Section~\ref{oidtables}.
580:
581: An entry can belong to more that one object class.
582: For example, an entry representing an organisation might have the following
583: object class attribute:-
584: \begin{quote}\small\begin{verbatim}
585: objectClass = organization & quipuNonLeafObject
586: \end{verbatim}\end{quote}
587: And a person within that organisation might use the following object class
588: definition:-
589: \begin{quote}\small\begin{verbatim}
590: objectClass = organizationalPerson & quipuObject & thornPerson
591: \end{verbatim}\end{quote}
592: Every entry in a QUIPU DSA should belong to either the ``\verb"quipuObject"''
593: or ``\verb"quipuNonLeafObject"'' object classes, as this allows
594: attributes the DSA needs to be added to an entry.
595:
596: Further, object classes posses the notion of
597: \verb"class inheritance".
598: This means that an object class can be defined as a ``subclass'' of
599: a previously defined object class with additional refinements.
600: As a subclass,
601: the newly defined object ``inherits'' all the semantics of its
602: superclass,
603: in addition to having additional semantics.
604:
605: For example,
606: the Directory defines an object class called \verb"person".
607: This object class defines the attributes which a person in
608: the real world might have.
609: It may be useful to refine this somewhat to talk about persons
610: who have network access.
611: So, we need a new object class, e.g., \verb"netPerson".
612: This can be defined in a straight-forward fashion:
613: \begin{quote}
614: The object class \verb"netPerson" is a subclass of the object class
615: \verb"person" which {\em may\/} contain an additional attribute,
616: \verb"netMailbox".
617:
618: The syntax of an \verb"netMailbox" is a simple string of printable
619: characters which is not case sensitive when performing comparisons.
620: \end{quote}
621:
622: It is a Quipu requirement that every entry that is not a leaf of the DIT
623: should belong to the object class
624: ``\verb"quipuNonLeafObject"''.
625:
626: This class has one mandatory attribute:
627: \begin{describe}
628: \item[masterDSA:]\index{masterDSA attribute}
629: identifies the Directory entity which is responsible
630: for maintaining the MASTER EDB for the children of
631: this entry.
632: The value is a Distinguished Name.
633: \end{describe}
634: There is typically a single MASTER for a particular entry in the tree.
635: Hence, this value is usually single-valued.
636: When an entry is to be modified,
637: the Directory must contact the entity responsible for the MASTER EDB for
638: that entry in order to perform the modification.
639:
640: This class has two optional attributes:
641: \begin{describe}
642: \item[slaveDSA:]\index{slaveDSA attribute}
643: identifies any Directory entities which have
644: authoritative copies of the EDB for the children
645: of this entry.
646: The value is one or more Distinguished Names.
647:
648: \item[treeStructure:]\index{treeStructure attribute}
649: identifies the object classes which may exist
650: immediately below this entry.
651: The value is one or more object classes.
652: See Section~\ref{quipu:schema} for full details
653: of how to set this attribute.
654: \end{describe}
655: Since a fundamental assumption of the Directory is that reads (queries)
656: occur much more frequently than writes (updates),
657: it is common to have several entities containing authoritative copies of an
658: EDB.
659: By keeping copies locally,
660: queries can be answered with less latency.
661:
662: \subsection {Database Structure}
663:
664: All the information held by the Directory in its in-core database, is loaded
665: from disk when the Directory starts.
666: The data on disk is held in a \unix/ tree of EDB files that map
667: the DIT.
668: At every level in the DIT for which the DSA holds data, there is a single
669: file called \file{EDB}\index{EDB file}.
670: If an entry defined in an \file{EDB} file has
671: children, the \file{EDB} file for the children will be found in a
672: sub-directory whose name is the string encoded Relative
673: Distinguished Name of the entry.
674: For example, if an \file{EDB} file has an entry whose RDN is
675: ``ou= Computer Science'', then if the entry ``ou= Computer Science'' has children and is stored locally,
676: it can be found in the file \file{ou=Computer Science/EDB} relative to the current directory.
677: NOTE that the case sensitivity of the sub-directory naming is one of the
678: few areas within QUIPU where string matching is case sensitive.
679: The case of the attribute type is taken from the definition of the attribute
680: in the oid tables, whereas the case of the attribute value is the same as
681: that found in the EDB file.
682:
683: When an entry is modified, the modified \file{EDB} file is re-written to
684: disk. The old \file{EDB} is renamed \file{EDB.bak} to provide
685: a back-up.
686:
687: \subsection{Long Distinguished Names}
688: \label{EDB:mapped}
689: There is a problem with the above method for naming \unix/ sub directories
690: with some versions of \unix/ --- particularly System~V.
691: In these systems directory names are limited in length.
692:
693: To allow for this, \verb"any" distinguished name can be given a mapping
694: name, which will be used as the \unix/ sub-directory name.
695: For example the entry for ``o=University College London'', may be mapped and
696: stored in the file \file{UCL/EDB}.
697: The mapped names are specified in a file \file{EDB.map}\index{EDB.map file},
698: the syntax of which is:
699: \begin{quote}\begin{verbatim}
700: <Distinguished Name> `#' <Mapped name>
701: \end{verbatim}\end{quote}
702: so for the example used above the file will contain:
703: \begin{quote}\begin{verbatim}
704: o=University College London#UCL
705: \end{verbatim}\end{quote}
706:
707: If a name is not found in the mapping file, then the long directory name will
708: be used.
709:
710: When a DSA needs to create a sub-directory (e.g after an add operation)
711: it will use the relative distinguished name for each subdirectory,
712: unless the name is longer than the maximum number of allowed characters
713: (usually 15), in which case it will generate a shorter mapped name.
714:
715: \section {Setting up an Initial DSA}
716:
717: These instructions are assuming that you are trying to set up a DSA with the
718: following characteristics:-
719: \begin{itemize}
720: \item It is the first DSA in an Organisation
721: \item It is not the first DSA in the Country
722: \item It holds a copy of the root EDB
723: \end{itemize}
724:
725: This is found in the example:-
726: \begin{quote}
727: \file{others/quipu/quipu-db/organisation}
728: \end{quote}
729:
730: There are two other examples which might also be used as illustrations for
731: national DSAs and organisational DSAs not holding a copy of the root EDB.
732: These are in :-
733: \begin{quote}
734: \file{others/quipu/quipu-db/national}
735: \end{quote}
736: and
737: \begin{quote}
738: \file{others/quipu/quipu-db/non-root}
739: \end{quote}
740:
741: Note that if you are going to be running a DSA in the United States,
742: then you should skip this section and refer to the document
743: \cite{NYSER.Admin},
744: which is provided in the ISODE documentation set
745: (look in the source tree area for the directory \file{doc/whitepages/admin/}).
746: This document describes turn-key installation mechanisms for DSAs in the
747: United States.
748:
749: To start a DSA with one of these example databases
750: go into the relevant database directory and type:-
751: \begin{quote}\begin{verbatim}
752: $(SBINDIR)ros.quipu -t ./quiputailor
753: \end{verbatim}\end{quote}
754:
755: The \tt -t\rm \ flag tells Quipu to use the tailor file \file{./quiputailor}
756: rather than the default file (\file{quiputailor} in the ISODE \verb"ETCDIR"
757: directory).
758:
759: This will cause the DSA to print some logging information onto the screen,
760: followed by the message
761: \begin{quote}\begin{verbatim}
762: DSA c=GB@cn=toucan has started on localHost=17003
763: \end{verbatim}\end{quote}
764:
765: \begin{figure}
766: \smaller
767: \begin{verbatim}
768: cn=Toucan
769: presentationAddress= localHost=17003
770: edbinfo= #cn=giant tortoise##
771: description= Demonstration slave-root DSA
772: description= Bird with large colourful bill.
773: objectClass= quipuDSA & quipuObject
774: manager= c=GB@o=University College London@ou=Computer Science@cn=Colin Robbins
775: acl= self # write # attributes # acl $ userPassword
776: acl= others # compare # attributes # acl $ userPassword
777: userPassword = toucan
778: quipuVersion= 6.0 Distribution
779: supportedApplicationContext= QuipuDSP & X500DSP & X500DAP
780: \end{verbatim}
781: \caption{Example DSA Entry}
782: \label{DSA:Toucan}
783: \end{figure}
784:
785: The default setup assumes you have TCP/IP access and starts a DSA on the IP
786: address of the local machine (127.0.0.1). If you do not have TCP/IP, you
787: will need to change the address the DSA will attempt to listen on.
788: This is done by editing the file
789: \begin{quote}
790: \file{others/quipu/quipu-db/organisation/c=GB/EDB}
791: \end{quote}
792: The first entry in this file is the entry for a DSA called
793: ``c=GB@cn=Toucan'', which is the name of the DSA we are trying to start (as
794: defined by the ``mydsaname'' entry in quiputailor).
795: The entry is shown in Figure~\ref{DSA:Toucan}.
796: The attribute \verb"presentationAddress" defines the address that the DSA is
797: going to listen to the network on.
798: If you need to listen on a different address, you should change the value of
799: the attribute to the address you want to listen on.
800: For more details of address see \volone/ of this manual and
801: \cite{String.Addresses}, an example of an X.25 address is given below:
802: \begin{quote}\begin{verbatim}
803: presentationAddress= Int-X25(80)=23421920030045
804: \end{verbatim}\end{quote}
805:
806: Having started your DSAs you should be able to connect to it by
807: invoking \pgm{dish}. If you are using the default DSA address, and are
808: using the default \file{dsaptailor} file, then invoking \pgm{dish}
809: without arguments is sufficient.
810: If you are not using the default address or ``dsaptailor'' file, then you
811: will need to edit \file{dsaptailor} in the ISODE \verb"ETCDIR" directory.
812: You should add an entry
813: \begin{quote}\begin{verbatim}
814: dsa_address toucan <presentation address>
815: \end{verbatim}\end{quote}
816: Note that \verb+<presentation address>+ should have {\em exactly} the same
817: value as
818: the \verb+presentationAddress+ attribute in the DSAs entry in the EDB file.
819: Now to contact the DSA use
820: \begin{quote}\begin{verbatim}
821: dish -c toucan
822: \end{verbatim}\end{quote}
823:
824:
825: Once connected to the DSA, try issuing the
826: command:-
827: \begin{quote}\small\begin{verbatim}
828: list "@c=GB@o=University College London@ou=Computer Science"
829: \end{verbatim}\end{quote}
830: You should get a list of four names
831: back:-
832: \begin{quote}\begin{verbatim}
833: 1 commonName=Colin Robbins
834: 2 userid=quipu%commonName=Colin Robbins
835: 3 commonName=Steve Kille
836: 4 commonName=Michael Roe
837: \end{verbatim}\end{quote}
838: If this happens you have a working DSA.
839: (The entry numbered 2, is an example of an RDN with multiple values !)
840:
841: \subsection{Setting up YOUR DSA}
842: The examples are tailored to start a DSA called ``toucan'',
843: and will be sufficient to get an example DSA started,
844: but this will not be of much use when you want to start adding you own data.
845: To allow other DSA to connect to you, you will need a new unique
846: distinguished name for
847: your own DSA.
848: Section~\ref{dsa:connect} describes how to choose a name for your DSA and set
849: up the connections.
850:
851: A DSA needs to find the entry associated with its own name, it will generally
852: be able to find this in the local database (the entry ``cn=toucan''
853: in the file \file{quipu-db/organisation/c=GB/EDB} for example).
854:
855: Having located its own entry, a DSA will know its network
856: address by looking at the \verb+presentionAddress+ attribute,
857: hence it can start listening for operations.
858:
859: But first it must load the database.
860: In its own entry it will have a \verb"edbInfo" attribute, this
861: describes which EDBs the DSA is expected to hold.
862: The format of the \verb"edbInfo" \index{edbInfo attribute} attribute is described fully in
863: Section~\ref{slave_update}, but essentially the first parameter
864: supplied says ``load this EDB''. Thus the attribute
865: \begin{quote}\begin{verbatim}
866: edbInfo = ##
867: edbInfo = c=US@o=The Wollongong Group ##
868: edbInfo = c=GB ##
869: \end{verbatim}\end{quote}
870: requests that the EDB files
871: \begin{quote}
872: \file{quipu-db/EDB}
873: \end{quote}
874: (signified by no data before the first `\verb+#+' sign),
875: \begin{quote}
876: \file{quipu-db/c=US/o=The Wollongong Group/EDB}
877: \end{quote}
878: and
879: \begin{quote}
880: \file{quipu-db/c=GB/EDB}
881: \end{quote}
882: are loaded.
883:
884: There are a few other important attributes your DSAs entry should have, the ``toucan''
885: entry in Figure~\ref{DSA:Toucan} gives examples of the other attributes.
886: They are briefly described below.
887: \begin{describe}
888: \item[description] A Textual message describing the DSA, and the wildlife!
889: \item[quipuVersion] This should contain the version number of the
890: Quipu software you are using. This can be found by using the dish
891: command \verb+squid -version+.
892: \item[manager] The DN of the manager of the DSA, this user will not be blocked by
893: access control when modifying the local database over DAP.
894: \item[supportedApplicationContext] This should always have the value
895: \begin{quote}\begin{verbatim}
896: QuipuDSP \& X500DSP \& X500DAP
897: \end{verbatim}\end{quote}
898: for this version of Quipu.
899: It is used by remote DSAs to decide which protocols your
900: DSA supports, and
901: thus how best to contact it.
902: \end{describe}
903:
904: To connect a DUA to this DSA,
905: try typing \verb"dish", the DUA will try to contact the default DSA.
906:
907: If you have changed the address of the default DSA
908: (by modifying the ``presentationAddress'' attribute of the DSAs entry)
909: you will need to modify the
910: \verb"dsa_address" variable in the file \file{dsaptailor} to tell the DUAs
911: your DSAs address.
912: If you add
913: \begin{quote}\begin{verbatim}
914: dsa_address mydsa <the presentation address>
915: \end{verbatim}\end{quote}
916: to your \file{dsaptailor} file, then
917: \begin{quote}\begin{verbatim}
918: dish -c mydsa
919: \end{verbatim}\end{quote}
920: should connect you to your new DSA.
921:
922: Section~\ref{adding_data} describes how you can add data to you DSA by
923: extending the supplied textual database to include your
924: own data
925: or by sending data to the Directory via the DUA modify operations.
926: This may be done independently from connecting to the global directory.
927:
928: \section {Tailoring}\label{dsa:tailor}
929:
930: On start up the DSA first consults a run time tailor file \index{quiputailor}
931: (the default DSA tailor file is called \file{quiputailor} in the ISODE
932: \verb"ETCDIR" directory, but can be
933: changed with a \verb"-t" parameter to \pgm{ros.quipu};
934: consult \man quipu(8c) for details),
935: which indicates such things as:
936:
937: \begin{itemize}
938: \item
939: name of the DSA
940: \item
941: location of the database
942: \item
943: location and level of the logs that the DSA will produce.
944: \item
945: location of any other DSAs for initial bootstrap
946: \end{itemize}
947:
948:
949: The format is identical to the DUA tailor file
950: described in Section~\ref{dua:tailor}, with the addition of the
951: following options:
952: \begin{describe}
953: \item [\verb"mydsaname":]
954: The distinguished name of the DSA.
955: For example,
956: \begin{quote}\small\begin{verbatim}
957: mydsaname CN=axolotl
958: \end{verbatim}\end{quote}
959: declares this DSA to have the common name of \verb"axolotl".
960:
961: \item [\verb"parent":]
962: This entry consists of a name/address pair of a parent DSA,
963: and is needed only for DSAs not holding the root EDB.
964: The DSA referenced needs to hold a Master or Slave copy of an EDB
965: higher up in the DIT than the highest locally held EDB.
966: If more than one \verb"parent" tailor entries are found, the DSA
967: will chose which DSA to contact. The algorithm for making this
968: choice has not been fully explored yet
969: (currently, the first entry is always used, if this fails the second\ldots).
970: For example,
971: \begin{quote}\small\begin{verbatim}
972: parent C=GB@CN=vicuna Internet=vs1.ucl.cs.ac.uk+50987
973: \end{verbatim}\end{quote}
974: \index{presentation addresses}
975: declares the parent DSA to be ``C=GB@CN=vicuna'' at the
976: indicated address.
977:
978: \item [\verb"stats":]
979: The value has the same format as the \verb"dsaplog" entry described in
980: Section~\ref{dua:tailor}, and is used to control the level of
981: DSA statistical logging.
982:
983: \item [\verb"treedir":]
984: Defines the directory in which the textual database is stored.
985: For example,
986: \begin{quote}\small\begin{verbatim}
987: treedir /usr/etc/quipu-db/
988: \end{verbatim}\end{quote}
989: declares the directory \file{/usr/etc/quipu-db/} to contain the local
990: part of the Directory Information Tree.
991:
992: \item [\verb"update":]
993: The value ``on'' tells the DSA to update SLAVE EDB files when it starts up.
994: See section \ref{slave_update} for further details, by default
995: this parameter is ``off''.
996:
997: \item [\verb"searchlevel":] Defines the level from which users will be able
998: to search the DIT --- default 2 (e.g organisations).
999: If they try to search from higher up, a ``unwilling to perform'' service
1000: error will result.
1001:
1002: \item [\verb"lastmodified":] If `\verb"off"', `\verb+lastmodifiedby+'
1003: attributes will not be added by the DSA when an entry is altered.
1004:
1005: \item[\verb"readonly":] Bring the DSA up in ``read only'' mode --- that is
1006: prevent user modification. Slave updates are still allowed.
1007:
1008: \item [\verb"dspchaining":]
1009: The value ``on'' tells the DSA to chain DSP requests to other DSAs
1010: if necessary.
1011: The default mode of operation is to return a DSA referral.
1012: The full set of issues deciding whether to use chaining or referrals
1013: is discussed in the QUIPU design document (\cite{QUIPU.Design}), and
1014: \cite{QUIPU.Navigate}.
1015:
1016: \item [\verb"adminsize":] The administrative size limit for use on search
1017: and list operations.
1018:
1019: \item[\verb"admintime":] The maximum time allow to spend on a user query.
1020:
1021: \item[\verb"cachetime":] The length of time to keep / use ``cached''
1022: information.
1023:
1024: \item[\verb"conntime":] The length of time to hold a unused connection open.
1025:
1026: \item[\verb"nsaptime":] The length of time to wait before deciding a
1027: connection can not be established for a given NSAP.
1028:
1029: \item[\verb"retrytime":] The length of time before deciding it is worth
1030: attempting to connect to a DSA that could not be contacted earlier.
1031:
1032: \item[\verb"slavetime":] The length of time between attempting to update
1033: slave EDB files.
1034:
1035: \item[\verb"preferdsa":] When a DSA has creates a reference to other DSAs it
1036: tries to discriminate between and chose the "best" DSA to contact.
1037: This variable gives you a handle on controlling the choice. For example the
1038: lines
1039: \begin{verbatim}
1040: preferDSA c=GB@cn=Vicuna
1041: preferDSA cn=Giant Tortoise
1042: \end{verbatim}
1043: tells the DSA to use either ``c=GB@cn=Vicuna'' or ``cn=Giant Tortoise'' in
1044: preference to any other DSA. Further, use the DSA ``c=GB@cn=Vicuna'' rather than
1045: ``cn=Giant Tortoise'' if possible.
1046:
1047: \item[\verb"cainfo":] For authentication.
1048:
1049: \item[\verb"secretkey":] For authentication.
1050:
1051: \item[\verb"bindwindow":] For authentication.
1052:
1053: \item [\verb"isode":]
1054: The argument is an \verb"isodevariable" \verb"isodevalue" pair as would
1055: be found in \file{isotailor}. This is used to ``override'' isotailor
1056: settings.
1057: \end{describe}
1058:
1059: \subsection {Tailoring a Running DSA}
1060: \label{dsa:mgmt}
1061:
1062: The tailoring described above is performed when the DSA is
1063: booted. It is sometimes useful to alter the tailor settings
1064: after the DSA has started without having to bring
1065: the DSA down and rebooting. This can be done by via
1066: the special ``{\bf dsacontrol}'' command in the \man dish(1c) program
1067: as described in Section~\ref{dua:mgmt} on page~\pageref{dua:mgmt}.
1068:
1069: The DUA invokes a modify operation, with a
1070: single special attribute ``dSAControl'' defined in \cite{QUIPU.Design}.
1071: The DSA recognises the special attribute, and provided you are
1072: bound as the manager of the DSA, passes the attribute value to the
1073: appropriate routine.
1074:
1075: \cite{QUIPU.Design} describes this process in full.
1076:
1077: \section {Connection to Other DSAs}
1078: \label{dsa:connect}
1079:
1080: All QUIPU DSAs should be connected. This section describes how you should
1081: configure your DSA to connect to other DSAs in order
1082: to read the data not held locally.
1083: Section \ref{dsa:global} describes how to make sure that other DSAs can access your DSA
1084: (See Appendix~\ref{dsa:sites} on page~\pageref{dsa:sites} for a partial list
1085: of registered QUIPU DSAs.)
1086:
1087: A dynamic approach is used to bootstrap a new DSA.
1088: The ``global master'' DSA is administered at UCL,
1089: and other DSAs should be configured in relation to this one.
1090:
1091: Every DSA needs to know the distinguished name and
1092: presentation address of one
1093: or more DSA's nearer to, or actually holding, the root EDB. This parameter
1094: is supplied in the tailor file (see Section~\ref{dsa:tailor})
1095: under the name \verb"parent".
1096: This information is used by the QUIPU DSA when it can not find a DSAs entry
1097: in the local database, or can find no pointers in the local database to the
1098: whereabouts of the data.
1099: If you hold a \verb"SLAVE" copy of the root EDB, then your
1100: parent should be a DSA that is ``closer'' to the MASTER copy of the root
1101: EDB.
1102:
1103: The example databases are set up with default parents (defined in the file
1104: \file{quipu-db/organisation/quiputailor})
1105: To see if your DSA can contact the ``parent'', connect to
1106: the local test (root holding) DSA using \verb"dish", and type
1107:
1108: \begin{quote}\begin{verbatim}
1109: list @
1110: \end{verbatim}\end{quote}
1111:
1112: This will list the locally held root, now try
1113:
1114: \begin{quote}\begin{verbatim}
1115: list @ -dontusecopy
1116: \end{verbatim}\end{quote}
1117:
1118: This will try to connect to the parent DSA.
1119: If it is successful, there should be a lot more data returned.
1120:
1121: Care should be taken in choosing the parent
1122: DSA. If all DSAs have the same parent
1123: DSA then that DSA will become overloaded.
1124: Typically each site will have several DSAs. One of these should
1125: be the default parent for all the other DSAs, with only one DSA having a
1126: default parent outside the site.
1127:
1128:
1129: When ``walking down'' the DIT, QUIPU needs access to information to tell it
1130: on which DSA the next level of the DIT is stored.
1131: To do this each non-leaf entry MUST have a ``masterDSA''\index{masterDSA attribute}
1132: or ``slaveDSA''
1133: attribute. The value of the attribute is the distinguished name of the DSA
1134: holding the next level of the DIT (it may be your own DSA name, if you hold
1135: the next level as well). If there is no such attribute, QUIPU assumes the
1136: entry is a leaf.
1137: If the information required is not held in the local DSA then QUIPU
1138: chains the request to the named DSA or returns a referral
1139: --- depending upon the mode of operation
1140: (The named DSAs entry is read to establish the
1141: address --- this may mean a connection to another DSA
1142: in-order to read the entry).
1143:
1144: Once you have started your DSA, you should try to connect to other DSAs
1145: using the \verb"DISH" program (this connects to the local DSA, which will
1146: chain requests to other DSAs). Try listing the children of
1147: organisations other than yourself, to find which organisations are connected,
1148: try listing your countries children.
1149:
1150: \subsection {Choosing a Name for Your DSA}
1151: \label{dsa:naming}
1152: Every QUIPU DSA MUST have an entry in the DIT, hence
1153: your DSA will need a unique distinguished name.
1154: The name ``cn=Toucan''
1155: given in the example databases is not unique.
1156: There are two aspects to consider in choosing a name for you DSA.
1157:
1158: This entry is used by other DSAs to identify you DSA, and so is needed if
1159: other DSAs are going to be able to see your DSA.
1160:
1161: Firstly, it is a QUIPU convention that DSAs should be named
1162: after endangered South
1163: American wildlife, and that the entry for the DSA should contain a
1164: description of the animal or plant in question.
1165: Some examples are shown in Table~\ref{wildlife}.
1166: A more comprehensive list can be found in the IUCN's ``Red Book''
1167: \cite{IUCN.Mammal}.
1168:
1169: Secondly, the entry for your DSA must be visible to other DSAs who do not know
1170: how to contact your DSA.
1171: So, the MASTER copy of your DSAs own entry must be held at least one level higher up
1172: in the DIT than the part of the DIT it holds as \verb"MASTER" data.
1173: For example the DSA which holds
1174: ``c=GB @ o=University College London @ ou=Computer Science'',
1175: must be held at the
1176: ``c=GB @ o=University College London'' level
1177: (e.g. ``c=GB @ o=University College London @ cn=wombat'') or above.
1178: Such naming also helps prevent loops as described more fully in
1179: \cite{QUIPU.Design}.
1180:
1181: In practice DSAs should be named fairly high up the tree.
1182: Each country should have at least two DSAs named at the root level.
1183: Each Organisation should have at least two DSA named at the national level.
1184:
1185: \tagtable[tp]{q-1}{Endangered South American Wildlife}{wildlife}
1186:
1187: You should use \pgm{dish} to find out if the name you want is already taken.
1188: For example,
1189: if you are creating a DSA for an organization in Great Britain,
1190: you might use:
1191: \begin{quote}\small\begin{verbatim}
1192: % dish -c "Giant Tortoise"
1193: Welcome to Dish (DIrectory SHell)
1194: Dish -> search @c=GB -filter objectClass=dsa
1195: \end{verbatim}\end{quote}
1196: This will print out the list of names already in use.
1197:
1198: Having chosen a name, you will need to tell your DSA its name, and
1199: make sure it can find an EDB file for its own entry.
1200:
1201: A DSA finds it own name from the ``mydsaname'' variable defined in the file
1202: \file{quiputailor} (see Section~\ref{dsa:tailor} for details).
1203: An example \verb"quiputailor" entry would be:-
1204: \begin{quote}\small\begin{verbatim}
1205: mydsaname: "c=GB@cn=a dsa name"
1206: \end{verbatim}\end{quote}
1207: Having read this name from \verb"quiputailor", a DSA will try to find
1208: the corresponding entry.
1209: The process for doing this is complex, and is
1210: described in full in Section~\ref{dsa:starting}. Essentially the
1211: DSA needs to find the EDB file holding the entry, and hence you MUST
1212: supply it, if supplied correctly it will be found.
1213:
1214: If you hold the EDB that the entry should be in, simply
1215: make sure the entry is in that EDB and then it will be found.
1216: If you do not hold, and do not want to hold the EDB in which your
1217: DSA is named (e.g., your DSA is called \verb"c=GB@cn=toucan" but
1218: you do not hold the EDB \verb"c=GB"), then you should (normally)
1219: supply a cached copy of the EDB which contains only the
1220: entry for the DSA, and not all the others entries the full EDB would have.
1221: If you do not supply it, your DSA will have to rely on others DSAs before it
1222: can start.
1223:
1224: \subsection {Connection to the Global Directory}\label{dsa:global}
1225:
1226:
1227: To enable the global directory to connect to you, you must contact the
1228: manager of the DSA immediately above the node you want to added under.
1229: Supply them with the entry for your DSA, and the top level
1230: entry of the sub-tree
1231: you want to hold.
1232: For example, to add the organisation ``o=foobar'' below ``c=US'',
1233: contact the manager of the DSA holding ``c=US'' as a MASTER, giving them the
1234: entry for ``c=US@o=foobar'' and ``c=US@cn=foobar\_dsa'', assuming
1235: ``c=US@cn=foobar\_dsa'' is the name of your DSA (see Section~\ref{dsa:naming}
1236: on naming a DSA).
1237:
1238: By convention,
1239: to find out who administers the master EDB for a particular node,
1240: run the \man dish(1c) program and retrieve the \verb"manager" attribute
1241: from the entry for the DSA holding that node.
1242:
1243: You can then find a mail address by looking that person up in the directory.
1244:
1245: The following example shows you how to get the mail address of the
1246: manager of the c=GB subtree.
1247:
1248: \begin{verbatim}
1249: % dish
1250: Welcome to Dish (DIrectory SHell)
1251: Dish -> showentry @c=GB -type masterDSA
1252: masterDSA - cn = Giant Tortoise
1253: Dish -> showentry "@cn=Giant Tortoise" -type manager
1254: manager - countryName=GB
1255: organization=University College London
1256: organizationalUnit=Computer Science
1257: commonName=Colin Robbins
1258: Dish -> moveto "@c=gb@o=University College London @
1259: ou=Computer Science @ cn=Colin Robbins"
1260: Dish -> showentry -type rfc822Mailbox
1261: rfc822Mailbox - [email protected]
1262: Dish -> quit
1263: %
1264: \end{verbatim}
1265:
1266: If you want to add data to the root node of the ``global tree''
1267: (e.g., a new country) then you will probably want a copy of the
1268: ROOT EDB (or you might want a copy for other reasons).
1269: The master can be accessed via the FTAM service at UCL as
1270: file \file{$<$PUB$>$/masterEDB}.
1271: (The address of this service is found in the {\bf Preface\/} of this volume.)
1272: If you are unable to access the FTAM service,
1273: a copy of the master can also be obtained from the {\em quipu-support}
1274: address given in Section~\ref{quipu:support}.
1275: Having obtained the root EDB, add the new entries, and mail the new
1276: information to the {\em quipu-support} address given in
1277: Section~\ref{quipu:support}.
1278:
1279: To keep this EDB upto date you should use the ``getEDB''
1280: operation discussed in Section~\ref{slave_update} (this can also be used to
1281: get the EDB in the first place).
1282:
1283: When you think you are connected to the ``global DIT'',
1284: you should test that you are. To do this use \verb"dish" to connect
1285: to a DSA higher than you in the DIT (using the \verb"-call" flag as described
1286: in Section~\ref{dua:tailor}, then see if you can navigate to your
1287: own part of the DIT, and look at your data --- if so
1288: then the DSA is connected.
1289:
1290: \section {Adding more Data}
1291: \label{adding_data}
1292:
1293: Having got a DSA started, and connected to the global DIT, you should start
1294: to add lots of data.
1295: There are many sources of such data, and with just a relatively small amount
1296: of effort this data can be added to the directory.
1297:
1298: There are two ways such data can be added.
1299: First of all you can use one of the DUA programs to bind to the DSA as the
1300: DSA manager, and send data to the directory via the ``add'' and ``modify''
1301: operations (see Sections~\ref{dish:add} and \ref{dish:modify}).
1302: This is probably the best way to add relatively small amounts of data,
1303: or make minor changes to the data.
1304:
1305: To add a large amount of data (i.e., the initial creation of a
1306: large database) if is probably easiest to write a shell script using \unix/
1307: tools such as \verb"awk" and \verb"grep" to create the EDB files directly.
1308: In the next version of the software there will be tools to facilitate this.
1309:
1310: When adding data for users it is advisable to allocate a ``userPassword''.
1311: \index{user password attribute}
1312: Chapter~\ref{Security} describes how to do this.
1313:
1314: \subsection {More on Object Classes}
1315: The only object class discussed so far is the ``quipuDSA'' objectclass.
1316: When you start to add data, you will probably want to add information about
1317: people, sub-divisions of your organisation, and other application entities.
1318: This Section introduces some of the more important object classes, and the
1319: attributes they may contain.
1320: In many cases, only the attribute type is specified, for details of typical
1321: values and the value syntax you should read Chapter~\ref{syntaxes}.
1322:
1323: As already discribed, every entry in the DIT must belong to the object
1324: class \verb+top+, which means every entry must have an \verb+objectClass+
1325: attribute.
1326: Also, every entry in the Quipu DIT should belong to either the
1327: \verb+quipuNonLeafObject+ or \verb+quipuObject+.
1328:
1329: \subsubsection{Person}
1330: This is a base object class used to represent a person.
1331:
1332: There are two mandatory attributes:
1333: \begin{describe}
1334: \item[commonName:]
1335: which gives a (potentially ambiguous) name for
1336: the person.
1337: The value of this attribute is a string usually
1338: containing the person's first and last names; e.g.,
1339: \begin{quote}\small\begin{verbatim}
1340: Marshall Rose
1341: \end{verbatim}\end{quote}
1342: This attribute is usually multi-valued, containing
1343: variations on the first, middle, and last names; e.g.,
1344: \begin{quote}\small\begin{verbatim}
1345: Colin Robbins
1346: Colin John Robbins
1347: Colin J. Robbins
1348: \end{verbatim}\end{quote}
1349: Generally this attribute will supply the
1350: distinguished attribute of the entry.
1351: \item[surName:]
1352: which gives the person's last name.
1353: \end{describe}
1354:
1355: The optional attributes are:-
1356: \begin{quote}\small\begin{verbatim}
1357: userPassword
1358: seeAlso
1359: telephoneNumber
1360: description
1361: \end{verbatim}\end{quote}
1362:
1363: \subsubsection{OrganizationalPerson}
1364: This is a sub-class of \verb+person+ and introduces the following optional
1365: attributes:-
1366: \begin{quote}\small\begin{verbatim}
1367: preferredDeliveryMethod
1368: destinationIndicator
1369: registeredAddress
1370: internationaliSDNNumber
1371: x121Address
1372: facsimileTelephoneNumber
1373: teletexTerminalIdentifier
1374: telexNumber
1375: physicalDeliveryOfficeName
1376: postOfficeBox
1377: postalCode
1378: postalAddress
1379: title
1380: organizationalUnitName
1381: streetAddress
1382: stateOrProvinceName
1383: locality
1384: \end{verbatim}\end{quote}
1385:
1386: \subsubsection{ThornPerson}
1387: like \verb+OrganizationalPerson+, this is also a sub-class of \verb+person+
1388: and introduces the following optional
1389: attributes:-
1390: \begin{quote}\small\begin{verbatim}
1391: homePostalAddress
1392: lastModifiedBy
1393: lastModifiedTime
1394: secretary
1395: homePhone
1396: userClass
1397: photo
1398: roomNumber
1399: favouriteDrink
1400: info
1401: rfc822Mailbox
1402: textEncodedORaddress
1403: userid
1404: \end{verbatim}\end{quote}
1405:
1406: Two example \verb+ThornPerson+ entries are given in Figure~\ref{example_edb} on
1407: page~\pageref{example_edb}.
1408:
1409: \subsubsection{OrganizationalRole}
1410: Entries of this class are used to represent a position or role within an
1411: organization.
1412:
1413: There is one mandatory attribute:
1414: \begin{describe}
1415: \item[commonName:] which gives the name of the role.
1416: The value of this attribute is a string; e.g.,
1417: \begin{quote}\small\begin{verbatim}
1418: PostMaster
1419: \end{verbatim}\end{quote}
1420: \end{describe}
1421:
1422: There are many optional attributes including:
1423: \begin{describe}
1424: \item[roleOccupant:] which is the Distinguished Name of the person
1425: who fulfills the role e.g.,
1426: \begin{quote}\small\begin{verbatim}
1427: c=US@o=NYSERNet Inc.@ou=Operations@cn=Chris Kolb
1428: \end{verbatim}\end{quote}
1429: \end{describe}
1430:
1431: The other optional attributes are:
1432: \begin{quote}\small\begin{verbatim}
1433: seeAlso
1434: preferredDeliveryMethod
1435: destinationIndicator
1436: registeredAddress
1437: internationaliSDNNumber
1438: x121Address
1439: facsimileTelephoneNumber
1440: teletexTerminalIdentifier
1441: telexNumber
1442: telephoneNumber
1443: physicalDeliveryOfficeName
1444: postOfficeBox
1445: postalCode
1446: postalAddress
1447: description
1448: organizationalUnitName
1449: streetAddress
1450: stateOrProvinceName
1451: locality
1452: \end{verbatim}\end{quote}
1453:
1454:
1455: \subsubsection{Alias}
1456: Objects of this class represent an alias to some other entry in the
1457: DIT. It is generaly used when an entity belongs in one or more subtrees of
1458: the DIT, and is used to ``point'' one entry at the other.
1459:
1460: There are two mandatory attributes:
1461: \begin{describe}
1462: \item[commonName:] which gives the name of the alias.
1463: The value of this attribute is a string; e.g.,
1464: \begin{quote}\small\begin{verbatim}
1465: Colin Robbins
1466: \end{verbatim}\end{quote}
1467:
1468: \item[aliasedObjectName:] which is a pointer to another object in the Directory;
1469: e.g.,
1470: \begin{quote}\small\begin{verbatim}
1471: c=GB@o=University College London@ou=Computer Science@cn=Colin Robbins
1472: \end{verbatim}\end{quote}
1473: \end{describe}
1474: There are no optional attributes for this object class.
1475:
1476: An example of an Alias entry is given below:-
1477: \begin{quote}\small\begin{verbatim}
1478: cn= Quipu-support
1479: aliasedObjectName= c=GB@o=University College London@ou=Computer
1480: Science@cn=Incads
1481: objectClass= quipuObject & alias & top
1482: \end{verbatim}\end{quote}
1483:
1484: \subsubsection{OrganizationalUnit}
1485: The \verb+OrganisationalUnit+ object class is used to represent a unit within
1486: your organisation.
1487: There is one mandatory attribute
1488: \begin{describe}
1489: \item[organizationalUnitName:]
1490: which gives the name of the organizational unit.
1491: The value of this attribute is a string; e.g.,
1492: \begin{quote}\small\begin{verbatim}
1493: Research and Development
1494: \end{verbatim}\end{quote}
1495: \end{describe}
1496:
1497: The optional attributes are:-
1498: \begin{quote}\small\begin{verbatim}
1499: userPassword
1500: seeAlso
1501: preferredDeliveryMethod
1502: destinationIndicator
1503: registeredAddress
1504: internationaliSDNNumber
1505: x121Address
1506: facsimileTelephoneNumber
1507: teletexTerminalIdentifier
1508: telexNumber
1509: telephoneNumber
1510: physicalDeliveryOfficeName
1511: postOfficeBox
1512: postalCode
1513: postalAddress
1514: businessCategory
1515: searchGuide
1516: description
1517: streetAddress
1518: stateOrProvinceName
1519: locality
1520: \end{verbatim}\end{quote}
1521:
1522: \subsubsection{Organization}
1523: Objects of this class represent a top-level organizational entity,
1524: such as a corporation, university, government entity, and so on.
1525:
1526: There is one mandatory attribute:
1527: \begin{describe}
1528: \item[organizationName:]
1529: which gives the name of the organization.
1530: The value of this attribute is a string; e.g.,
1531: \begin{quote}\small\begin{verbatim}
1532: NYSERNet Inc.
1533: \end{verbatim}\end{quote}
1534: \end{describe}
1535:
1536: The optional attributes are:-
1537: \begin{quote}\small\begin{verbatim}
1538: userPassword
1539: seeAlso
1540: preferredDeliveryMethod
1541: destinationIndicator
1542: registeredAddress
1543: internationaliSDNNumber
1544: x121Address
1545: facsimileTelephoneNumber
1546: teletexTerminalIdentifier
1547: telexNumber
1548: telephoneNumber
1549: physicalDeliveryOfficeName
1550: postOfficeBox
1551: postalCode
1552: postalAddress
1553: businessCategory
1554: searchGuide
1555: description
1556: streetAddress
1557: stateOrProvinceName
1558: locality
1559: \end{verbatim}\end{quote}
1560:
1561: \subsubsection {domainRelatedObject}
1562: If an object has some relationship to the Internet Domain Name System (DNS),
1563: then this can be represented in the DIT using this objectclass.
1564:
1565: This class has one mandatory attribute:
1566: \begin{describe}
1567: \item[associatedDomain:]
1568: identifies the domain which corresponds to this object.
1569: The value is a domain string, e.g.,
1570: \begin{quote}\small\begin{verbatim}
1571: nyser.net
1572: cs.ucl.ac.uk
1573: \end{verbatim}\end{quote}
1574: \end{describe}
1575:
1576: \subsection {Schemas}
1577: \label{quipu:schema}
1578:
1579: Directories should provide a very flexible tool
1580: which enables any information to be stored. There is a danger that Schemas,
1581: as specified in the OSI Directory, will lead to procrustean directory implementations
1582: which impose unreasonable restrictions. The QUIPU Directory does not, per
1583: se, place restrictions on what can be placed in a DSA.
1584: It does however give control so that managers may control what is stored in the
1585: directory.
1586:
1587: The first aspect of structure is with respect to attributes which may be
1588: present in an entry. A QUIPU DSA will allow an entry to belong to one or
1589: more object classes which are known to the DSA (stored in a table). An
1590: entry will typically have a small number of object classes (e.g., TOP
1591: (implicit) + Person + Organisational Person + QUIPU Object). The DSA will
1592: maintain a table of mandatory and optional attributes for each object class
1593: supported. This will be follow the guidelines of the standard or
1594: specification identifying the object class in question. From this
1595: information, the DSA can determine the permitted and mandatory attributes for a
1596: given entry, by calculating the union of all the object classes of that
1597: entry. Free extension (i.e., the ability to store any attribute) was
1598: rejected, as there does not appear to be a reasonable mechanism to manage
1599: this. However, it is straightforward for managers to create new object
1600: classes as desired.
1601:
1602: \tagrind[htb]{schema}{Schema definition}{schema-py}
1603:
1604: It is important
1605: to allow management control of what is permitted at a given level.
1606: Therefore a ``tree structure''
1607: attribute may be created.
1608: This attribute is defined in Figure~\ref{schema-py}, with the string syntax
1609: discussed in ~\ref{tree_struct}.
1610: This specifies for the level below,
1611: what types of object are permitted.
1612: Each attribute value identifies a class of object which can exist at the level
1613: below, and
1614: defines a set of mandatory and optional object classes.
1615: This can be considered as defining a (private) object class implied by the
1616: combination of these classes.
1617: For each type of object, the attribute types permitted in the RDN are also
1618: listed. This is not checked in QUIPU-6.0
1619: The directory knows about the tree structure attribute, and will
1620: ensure consistency.
1621: When creating an entry, the DSA must check that it conforms to the
1622: treeStructure attribute of the parent entry.
1623: When removing information from a treeStructure attribute, the
1624: Directory will check that all of the children conform to the
1625: modified attribute.
1626:
1627: \subsection {Photograph Attributes}
1628: \label{dua:photo}
1629:
1630: The data that a DSA can hold does not have to be limited to data that can be
1631: represented by printable strings.
1632: Any attribute a QUIPU DSA does not know a string syntax for, it will hold as
1633: a block of ASN.1.
1634: One such attribute is the ``photo'' attribute.
1635: Photographs of people and objects are stored in the directory as a
1636: g3fax encoded block of ASN.1, and are best stored as ``file'' attributes
1637: described in the next Section.
1638: There is an example of a photograph attribute in the example database.
1639: This can be looked at by connecting to the directory with \verb"dish"
1640: and looking at the entry
1641: ``c= GB @ o= University College London @ ou= Computer Science @ cn= Steve Kille"
1642:
1643:
1644: Unless you you have compiled and installed the ``photo'' code as
1645: described in Section~\ref{quipu:install} you will see the message
1646: \begin{quote}\begin{verbatim}
1647: ``No display process defined''
1648: \end{verbatim}\end{quote}
1649:
1650: Having compiled the ``photo'' code, you will need to add a line such
1651: as
1652: \begin{quote}\small\begin{verbatim}
1653: photo xterm Xphoto
1654: \end{verbatim}\end{quote}
1655: to your dsaptailor file (see Section~\ref{dua:tailor})
1656: This says that if the user in logged on to a terminal
1657: of the type \verb"xterm" then use the process \file{g3fax/Xphoto}
1658: in the ISODE \verb"ETCDIR" directory to display the photograph.
1659:
1660: There are display routines provided for the X~window system, SunView,
1661: Tektronix~4014, and ``dumb'' terminals.
1662:
1663: \subsection {File Attributes}
1664: \label{file_attr}
1665: Attributes values are generally stored in the EDB file, and loaded
1666: into memory when the DSA starts.
1667: For some large attributes such a photos, this is not a sensible approach, so the
1668: concept of a ``file'' attribute is introduced.
1669:
1670: If an attribute value is prefixed by \verb"FILE", then the value is assumed
1671: to be stored on disk.
1672: For example if the following were found in an EDB file:-
1673: \begin{quote}\small\begin{verbatim}
1674: photo = {FILE} /usr/local/pictures/steve
1675: \end{verbatim}\end{quote}
1676: then the value for the photo attribute would be read from the file
1677: \begin{quote}
1678: \verb"/usr/local/pictures/steve".
1679: \end{quote}
1680:
1681: The syntax of the data in the file is expected to be the same as
1682: the string syntax, except in the case of ASN and PHOTO attributes which
1683: are expected to be in raw ASN.1.
1684:
1685: If there is not a file name supplied, then a default name is allocated.
1686: The default file name is the RDN of the entry the attribute belongs to
1687: followed by a dot ``.'', followed by the attributeType. This file is expected
1688: to be in the same directory as the EDB file for the entry.
1689: For example the default file for photo attribute, representing the entry
1690: for
1691: ``c= GB @ o= University College London @
1692: ou= Computer Science @ cn= Colin Robbins''
1693: would be:-
1694: \begin{quote}\small\begin{verbatim}
1695: cn=Colin Robbins.photo
1696: \end{verbatim}\end{quote}
1697: in the directory
1698: \begin{quote}\small\begin{verbatim}
1699: quipu-db/c=GB/o=University College London/ou=Computer Science
1700: \end{verbatim}\end{quote}
1701: or equivalent mapped file as described in Section~\ref{EDB:mapped}.
1702:
1703: The process defined so far allows for attribute stored in a EDB in file
1704: format to be read by a DSA.
1705: Writing the attributes back to files if modified/added by a DUA requires
1706: a little more.
1707: The DSA needs to know which attributes should be stored on disk.
1708: This information is supplied in the attribute oidtables which are
1709: defined in Section~\ref{oidtables}.
1710: For example if the following entry was found in the file
1711: \file{oidtable.at} in the ISODE \verb"ETCDIR" directory
1712: then a ``photo'' attributed would always be written
1713: back to disk.
1714: \begin{quote}\small\begin{verbatim}
1715: photo: thornAttribute.7: photo : file
1716: \end{verbatim}\end{quote}
1717:
1718:
1719: \section {How a DSA Starts}
1720: \label{dsa:starting}
1721:
1722: The Section gives a brief description of how a QUIPU DSA starts.
1723: This is intended to help people who have experienced problems in getting
1724: their DSAs started.
1725:
1726: First of all the tailor file \file{quiputailor} in the ISODE \verb"ETCDIR" directory
1727: is read (unless you
1728: specify a different tailor file using the \verb"-t" option to
1729: \pgm{ros.quipu}).
1730: This tells the DSA, amongst other things, its own name, and its parent
1731: DSA(s).
1732:
1733: The first thing a DSA need to do if find its own entry, thus it tries to
1734: load the EDB that should contain it.
1735: If it can not find its own entry, then it will try connecting to the
1736: parent DSA to read its own entry. If this fails the DSA will stop.
1737:
1738: Having found its own entry, the DSA will check to see if it is a cached
1739: entry read from disk, if so it will attempt to read a new version from the
1740: parent --- if successful a new cache EDB file will be written.
1741:
1742: Now the rest of the local DIT can be loaded. Each EDB specified in the
1743: ``edbInfo'' attribute \index{edbInfo attribute} is in turn loaded from disk.
1744:
1745: As each EDB is loaded from disk, it is checked to make sure all the
1746: attributes in the entry are allowed, as defined by the ``objectClass''
1747: attribute, \index{objectClass attribute} and that the tree shape conforms to that defined by the
1748: ``treeStruture'' attribute. \index{treeStructure attribute}
1749: If any EDB fails these checks then the DSA will not start, and an appropriate
1750: message will be logged.
1751:
1752: A check is now made on the \verb"quipuVersion" \index{quipuVersion attribute}
1753: that a DSA entry MUST contain.
1754: If this attribute does not have the same version string as the
1755: running DSA process, a warning message is printed to the logs.
1756: On seeing this message, you should update the version string
1757: in your DSAs entry.
1758: Future version of the software will maintain the attribute for you.
1759:
1760: Having loaded all its data, the DSA will start listening for DAP and DSP
1761: associations.
1762:
1763: \section {Adding more DSAs}
1764:
1765: Many organisations will need to have more than one DSA to meet
1766: their requirements, the Section suggests how you might arrange your
1767: DSAs to get the most out of the system.
1768:
1769: You will almost certainly need at least one DSA that holds a
1770: copy of the root EDB, and your country EDB.
1771: This DSA should also hold the MASTER copy of your organisations own EDB.
1772: Subsequent DSAs that are set up, should have this DSA defined
1773: as one of their parent DSAs.
1774:
1775: For robustness, it is a good idea to have some other DSAs replicating
1776: these EDBs, so that if one local machine or DSA becomes unavailable, then
1777: there is another copy elsewhere that can be used.
1778: EDBs that contain addresses of other DSAs that you may want to contact
1779: regularly should also be replicated, to prevent extra associations
1780: having to be made just to read DSA addresses.
1781: In short, if you know that data from a certain
1782: EDB is going to be accessed a lot, replicate it locally.
1783: Replication does not have a high cost.
1784:
1785: When setting up multiple DSAs be sure to name them as described in
1786: Section~\ref{dsa:naming},
1787: ensure the DSA entries are sufficiently high in the DIT, so that other DSAs
1788: can read the entry, without having to contact the DSA concerned.
1789:
1790: \section {Receiving EDB Updates}
1791: \label{slave_update}
1792: If your DSA holds a slave copy of one or more EDBs, then it can
1793: automatically update these for you.
1794: The current approach is very simple minded, but will be extended for future
1795: versions.
1796:
1797: There are two ways to ask a DSA to update its slave EDBs, either use \pgm {dish}
1798: program and issue a ``dsacontrol --slave'' command --- see
1799: Section~\ref{dua:mgmt}, or set the \verb"quiputailor" parameter
1800: ``update'' to ``on'' (see Section~\ref{dsa:tailor})
1801: --- in which case the DSA will try to update its slaves
1802: when it starts up.
1803:
1804: To update the slaves, the DSA uses the ``edbinfo'' attribute that the DSAs
1805: entry in the DIT MUST have.
1806: This attribute specifies which EDBs you hold, and where to get updates of
1807: the from.
1808: NOTE you do not necessarily have to get updates from a \verb"MASTER" EDB,
1809: a \verb"SLAVE" is acceptable.
1810: In many cases this will be preferable to prevent the
1811: load on the \verb"MASTER" DSA being too high.
1812: For example a ``national'' EDB is likely to be highly replicated,
1813: it would not be a good idea to have just one DSA
1814: handling updates. It would be better to have the load spread over several
1815: DSAs.
1816:
1817: The syntax of the attribute is \index{edbInfo attribute}
1818: \begin{quote}\begin{verbatim}
1819: edbinfo = EDB concerned # get from # send to
1820: \end{verbatim}\end{quote}
1821: It is a multi-valued attribute.
1822:
1823: A few examples:
1824: \begin{quote}\small\begin{verbatim}
1825: # cn=Giant Tortoise # cn=Fruit Bat
1826: c=US # # cn=Fruit Bat
1827: c=US # # c=US@cn=Spectacled Bear
1828: c=US@l=NY # cn=Fruit Bat #
1829: \end{verbatim}\end{quote}
1830: Note that there is no harm to using multiple \verb"eDBinfo" lines,
1831: even if they refer to the same EDB.
1832: These lines indicate that:
1833: \begin{itemize}
1834: \item The ROOT EDB is read from the \verb"cn=Giant Tortoise" DSA,
1835: further the \verb"cn=Fruit Bat" DSA is allowed to read the
1836: ROOT EDB from this DSA.
1837: This is an important point --- A DSA has to explicitly say it will
1838: allow you to update from it, before it will send EDB files.
1839: Thus if you want to pull EDB files from a remote DSA, you will need
1840: to ask the manager to add you DSA to their DSAs ``send to'' field.
1841:
1842: \item The \verb"cn=Fruit Bat" DSA and the \verb"c=US@cn=Spectacled Bear" DSA
1843: are allowed to read the EDB for \verb"c=US".
1844: Note that the second and third line could be combined as:
1845: \begin{quote}\small\begin{verbatim}
1846: c=US # # cn=Fruit Bat$c=US@cn=Spectacled Bear
1847: \end{verbatim}\end{quote}
1848: \item The DSA named \verb"cn=Fruit Bat" supplies the EDB for \verb"c=US@l=NY"
1849: to this DSA.
1850: \end{itemize}
1851:
1852: Some EDB files, such as the ROOT, and country level EDB files are highly
1853: replicated, and having to list all the DSAs that are allowed to pull such EDBs
1854: is too restrictive.
1855: Thus the following syntax can be used as an abbreviation:
1856: \begin{quote}\small\begin{verbatim}
1857: c=US # # c=US
1858: \end{verbatim}\end{quote}
1859: This indicates that the c=US EDB file can be sent to DSA named at the c=US
1860: level of the DIT, for example
1861: \begin{quote}\small\begin{verbatim}
1862: c=US@cn=Wombat
1863: \end{verbatim}\end{quote}
1864: is allowed to pull the EDB, but the following are not:
1865: \begin{quote}\small\begin{verbatim}
1866: cn=Wombat
1867: c=US@o=Foobar Inc.@cn=Wombat
1868: c=GB@cn=Wombat
1869: \end{verbatim}\end{quote}
1870:
1871: Whether to update is decided upon by looking at the version string, if the
1872: two EDB files have a different version string, then the EDB will be updated.
1873:
1874: \section {Tables}
1875: \label {oidtables}
1876: Throughout QUIPU, all the Object Identifiers that need to be specified, are
1877: specified using a string representation, for example:-
1878:
1879: \[\begin{tabular}{|l|l|} \hline
1880: String representation & Object Identifier \\ \hline
1881: attributeType & 2.5.4 \\
1882: surname & 2.5.4.4 \\
1883: streetAddress & 2.5.4.9 \\
1884: organizationName & attributeType.10 \\ \hline
1885: \end{tabular}\]
1886:
1887: A set of Object Identifier tables in the ISODE \verb"ETCDIR" directory are
1888: used to
1889: provide this mapping (see also Section~\ref{isobject} in \volone/).
1890: In general the default table will be sufficient,
1891: this section describes the tables for those who want to extend
1892: the default definitions.
1893:
1894: This basic format is used to build up the specification of general object
1895: identifiers.
1896: This file is by default named \file{oidtable.gen}, and has simple
1897: mappings from string to oid.
1898: These strings can then be used in the definition of further oids (for example
1899: the ``organizationName'' oid in the table above).
1900:
1901: This simple table is extended to give table formats for attributes
1902: This file is by default named \file{oidtable.at}.
1903: Each entry in this table is assumed to represent an attribute, so
1904: in addition to mapping strings onto oids,
1905: it also defines the syntax for that attribute:-
1906:
1907: \[\begin{tabular}{|l|l|l|} \hline
1908: String representation & Object Identifier & Syntax\\ \hline
1909: objectClass:& attributeType.0: &objectclass \\
1910: aliasedObjectName:& attributeType.1: &dn\\
1911: commonName,cn:& attributeType.3: &caseignorestring\\
1912: searchGuide:& attributeType.14: &asn\\
1913: x121Address:& attributeType.24: &numericstring\\
1914: presentationAddress:& attributeType.29: &presentationaddress\\
1915: \hline
1916: \end{tabular}\]
1917:
1918: This says that the attribute named ``objectclass'' represents the oid
1919: ``attributeType.0'' --- using the expansion of ``attributeType'' (
1920: as defined in the
1921: file \file{oidtable.gen}) thus gives the oid ``2.5.4.0''.
1922: The syntax taken by the attribute value is ``objectclass''.
1923:
1924: Similarly an ``aliasedObjectName'' has ``dn'' (DistinguishedName) syntax.
1925: The recognised syntaxes are defined in the BNF in
1926: Appendix~\ref{bnf}.
1927:
1928: After the ``syntax'' an extra optional parameter is allowed;
1929: if this is the string ``\verb"file"'' the the relevant attribute is
1930: designated a file attribute --- see Section~\ref{file_attr} for a
1931: description of file attributes.
1932:
1933:
1934: The file \file{oidtable.oc} defines the object classes\index{object
1935: class} QUIPU knows about.
1936: The file again maps strings onto oids.
1937: Each string is assumed to represent an object class, abd for each it
1938: defines the hierarchy (which object classes it is a subclass of),
1939: the mandatory attributes of the object class, and the optional attributes of
1940: the object class.
1941:
1942: For example the entry
1943: \begin{quote}\small\begin{verbatim}
1944: quipuObject: quipuObjectClass.2 : top : acl : \
1945: masterDSA, slaveDSA, treeStructure
1946: \end{verbatim}\end{quote}
1947:
1948: defines ``quipuObject'' to be an objectClass represented by the oid
1949: ``quipuObjectClass.2''.
1950: It is a SUBCLASS of the object class ``top''.
1951: An entry having this object class MUST have the attribute ``acl'', and MAY
1952: have the attributes ``masterDSA'', ``slaveDSA'' and ``treeStructure''
1953: (NOTE The similarity between this definition and the ASN.1 definition of
1954: a ``quipuObject'' in Appendix \ref{naming}).
1955:
1956: To allow for definitions of ``attribute sets'', there is a simple
1957: MACRO facility provided, for example, using the MACRO
1958: \begin{quote}\small\begin{verbatim}
1959: localeAttributeSet = localityName, streetAddress ...
1960: \end{verbatim}\end{quote}
1961: every occurrence of ``\verb"localeAttributeSet"'' will be replace by the right
1962: hand side expression.
1963:
1964:
1965: With the definition of the ``string'' form of the oid it is also possible
1966: to specify ONE abbreviation for the name.
1967: The standard tables use the following abbreviations:-
1968:
1969: \[\begin{tabular}{|l|l|}
1970: \hline
1971: c & countryName \\
1972: o & organizationName \\
1973: ou & organizationalUnitName \\
1974: cn & commonName \\
1975: co & friendlyCountryName \\
1976: \hline
1977: \end{tabular}\]
1978:
1979: The abbreviated name may be used anywhere the full name would be allowed.
1980:
1981:
1982: Every entry stored in the QUIPU DSA is checked against these tables to see if
1983: the attributes supplied are allowed in the entry, to make sure the mandatory
1984: attributes are present, and the attributes themselves have the correct syntax.
1985:
1986: If you wish to add you own definitions to the tables you should add them to
1987: the files
1988: \file{isode/dsap/oidtable.at.local},
1989: \file{isode/dsap/oidtable.oc.local} and
1990: \file{isode/dsap/oidtable.gen.local}
1991: in that way, if a new set of tables are issued, you local entries will be
1992: preserved.
1993:
1994: \section{More Help Installing Quipu}
1995: Contact ``quipu-support'',
1996: the mail address is given in Section~\ref{quipu:support}.
1997:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.