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

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

unix.superglobalmegacorp.com

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