Annotation of 43BSDReno/contrib/isode-beta/doc/manual/q-dsa.tex, revision 1.1

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: 

unix.superglobalmegacorp.com

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