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