|
|
1.1 ! root 1: ! 2: \chapter {General Design} ! 3: ! 4: \section {Overview} ! 5: ! 6: This chapter describes general decisions. ! 7: In particular, issues relating to use of ! 8: the OSI Directory are covered, ! 9: rather than ! 10: system implementation decisions. ! 11: However, the two are somewhat bound up. ! 12: Attention is drawn to the protocol extensions defined in section ! 13: \ref{edb-ros}. Note that this does {\em not} affect interactions with ! 14: non-QUIPU DSAs (or DUAs). ! 15: The following aspects of the OSI Directory are not handled in QUIPU 5.0. ! 16: ! 17: \begin {itemize} ! 18: \item The protocol elements for support of directory use of authentication ! 19: are handled in a conformant manner, but the associated services are not ! 20: available to the end user. ! 21: ! 22: \item ! 23: Search is always supported by multicasting. This does ! 24: {\em not} affect the basic service offered to the user, but means that ! 25: prohibition of chaining is not possible in all cases. ! 26: ! 27: \item For full subtree searches the filter is not applied to the base object. ! 28: ! 29: \item Partial Outcome Qualifier is not supported for List. ! 30: ! 31: \item There are some aspects of distributed operation, where interaction ! 32: with another conforming system would not be fully general. In particular, ! 33: QUIPU might not be able to be configured with references to point at a ! 34: complex configuration where not all sibling entries are held. ! 35: \end {itemize} ! 36: ! 37: Otherwise, QUIPU 5.0 is believed to conform to the standard. ! 38: ! 39: \section {Service Controls} ! 40: ! 41: QUIPU use of service controls conforms to the OSI Directory. ! 42: Comments are made on those ! 43: controls where QUIPU makes a choice with respect to some option ! 44: given by the OSI Directory. ! 45: ! 46: \begin {description} ! 47: \item [preferChaining] ! 48: Chaining will be done. ! 49: ! 50: \item [chainingProhibited] ! 51: Chaining will not be done. ! 52: For some cases of the search operation, this means that the QUIPU Directory ! 53: Service will not be able to provide the service, and will return a ! 54: ``chaining required'' error. ! 55: ! 56: ! 57: \item [localScope] ! 58: The scope will be restricted to the DSA concerned (i.e., no chaining will be ! 59: done). ! 60: ! 61: \item [dontUseCopy] If this is set, the master data will be used. This may ! 62: have a significant impact on performance for operations on entries which are ! 63: high up the tree and for the DSAs which master this information. These issues ! 64: need study. ! 65: ! 66: ! 67: \item [dontDereferenceAliases] ! 68: Followed as per the OSI Directory. ! 69: ! 70: \item [priority] ! 71: This will be used to help control scheduling within the DSA, but is not done ! 72: in QUIPU 5.0. ! 73: ! 74: \item [timeLimit] ! 75: Followed as per the OSI Directory. ! 76: ! 77: \item [sizeLimit] ! 78: Followed as per the OSI Directory. ! 79: ! 80: \item [scopeOfReferral] ! 81: The OSI Directory is followed, although QUIPU does not make use of this control. ! 82: \end {description} ! 83: ! 84: ! 85: ! 86: \section {Access Control} ! 87: \label {acl-def} ! 88: ! 89: The term Access Control is used to mean the control of user access ! 90: to data. Access Control relies on authentication, which is discussed ! 91: separately. ! 92: Although there is no Access Control defined in the standard, it is ! 93: essential for any real system. The QUIPU directory handles this by ! 94: specifying an Access Control List (ACL) for each entry, which is stored as ! 95: an attribute. ! 96: This mechanism allows for access control to be added without change ! 97: of protocol. ! 98: The ACL is defined in a manner which also ! 99: allows specification of rights to update the ACL itself. ! 100: The Directory System knows about this attribute, and ! 101: so can make choices based on it. QUIPU Access Control is designed so that it is {\em ! 102: not} required, and so will not prevent QUIPU interworking with other ! 103: systems. Non-QUIPU DUAs will not in general be able to specify or update ! 104: QUIPU Access Control Lists, as they will not support the special syntax. ! 105: The syntax ! 106: is given in Figure~\ref{acl-py}. ! 107: ! 108: \tagrind {acl}{ACL definition}{acl-py} ! 109: \clearpage ! 110: ! 111: Access control is performed by a structure ACL, which is implemented as an ! 112: attribute stored with each entry. The ACL contains a number of elements ! 113: called ACLInfo, which are applied to various objects. ! 114: The ACLInfo is ! 115: composed of two components: the AccessSelector and a list of Access ! 116: Categories. ! 117: The ACLSelector ! 118: describes which DUAs are granted rights, and has four types: ! 119: ! 120: \begin {itemize} ! 121: \item ! 122: The DUA corresponding to the entry. ! 123: \item ! 124: All DUAs (i.e., public access) ! 125: \item ! 126: Specific subtrees of the DIT - typically this will be a single DUA (i.e., a ! 127: degenerate subtree). ! 128: This can also be used to restrict information to within Organisations. ! 129: \item ! 130: Groups of DUAs. ! 131: In this case, the entry specified must be of object class ``Organisational ! 132: Role'' or ``Group of Names''. ! 133: The DUAs with rights are identified by the ``Role Occupant'' and ``Member'' ! 134: attributes respectively. ! 135: \end {itemize} ! 136: ! 137: The AccessCategories can be applied to Attributes, Entries, and Children, in ! 138: the manner described below. ! 139: The values of access category are ordered, and a given level implies all ! 140: previous rights. ! 141: ! 142: \subsection {ACLInfo applied to Attributes} ! 143: ! 144: This describes the semantics of each Access Category between the identified ! 145: attribute and DUAs identified by the AccessSelector. ! 146: ! 147: \begin {description} ! 148: \item [none] ! 149: ! 150: This prevents any knowledge of the attribute. ! 151: \item [detect] ! 152: ! 153: Detect if the attribute is present. ! 154: \item [compare] ! 155: Compare given value with all attribute values ! 156: \item [read] ! 157: Read all attribute values ! 158: \item [add] ! 159: As for read, and allows addition of new values. ! 160: \item [write] ! 161: As for add, and allows removal (and thus modification) of ! 162: existing values. ! 163: \end {description} ! 164: ! 165: \subsection {ACLInfo applied to entries} ! 166: ! 167: \begin {description} ! 168: \item [none] ! 169: ! 170: This prevents any knowledge of the entry. ! 171: \item [detect] ! 172: ! 173: This allows the existence of the entry to be determined. ! 174: \item [compare] ! 175: This allows the RDN to be compared. ! 176: \item [read] ! 177: This allows the RDN to be read. ! 178: \item [add] ! 179: This allows new attributes to be added. ! 180: \item [write] ! 181: This allows the RDN to be changed, and attributes to be ! 182: deleted. ! 183: \end {description} ! 184: ! 185: \subsection {childACL} ! 186: ! 187: This applies to the level ! 188: {\em immediately} ! 189: below the entry in question. ! 190: There is no implication for levels further down. ! 191: ! 192: \begin {description} ! 193: \item [none] ! 194: The DUA is completely blocked from downwards progress. ! 195: \item [detect] ! 196: ! 197: This allows admission of the existence of lower layers (e.g., a read ! 198: would return securityError rather than name error). ! 199: \item [compare] ! 200: This allows exactly specified RDNs to be matched, but no more. ! 201: \item [read] ! 202: This allows child information to be listed, and for searching of the DIT ! 203: below this entry. ! 204: \item [add] ! 205: This allows new children to be added. ! 206: \item [write] ! 207: Add access, and allows deletion of existing children. ! 208: \end {description} ! 209: ! 210: The add access category is subtly different when applied to the (single valued) ! 211: ACL attribute. ! 212: A DUA which has add access to the ACL may modify the ACL Attribute ! 213: extend access to any ! 214: attribute. ! 215: It may not give more access rights to any attribute or default than the DUA ! 216: itself has (i.e., if you have write access to an attribute, you can ! 217: permit someone else to have write access to it {\em if} you have add access to ! 218: the ACL). ! 219: ! 220: \subsection {Example Use of ACLs} ! 221: ! 222: An example of how this structure might be used is given. ! 223: An organisation might give a leaf attribute the following values: ! 224: ! 225: \begin {itemize} ! 226: \item ! 227: ChildACL is not applicable, and so omitted. ! 228: \item ! 229: EntryACL is \{other, read\} + \{group = DSA Managers, write\}, which ! 230: restricts addition of new attributes to managers. ! 231: \item ! 232: DefaultAttributeACL is \{other, read\} + \{self, write\}, which leads to ! 233: publicly readable attributes modifyable by the owner. ! 234: \item ! 235: Common Name is ! 236: \{other, read\} + \{group = DSA Managers, write\}, which restricts name ! 237: changes to the manager. ! 238: \item ! 239: ACL is \{self, add\} + \{group = DSA Managers, write\}, which allows the ! 240: user to grant access, but not to reduce it. ! 241: \item ! 242: Password is \{self, write\} + \{group = DSA Managers, write\} ! 243: \end {itemize} ! 244: ! 245: It can be seen that this scheme gives a great deal of flexibility, ! 246: without the addition of any protocol elements. ! 247: The encoding is designed so that the volume overhead is not excessive ! 248: for sensible access policies. ! 249: ! 250: \subsection {An issue for further study} ! 251: ! 252: One serious problem not tackled is that of allowing limited access, where ! 253: some level of matching is allowed, but exhaustive listing by repeated query ! 254: is made prohibitively expensive. No satisfactory solution has been devised, ! 255: and so this problem is being left for further study. ! 256: ! 257: ! 258: ! 259: \section {Authentication} ! 260: ! 261: QUIPU takes a minimal approach to authentication. ! 262: Simple Authentication is seen as a minimum, which is straightforward to ! 263: implement. ! 264: The Password attribute is used. ! 265: ! 266: Simple Authentication is used between DUA and DSA. ! 267: Simple authentication will be used between DSAs in QUIPU 6.0\footnote{It is ! 268: not used in QUIPU 5.0, because the performance degradation has proven to be ! 269: too high prior to the introduction of on-disk caching as described in ! 270: Section~\ref{disk-cache}.}. ! 271: This is felt to be the minimum level acceptable for some aspects of ! 272: the planned usage (e.g., user modification of data). ! 273: Other uses of QUIPU will not require authentication (e.g., lookup of ! 274: some OSI information). ! 275: DSAs authenticate each other to provide the basis ! 276: for mutual trust. ! 277: The first DSA will authenticate the DUA on the basis of password plus ! 278: DUA name in the A\_Associate, as described in the OSI Directory. ! 279: Subsequent DSAs will trust the DUA parameter given in the DSP (i.e. ! 280: there is mutual trust between QUIPU DSAs, with DSAs performing mutual ! 281: authentication). ! 282: Looping (livelock) is possible, as each DSA must use the directory to ! 283: perform authentication. ! 284: This will be prevented by the DSA naming procedures described in the ! 285: Section~\ref{dsa-naming} on page \pageref{dsa-naming}, as well as by use of ! 286: DSA Trace. ! 287: ! 288: \section {Schemas} ! 289: ! 290: Directories should provide a very flexible tool ! 291: which enables any information to be stored. There is a danger that Schemas, ! 292: as specified in the OSI Directory, will lead to procrustean directory implementations ! 293: which impose unreasonable restrictions. The QUIPU Directory will not, per ! 294: se, place restrictions on what can be placed in a DSA. ! 295: It will give control so that managers may control what is stored in the ! 296: directory. ! 297: ! 298: \subsection {Matching} ! 299: ! 300: There is a need to understand Attribute Syntaxes in order to perform correct ! 301: matching. ! 302: The QUIPU DSA ``knows'' about a limited number of standard ! 303: syntaxes, and some special ones defined in this document. ! 304: These receive an optimised internal encoding, and special (typically ! 305: faster) matching. ! 306: Any other structures are mapped to one of the known syntaxes (if the ASN.1 is ! 307: unambiguous --- e.g. ``PrintableString'' is unambiguous, whereas ``[0] IMPLICIT ! 308: PrintableString'' is not), or treated as generic ASN.1. ! 309: ! 310: The supported standard syntaxes are: ! 311: ! 312: \begin {enumerate} ! 313: \item Case Exact String. ! 314: \item Case Ignore String. ! 315: \item Numeric String. ! 316: \item Distinguished Name. ! 317: \item Boolean ! 318: \item Integer ! 319: \item UTC Time ! 320: \item Object Identifier ! 321: \item Presentation Address. ! 322: \end {enumerate} ! 323: ! 324: Other supported syntaxes are: ! 325: ! 326: \begin {enumerate} ! 327: \item ASN.1. This is a general catch-all, and will deal with most syntaxes ! 328: which do not have ``special'' rules (see below). ! 329: \item Object Class (some special QUIPU handling) ! 330: \item QUIPU ACL ! 331: \item QUIPU Schema (Tree Structure). ! 332: \item QUIPU Update Control. ! 333: \item Photographs encoded in G3 Fax ! 334: \end {enumerate} ! 335: ! 336: Generic attributes stored as ASN.1, will usually be matched correctly, with ! 337: the following exceptions: ! 338: ! 339: \begin {itemize} ! 340: \item ! 341: There is an IMPLICIT Set in the ASN.1. The DSA will not detect the ! 342: set, and so will not know to match components in arbitrary order. ! 343: ! 344: \item ! 345: If special matching rules apply: for example, special rules to ! 346: determine equivalence of telephone numbers. Such rules would need ! 347: to be represented by code in the DSA. ! 348: \end {itemize} ! 349: ! 350: \subsection {Structure} ! 351: ! 352: The first aspect of structure is with respect to attributes which may be ! 353: present in an entry. A QUIPU DSA will allow an entry to belong to one or ! 354: more object classes which are known to the DSA (stored in a table). An ! 355: entry will typically have a small number of object classes (e.g., TOP ! 356: (implicit) + Person + Organisational Person + QUIPU Object). The DSA will ! 357: maintain a table of mandatory and optional attributes for each object class ! 358: supported. This will be follow the guidelines of the standard or ! 359: specification identifying the object class in question. From this ! 360: information, the DSA can determine the permitted and mandatory attributes for a ! 361: given entry, by calculating the union of all the object classes of that ! 362: entry. Free extension (i.e., the ability to store any attribute) was ! 363: rejected, as there does not appear to be a reasonable mechanism to manage ! 364: this. However, it is straightforward for managers to create new object ! 365: classes as desired. ! 366: ! 367: It is important ! 368: to allow management control of what is permitted at a given level. ! 369: Therefore a ``tree structure'' ! 370: attribute may be created. ! 371: This attribute is defined in Figure~\ref{schema-py}. ! 372: This specifies for the level below, ! 373: what types of object are permitted. ! 374: Each attribute value identifies a class of object which can exist at the level ! 375: below, and ! 376: defines a set of mandatory and optional object classes. ! 377: This can be considered as defining a (private) object class implied by the ! 378: combination of these classes. ! 379: For each type of object, the attribute types permitted in the RDN are also ! 380: listed. This is not checked in QUIPU 5.0. ! 381: The directory knows about the tree structure attribute, and will ! 382: ensure consistency. ! 383: When creating an entry, the DSA must check that it conforms to the ! 384: treeStructure attribute of the parent entry. ! 385: When removing information from a treeStructure attribute, the ! 386: Directory will check that all of the children conform to the ! 387: modified attribute. ! 388: There may be some synchronisation problems in this area, if the tree ! 389: structure was being modified at the same time as other data was added. ! 390: However, this is a pathological case, and ignored by QUIPU at runtime. ! 391: Management tools will be able to detect inconsistency at a later point. ! 392: ! 393: ! 394: \tagrind[htb]{schema}{Schema definition}{schema-py} ! 395: ! 396: ! 397: It is important to provide a mechanism whereby a user can examine the ! 398: type structure of the DIT. ! 399: This is also achieved by the same mechanism. ! 400: As well as giving the manager control, it allows the user to ! 401: determine the (potential) shape of the tree, by reading and ! 402: displaying the TreeStructure attribute. ! 403: This can be used as a complement to the standard Search Guide attribute, ! 404: which indicates how searches in that region of the DIT are keyed. ! 405: ! 406: \section {Extended Searching} ! 407: ! 408: Phonetic searching is supported for all string based attributes. ! 409: This will is done by holding a short array of soundex keys for each ! 410: attribute value. ! 411: The soundex keys are generated by the DSA at loadtime. ! 412: Typically, there is one soundex key for each component of a name. ! 413: ! 414: ! 415: There is a problem with some attributes which can be looked at in a general ! 416: or specific manner (e.g. phone number / home phone number). This may be ! 417: tackled in the standards bodies by introduction of Attribute Classes. ! 418: We propose to investigate this area, prior to 1992. Attribute Subclasses ! 419: and Attribute Aliases will be ! 420: defined {\em internally} to a QUIPU DSA. Externally, all attributes will be ! 421: shown, even where this means sending both subclass and superclass. ! 422: Care must be taken on modifications, as all members of a superclass do not ! 423: have to be members of the subclass. ! 424: ! 425: There is a serious problem in handling personal names, and some other ! 426: attributes. It is intended to handle this as a generalisation of the ! 427: attribute class mechanism. Initially, this will be hard coded in as a ! 428: special case for human names. A name is considered to be represented as ! 429: either a string encoded common name, or a series of other attributes ! 430: (Surname, Given Name, Initials, Title). This can be viewed as a structured ! 431: and unstructured representation of the same information. These should be ! 432: modified to be aligned. All components of the structured form should be ! 433: represented in the unstructured form, and vice versa. In addition, any ! 434: ``preferred form'' should be represented in the common name. Initially, it ! 435: will be mandatory for update to be via the structured form. ! 436: ! 437: The details of this section will be expanded, and additions made to the naming ! 438: architecture. ! 439: ! 440: \section {Update} ! 441: ! 442: Update is achieved by the operations specified in the OSI Directory. ! 443: This gives fully general update on the basis of three considerations: ! 444: ! 445: \begin {itemize} ! 446: \item ! 447: Access Control is specified by an attribute. ! 448: Thus sophisticated control of remote update can be made. ! 449: \item ! 450: Because of the master/slave concept, updates can work in a distributed ! 451: environment, where multiple DSAs are affected. ! 452: This is described in Chapter~\ref{dist-update}. ! 453: \item ! 454: Within the OSI Directory, the update operations give no indication as to the DSA ! 455: where an entry should be added. ! 456: In QUIPU, the ! 457: configuration of the Directory is represented in the Directory, and so ! 458: updates can be made in the ``correct'' DSA(s). ! 459: \end {itemize} ! 460: ! 461: ! 462: ! 463: ! 464: \section {Operation Status} ! 465: ! 466: Some operations will take a long time. Real implementations also hang up, ! 467: and block. It is useful for the user to determine how an operation is ! 468: progressing. It is proposed to add a QUIPU specific operation to the DAP, ! 469: which allows a user to query how a given operation is progressing. ! 470: This might be done by a DUA invoked operation, or by a DSA invoked linked ! 471: operation, which returns status at DUA specified intervals. ! 472:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.