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

1.1       root        1: % run this through LaTeX with the appropriate wrapper
                      2: 
                      3: \chapter {Using the Quipu Library}
                      4: 
                      5: This part of the manual is written for implementors who wish to use
                      6: the \man libquipu(3n) library.
                      7: 
                      8: The library provides some routines to manage the data returned by the DUA
                      9: procedure calls described in Chapter~\ref{DUA:proc}.
                     10: 
                     11: 
                     12: \section{The Entry Structure}
                     13: 
                     14: The \verb"Entry" structure is used by the Quipu DSA to store the data
                     15: in the local DIT.  
                     16: This structure can also be used by a DUA to cache information from a
                     17: successful read operation, and so the structure is described.
                     18: In fact, this is how \pgm{dish} and \pgm{widget} maintain their caches.
                     19: 
                     20: The structure is shown below,
                     21: many of the fields are not appropriate to a DUA, but are briefly described for
                     22: completeness.
                     23: 
                     24: \begin{quote}\index{Entry}\small\begin{verbatim}
                     25: typedef struct entry {
                     26:     RDN              e_name;
                     27:     Attr_Sequence    e_attributes; 
                     28:     char             e_leaf;         
                     29:     char             e_complete;     
                     30:     int              e_data;         
                     31: #define E_DATA_MASTER             1
                     32: #define E_TYPE_SLAVE              2
                     33: #define E_TYPE_CACHE_FROM_MASTER  3
                     34: #define E_TYPE_CONSTRUCTOR        4
                     35:     char              e_allchildrenpresent;
                     36:     struct acl      * e_acl;         
                     37:     DN                e_alias;        
                     38:     struct dsa_info * e_dsainfo; 
                     39:     char            * e_edbversion;
                     40:     AV_Sequence       e_master;        
                     41:     AV_Sequence              e_slave;  
                     42:     struct entry    * e_sibling;    
                     43:     struct entry    * e_parent;
                     44:     struct entry    * e_child;
                     45:     time_t            e_age;
                     46:     char              e_lock;         
                     47: } entry, *Entry;
                     48: \end{verbatim}\end{quote}
                     49: 
                     50: \begin{describe}
                     51: \item [\verb"e\_name":] The RDN of the entry, to find the DN, use the routine
                     52: \begin{quote}\small\begin{verbatim}
                     53: DN get_copy_dn (entryptr)
                     54: Entry entryptr;
                     55: \end{verbatim}\end{quote}
                     56: \item [\verb"e\_attributes":] The attributes returned by the DSA.
                     57: \item [\verb"e\_leaf":] Set to \verb"TRUE" if the entry is known to be a leaf.
                     58: \item [\verb"e\_complete":] Set to \verb"TRUE" if it is know that we have
                     59: ALL the attributes.
                     60: \item [\verb"e\_data":] This takes one of four values. in the DUA only two
                     61: apply. \verb"E_TYPE_CACHE_FROM_MASTER" implies the entry has data that has
                     62: been read from the DSA.
                     63: \verb"E_TYPE_CONSTRUCTOR" is used when the entry has been ``made'' by the
                     64: caching mechanism to fill in a missing part of the DIT on the way down to 
                     65: another entry.  An entry of this type will contain no data except form the
                     66: RDN of the entry.
                     67: \item [\verb"e\_allchildrenpresent":] Set to \verb"TRUE" when it is known
                     68: that all the children are held.  
                     69: This is a DSA specific field.
                     70: \item [\verb"e\_acl":] A pointer to the ``Access Control List'' attribute.
                     71: \item [\verb"e\_alias":] Set to \verb"TRUE" if the entry represents an alias.
                     72: This is a DSA specific field.
                     73: \item [\verb"e\_dsainfo":] pointers to the ``EDBInfo'' and
                     74: ``PresentationAddress'' attribute of entries representing DSAs.
                     75: \item [\verb"e\_edbversion":]
                     76: This is a DSA specific field representing the EDB version number of the
                     77: children.
                     78: \item [\verb"e\_master":] Pointer to the ``MasterDSA'' attribute.
                     79: \item [\verb"e\_slave":] Pointer to the ``SlaveDSA'' attribute.
                     80: \item [\verb"e\_sibling":] Pointer to other nodes at this level in the tree.
                     81: \item [\verb"e\_parent":] Pointer to the parent entry.
                     82: \item [\verb"e\_child":] Pointer to the children.
                     83: \item [\verb"e\_age":] If the data type is \verb"E_TYPE_CACHE_FROM_MASTER",
                     84: then the entry is time stamped. This enables the cache to be `timed out'.
                     85: NOTE in a DUA all entries are cached!
                     86: \item [\verb"e\_lock":] This field has a dual purpose! In the DSA it is used
                     87: to prevent an entry from being modified.  In the DUA, if \verb"FALSE", then
                     88: is suggests that in the field \verb"e_attributes" there are only the
                     89: attribute types for some attributes, this is a result of caching an results
                     90: from an operation in which the entry info selection requested that
                     91: attribute type only were returned (see Section~\ref{eis}).
                     92: \end{describe}
                     93: 
                     94: Using this structure a tree, mapping the DIT can be built up.
                     95: The tree is rooted by the external \verb"Entry" ``\verb"database_root"''.
                     96: This entry will NEVER have any attributes or siblings, ONLY children.
                     97: 
                     98: \section {Caching Results}
                     99: 
                    100: There are four routines to create a cache from results of DAP operations:-
                    101: 
                    102: To cache results returned from a \verb"read" or \verb"search" operation call
                    103: \begin{quote}\index{cache\_entry}\small\begin{verbatim}
                    104: cache_entry (ptr, complete, vals)
                    105: EntryInfo      *ptr;
                    106: char            complete;
                    107: char            vals;
                    108: \end{verbatim}\end{quote}
                    109: 
                    110: The \verb"complete" parameter should be \verb"TRUE" if all attribute were requested
                    111: and returned.
                    112: 
                    113: The \verb"vals" parameter should be \verb"TRUE" if the attribute values were
                    114: asked for.
                    115: 
                    116: The external \verb"Entry" ``\verb"current_entry"'' will be a pointer to 
                    117: the newly created entry.
                    118: 
                    119: To remove an entry from the cache use:-
                    120: \begin{quote}\index{delete\_cache}\small\begin{verbatim}
                    121: delete_cache (adn)
                    122: DN              adn;
                    123: \end{verbatim}\end{quote}
                    124: 
                    125: \section{Finding Data in the Cache}
                    126: 
                    127: The procedure 
                    128: \begin{quote}\index{local\_find\_entry}\small\begin{verbatim}
                    129: Entry local_find_entry (object,deref)
                    130: DN                      object;
                    131: char                    deref;
                    132: \end{verbatim}\end{quote}
                    133: is used to find an entry in the cache.
                    134: If the entry exists, it will be returned, otherwise \verb"NULLENTRY"
                    135: will be returned.
                    136: \verb"object" is the DN of the entry you want to find.
                    137: If \verb"deref" is \verb"TRUE" then any aliases encountered in trying 
                    138: to find the entry will be de-referenced.
                    139: 
                    140: \section {Caching List Results}
                    141: List results are cached slightly differently, as only the RDN is known.
                    142: \begin{quote}\index{cache\_list}\small\begin{verbatim}
                    143: cache_list (ptr, prob,dn,sizelimit)
                    144: struct subordinate *ptr;
                    145: int             prob;
                    146: DN             dn;
                    147: int            sizelimit;
                    148: \end{verbatim}\end{quote}
                    149: The parameters are as follows:-
                    150: \begin{describe}
                    151: \item [\verb"ptr":] A pointer to the subordinates returned by the search.
                    152: \item [\verb"prob":] The \verb"srr_limitproblem" field of the search results, see
                    153: Section~\ref{proc_search}.
                    154: \item [\verb"dn":] The DN of the entry that has been listed.
                    155: \item [\verb"ptr":] The \verb"svc_sizelimit" field of the common argument of
                    156: the list argument (see Section~\ref{common_args}).
                    157: \end{describe}
                    158: 
                    159: To inspect the cache use
                    160: \begin{quote}\small\begin{verbatim}
                    161: struct list_cache *find_list_cache (dn,sizelimit)
                    162: DN dn;
                    163: int sizelimit;
                    164: \end{verbatim}\end{quote}
                    165: The \verb"sizelimit" parameter is the sizelimit you would send in the list
                    166: request.
                    167: 
                    168: This returns a \verb"list_cache" structure, if the result is NULL, then the
                    169: entry is not cached, of did not have ``sizelimit'' results.
                    170: \begin{quote}\small\begin{verbatim}
                    171: struct list_cache {
                    172:        DN              list_dn;
                    173:        struct subordinate *list_subs;
                    174:        struct subordinate *list_sub_top;
                    175:        int             list_count;
                    176:        int             list_problem;
                    177:        struct list_cache *list_next;
                    178: };
                    179: \end{verbatim}\end{quote}
                    180: The subordinates can be found in \verb"list_sub_top".
                    181: The other field should be ignored, as they are for internal management only.
                    182: 
                    183: 
                    184: \section {Changes}
                    185: 
                    186: To conclude this part of the Manual, a brief summary of the changes between the 
                    187: \man libdsap(3n) library supplied with ISODE-5.0 and the version ISODE-6.0
                    188: is given.
                    189: The aim is to make it as simple as possible to get code you may have
                    190: developed with ISODE-5.0 working with ISODE-6.0.
                    191: 
                    192: The method of handling attributes has changed at the lowest level.
                    193: This means there are two changes you need to make:
                    194: \begin{itemize}
                    195: \item
                    196: To load the new syntax handlers you should call \verb+quipu_syntaxes()+
                    197: (as discussed in Section~\ref{quipusyntaxes}).
                    198: \item
                    199: In a few places in-line structures have been replaced with structure pointers
                    200: and vice-versa.  In the preceding Chapters footnotes indicate the where this
                    201: has happened.  You are reminded of the \pgm{lint} program, which is
                    202: particular useful for catching changes like these, especially when the
                    203: effected structures are used in procedure calls.
                    204: \end{itemize}
                    205: 
                    206: Procedure calls to support the method of binding used in ISODE-5.0 are still
                    207: supplied, but you are advised to look at Section~\ref{dap:bind} which
                    208: discusses various alternatives which make the process more secure.
                    209: 
                    210: If your program used \verb+log_stat+, previously you had to define the LOG
                    211: in your code.  This is now done as part of \verb+dsap_init()+ and so is not
                    212: required.
                    213: 
                    214: If you have any problems you are should contact \verb+quipu-support+, the
                    215: address is given in Section~\ref{quipu:support}.

unix.superglobalmegacorp.com

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