RFC 1484
Using the OSI Directory to achieve User Friendly Naming (OSI-DS 24 (v1.2))
RFC 1484: Using the OSI Directory to achieve User Friendly Naming (OSI-DS 24 (v1.2)) ๐
okay bestie, here's the deets ๐ This RFC is from the Network Working Group, written by S. Hardcastle-Kille of the ISODE Consortium, and dated July 1993 ๐ . It's an Experimental doc, not a standard ๐งช. The title block doesn't list anything it obsoletes or updates, so there's no drama there ๐ โโ๏ธ
Status of this Memo
This memo defines an Experimental Protocol for the Internet community ๐งช It does not specify an Internet standard. The author wants discussion and suggestions for improvement ๐ฌ For the standardization state and status of this protocol, check the current edition of the "IAB Official Protocol Standards" ๐ Distribution of this memo is unlimited ๐
Abstract
the OSI Directory is supposed to have user friendly naming as a goal โจ but a simple minded use of it doesn't get there ๐ฌ Two things it misses:
- A user oriented notation
- Guessability
so this proposal sets out some conventions for writing names in a friendly way ๐ and shows how to use them for really friendly naming ๐ That leads to a format for writing names down, plus procedures for resolving them ๐ Basically, it lets directory names get passed between humans ๐ซถ The format here is identical to the one in [HK93], and these specs are meant to be compatible ๐ฆ Send comments to the author or to the discussion group: <osi-ds@CS.UCL.AC.UK> ๐
Table of Contents
1. Why a notation is needed...................................... 2
2. The Notation.................................................. 3
3. Communicating Directory Names................................. 8
4. Matching a purported name..................................... 9
4.1 Environment................................................... 10
4.2 Matching...................................................... 12
4.3 Top Level..................................................... 13
4.4 Intermediate Level............................................ 14
4.5 Bottom Level.................................................. 15
5. Examples...................................................... 15
6. Support required from the standard............................ 16
7. Support of OSI Services....................................... 16
8. Experience.................................................... 17
9. Relationship to other work.................................... 18
10. Issues........................................................ 19
11. References.................................................... 20
12. Security Considerations....................................... 21
13. Author's Address.............................................. 21
A. Pseudo-code for the matching algorithm ....................... 21
List of Figures
1. Example usage of User Friendly Naming.......................... 18
2. Matching Algorithm............................................. 25
List of Tables
1. Local environment for private DUA.............................. 11
2. Local environment for US Public DUA............................ 11
1. Why a notation is needed ๐ธ
lots of OSI Applications use Distinguished Names (DN) from the OSI Directory [CCI88] ๐ The main reason to have a notation for name format is to work with a user interface ๐ฅ๏ธ This spec is flirting with the sin of standardising interfaces ๐ฑ but there are presentation aspects that are worth standardising anyway ๐
it's important to have a common format so names are easy to refer to ๐ You might put a directory name on a business card or in an email message ๐ผ There's a need for a format that supports human to human communication, and it has to be string based (not ASN.1) and user oriented ๐ฃ๏ธ
in lots of cases, a user has to type in a name ๐ This notation is designed so that happens the same way across many user interfaces โจ The idea is that you can just type the name in. No form filling or complicated dialogue ๐ โโ๏ธ
you should be able to take the "human" description given at the meeting and use it directly ๐ค How that works will become clear later ๐ฎ
this approach uses the syntax defined in RFC1485 for representing distinguished names [HK93] ๐ By relaxing some constraints on this specification, the argument goes, you get a more user oriented specification ๐ But this syntax can't be mapped algorithmically onto a distinguished name without using a directory ๐งฉ
this notation is targeted at a general user oriented system, especially for representing the names of humans ๐ฉโ๐ป Other syntaxes may fit other uses of the directory better ๐ง For example, the OSF Syntax may suit some system oriented uses ๐ป (It uses "/" as a separator and forms names to look like UNIX filenames ๐)
this notation is also targeted at names that follow a particular DIT structure, which is organisationally oriented ๐ข That may make it a bad fit for some types of application ๐ There may be a need to extend it to handle fully geographical names more cleanly ๐บ๏ธ
overall, this approach basically defines descriptive names on top of the primitive names the OSI Directory already gives you ๐ฆ
to be continued ๐
2. The Notation โจ
Okay bestie, the notation for this one is defined in [HK93] ๐ . It gives you an unambiguous way to write a distinguished name, and this spec is designed to be used together with that format. Both come from the same piece of research work [Kil90] ๐ง. Here are some examples so you can see the vibe.
The author's User Friendly Name (UFN) might be written:
Steve Hardcastle-Kille, Computer Science, University College
London, GB
or
S. Hardcastle-Kille, Computer Science, University College London,
GB
It can be folded too, maybe to show up in multi-column format ๐ธ:
Steve Hardcastle-Kille,
Computer Science,
University College London,
GB
Another UFN might be:
Christian Huitema, INRIA, FR
or
James Hacker,
Basingstoke,
Widget Inc,
GB
And this last one shows how you quote a comma inside an Organisation name ๐:
L. Eagle, "Sue, Grabbit and Runn", GB
So a purported name is basically what a user types into an interface, which then gets resolved into one or more distinguished names ๐. A system should almost always store a name as a distinguished name. That's way more efficient, and it avoids the drama of purported names turning ambiguous when a new name shows up ๐ญ. A user interface may display a distinguished name using the distinguished name notation. But it may also display a purported name when that's just more pleasing to the user โจ. Some examples of that:
- Omission of the higher components of the distinguished name is not displayed (abbreviation).
- Omission of attribute types, where the type is unlikely to be needed to resolve ambiguity.
The ways a purported name can differ from a distinguished name are next, so pay attention ๐:
Type Omission
There are two cases of this ๐.
- Schema defaulting. In this case, although the type is not present, a schema defaulting is used to deduce the type. The first two types of schema defaulting may be used to deduce a distinguished name without the use of the directory. The use of schema defaulting may be useful to improve the performance of UFN resolution. The types of schema defaulting are:
- Default Schema
- Context Dependent Default Schema
- Data Dependent Default Schema
- Omission of the type to be resolved by searching.
Default Schema
The attribute type of an attribute may always be present. This may be done to emphasise the type structure of a name. In some cases, the typing may be omitted. This is done in a way so that in many common cases, no attribute types are needed. The following type hierarchy (schema) is assumed ๐:
Common Name, (((Organisational Unit)*, Organisation,) Country)
Explicitly typed RDNs may be inserted into this hierarchy at any point. The least significant component is always of type Common Name. Other types follow the defined organisational hierarchy. The following are equivalent ๐ฆ:
Filestore Access, Bells, Computer Science,
University College London, GB
and
CN=Filestore Access, OU=Bells, OU=Computer Science,
O=University College London, C=GB
To interpret a distinguished name presented in this format, with some or all of the attributes with the type not specified, the types are derived according to the type hierarchy by the following algorithm ๐ง :
- If the first attribute type is not specified, it is CommonName.
- If the last attribute type is not specified, it is Country.
- If there is no organisation explicitly specified, the last attribute with type not specified is of type Organisation.
- Any remaining attribute with type unspecified must be before an Organisation or OrganisationalUnit attribute, and is of type OrganisationalUnit.
To take a distinguished name and generate a name of this format with attribute types omitted, the following steps are followed ๐ซถ:
- If the first attribute is of type CommonName, the type may be omitted.
- If the last attribute is of type Country, the type may be omitted.
- If the last attribute is of type Country, the last Organisation attribute may have the type omitted.
- All attributes of type OrganisationalUnit may have the type omitted, unless they are after an Organisation attribute or the first attribute is of type OrganisationalUnit.
Context Dependent Default Schema
The distinguished name notation defines a fixed schema for type defaulting. But it may be useful to have different defaults in different contexts ๐ธ. For example, the defaulting convention may be applied in a modified fashion to objects which are known not to be common name objects. This will always be followed if the least significant component is explicitly typed. In this case, the following hierarchy is followed:
((Organisational Unit)*, Organisation,) Country
Data Dependent Defaulting
There are cases where it would be optimal to default according to the data ๐ฅ. For example, in:
Einar Stefferud, Network Management Associates, CA, US
It would be useful to default "CA" to type State. This might be done by defaulting all two letter attributes under C=US to type State.
General Defaulting
A type may be omitted in cases where it does not follow a default schema hierarchy, and then type variants can be explored by searching. So a distinguished name could be represented by a uniquely matching purported name ๐. For example:
James Hacker,
Basingstoke,
Widget Inc,
GB
Would match the distinguished name:
CN=James Hacker,
L=Basingstoke,
O=Widget Inc,
CN=GB
Abbreviation
Some of the more significant components of the DN will be omitted, and then defaulted in some way (e.g., relative to a local context) โจ. For example:
Steve Hardcastle-Kille
Could be interpreted in the context of an organisational default.
Local Type Keywords
Local values can be used to identify types, in addition to the keywords defined in [HK93] ๐. For example, "Organisation" may be recognised as an alternative to "O".
Component Omission
An intermediate component of the name may be omitted. Typically this will be an organisational unit ๐ . For example:
Steve Hardcastle-Kille, University College London, GB
In some cases, this can be combined with abbreviation. For example:
Steve Hardcastle-Kille, University College London
Approximation
Approximate renditions or alternate values of one or more of the components will be supplied ๐ฆ. For example:
Stephen Hardcastle-Kille, CS, UCL, GB
or
Steve Keill, Comp Sci, Univarstiy College London, GB
Friendly Country
A "friendly country name" can be used instead of the ISO 3166 two letter code ๐. For example:
UK; USA; France; Deutchland.
3. Communicating Directory Names ๐
A goal of this standard is to provide a means of communicating directory names ๐. Two approaches are given: one defined in [HK93], and the other here. A future version of these specifications may contain only one of these approaches, or recommend use of one approach. The approach can usually be distinguished implicitly, as types are normally omitted in the UFN approach, and are always present in the Distinguished Name approach. No recommendation is made here, but the merits of each approach are given ๐ง.
- Distinguished Name or DN. A representation of the distinguished name, according to the specification of [HK93].
- User Friendly Name or UFN. A purported name, which is expected to unambiguously resolve onto the distinguished name.
When a UFN is communicated, a form which should efficiently and unambiguously resolve onto a distinguished name should be chosen. So it is reasonable to omit types, or to use alternate values which will unambiguously identify the entry in question (e.g., by use of an alternate value of the RDN attribute type). It is not reasonable to use keys which are (or are likely to become) ambiguous ๐.
The approach used should be implicit from the context, rather than wired into the syntax. The terms "Directory Name" and "X.500 Name" should be used to refer to a name which might be either a DN or UFN. An example of appropriate usage of both forms is given in the Section which defines the Author's location in section 12 ๐.
Advantages of communicating the DN are:
- The Distinguished Name is an unambiguous and stable reference to the user.
- The DN will be used efficiently by the directory to obtain information.
Advantages of communicating the UFN are:
- Redundant type information can be omitted (e.g., "California", rather than "State=California", where there is known to be no ambiguity).
- Alternate values can be used to identify a component. This might be used to select a value which is meaningful to the recipient, or to use a shorter form of the name. Often the uniqueness requirements of registration will lead to long names, which users will wish to avoid ๐ฉ.
- Levels of the hierarchy may be omitted. For example in a very small organisation, where a level of hierarchy has been used to represent company structure, and the person has a unique name within the organisation ๐ธ.
Where UFN form is used, it is important to specify an unambiguous form. In some ways, this is analogous to writing a postal address. There are many legal ways to write it. Care needs to be taken to make the address unambiguous ๐ฌ.
4. Matching a purported name ๐
The following approach specifies a default algorithm to be used with the User Friendly Naming approach ๐. It is appropriate to modify this algorithm, and future specifications may propose alternative algorithms. Two simple algorithms are noted in passing, which may be useful in some contexts:
- Use type omission only, but otherwise require the value of the RDN attribute to be present.
- Require each RDN to be identified as in 1), or by an exact match on an alternate value of the RDN attribute.
These algorithms do not offer the flexibility of the default algorithm proposed, but give many of the benefits of the approach in a very simple manner โจ.
The major utility of the purported name is to provide the important "user friendly" characteristic of guessability ๐ฆ. A user will supply a purported name to a user interface, and this will be resolved onto a distinguished name. When a user supplies a purported name there is a need to derive the DN. In most cases, it should be possible to derive a single name from the purported name. In some cases, ambiguities will arise and the user will be prompted to select from a multiple matches. This should also be the case where a component of the name did not "match very well" ๐ฅบ.
There is an assumption that the user will simply enter the name correctly. The purported name variants are designed to make this happen! There is no need for fancy window based interfaces or form filling for many applications of the directory ๐. Note that the fancy interfaces still have a role for browsing, and for more complex matching. This type of naming is to deal with cases where information on a known user is desired and keyed on the user's name ๐ซถ.
4.1. Environment โจ
Okay so every match happens inside a local environment ๐ก. The environment is a sequence of names of non-leaf objects in the DIT, basically a cheat sheet of acceptable name abbreviations wherever the DUA is being used ๐ . It also decides the order things get tried in ๐. The environment should be controllable by the individual user, so you're the boss of it ๐.
The list is defined in the context of how many name components were supplied ๐ข. That lets different heuristics fit different environments, so the approach can have the "right" behaviour ๐ฆ.
In most cases the environment starts at a local point in the DIT and moves upwards ๐. Table 1 shows an example for a typical local DUA, and it's giving very specific vibes ๐ญ:
One component
Assumed first to be a user in the department, then a user or department within the university, then a national organisation, and finally a country ๐ซ.
Two components
The most significant component is first assumed to be a national organisation, then a department (this might be reversed in some organisations ๐), and finally a country.
Three or more components
The most significant component is first assumed to be a country ๐, then a national organisation, and finally a department.
+----------------------------------------------------+
| Number of | Environment |
| Components | |
+----------------------------------------------------+
| 1 | Physics, University College London, GB|
| | University College London, GB |
| | GB |
| | __ |
+----------------------------------------------------+
| 2 | GB |
| | University College London, GB |
| | __ |
+----------------------------------------------------+
| 3+ | __ |
| | GB |
| | University College London, GB |
+----------------------------------------------------+
Table 1: Local environment for private DUA
Table 2 gives the same kind of example, but for a US Public DUA ๐บ๐ธ:
+--------------------------------------+
| Number of | Environment |
| Components | |
+--------------------------------------+
| 1,2 | US |
| | CA |
| | __ |
+--------------------------------------+
| 3+ | __ |
| | US |
| | CA |
+--------------------------------------+
Table 2: Local environment for US Public DUA
4.2. Matching โจ
A purported name gets supplied, usually with a small number of components ๐งฉ, and it gets matched in the context of an environment ๐. When there are multiple components to match, you match them sequentially, one after another ๐ฏ. If you get an unambiguous DN (distinguished name) ๐ซ, the match carries on as if the full DN had been supplied in the first place.
Example time ๐: say you supply Stephen Hardcastle-Kille, UCL in the context of environment GB. First, UCL resolves to the distinguished name University College London, GB. Then the next component of the purported name is taken to determine the final name. If there's an ambiguity (like if UCL made two matches), both paths get explored to see if the ambiguity can be resolved ๐ต๏ธ. Eventually a set of names gets passed back to the user ๐.
Each component of the environment gets taken in turn ๐. If the purported name has more components than the maximum depth, that environment element gets skipped. You'll see the advantage of this in an example later ๐.
A match of a name is considered to have three levels ๐ฅ๐ฅ๐ฅ:
Exact
A DN is specified exactly ๐ฏ.
Good
Initially, a match should be considered good if it is unambiguous and exactly matches an attribute value in the entry. For human names, a looser metric is probably desirable. For example, S Hardcastle-Kille should be a good match of S. Hardcastle-Kille, S.E. Hardcastle-Kille or Steve Hardcastle-Kille, even if these are not explicit alternate values ๐ซถ.
Poor
Any other substring or approximate match ๐ซ .
Following a match, the reference can be followed, or the user can be prompted. If there are multiple matches, more than one path may be followed ๐ฃ๏ธ. There's also a shift/reduce type of choice: should any partial matches be followed, or should the next element of the environment be tried? ๐ค The following heuristics are suggested, and they may be modified in the light of experience ๐. The overall aim is to resolve cleanly specified names with a minimum of fuss, but give sufficient user control to prevent undue searching and delay ๐ง.
- Always follow an exact match.
- Follow all good matches if there are no exact matches.
- If there are only poor matches, prompt the user. If the user accepts one or more matches, they can be considered as good. If all are rejected, this can be treated as no matches.
- Automatically move to the next element of the environment if no matches are found.
When the final component is matched, a set of names will be identified. If none are identified, proceed to the next environment element. If the user rejects all of the names, processing of the next environment element should be confirmed ๐.
The exact approach to matching will depend on the level of the tree at which matching is being done. Next up: how attributes are matched at various levels of the DIT ๐ณ.
There is an issue of approximate matching ๐. Sometimes it helps, and sometimes it just returns many spurious matches ๐. When a search is requested, all relevant attributes should be returned, so that distinguished and non-distinguished values can be looked at. This allows a distinction to be made between good and poor matches. It is important that, where an acronym exactly matches an organisation, the user is not prompted about other organisations where it matches as a substring ๐ซ.
4.3. Top Level ๐
In this case, a match is being done at the root of the DIT ๐ฑ. Three approaches are suggested, depending on the length of the supplied name. All of them lead to a single level search of the top level of the DIT ๐ฏ.
Exactly 2
This is assumed to be a 3166 two letter country code, or an exact match on a friendly country or organisation (e.g., UK or UN). Do an exact match on country and friendly country.
Greater than 2
Make an approximate and substring match on friendly country and organisation.
4.4. Intermediate Level ๐ช
Once the root level has been dealt with, intermediate levels are looking for organisational components (Organisation, Locality, Org Unit) ๐ข. In some cases, private schema control will allow the system to determine which one is at the next level. In general this won't be possible ๐คท. In each case, make a substring and approximate match search of one level. The choice depends on the base object used in the search:
- If the DN has no Organisation or Locality, filter on Organisation and Locality.
- If the DN has Org Unit, filter on Org Unit.
- If the DN has Organisation, filter on Locality and Org Unit.
- If the DN has Locality, filter on Organisation.
These allow some optimisation, based on legal choices of schema ๐ง . Keeping filters short is usually desirable to improve performance โก.
Here are a few examples ๐. A base object has been determined (either by being the environment or by partial resolution of a purported name), and the next element of a purported name is being considered. This generates a single level search. What varies is the types being filtered against. If the DN is:
University College London, GB
the search should be for Org Unit or Locality.
If the DN is:
Organisation=UN
the search should be for Org Unit or Locality.
There may be some improvements with respect to very short keys. Not making approximate or substring matches in these cases seems sensible. (It might be desirable to allow "*" as a part of the purported name notation ๐.)
4.5. Bottom Level ๐
The "Bottom Level" is to deal with leaf entries in the DIT ๐. This will often be a person, but may also be a role, an application entity, or something else ๐งโ๐ป.
The last component of a purported name may reference either a leaf or a non-leaf. For this reason, both should be tested for ๐. As a heuristic, if the base object for the search has two or more components, it should be tested first as a bottom level name and then as intermediate. Reverse this for shorter names. This optimises for the (normal) case of non-leaves high up the tree and leaves low down the tree ๐ฒ.
For bottom level names, make an approximate and substring match against Common Name, Surname, and User ID ๐ชช. Where common name is looked for, a full subtree search will be used when at the second level of the DIT or lower, otherwise a single level search ๐.
For example, if you've resolved a purported name to the distinguished name University College London, GB and have a single component Bloggs, this will generate a subtree search ๐ณ.
5. Examples โจ
This is all somewhat confusing ๐ตโ๐ซ, so here are a few examples. They're all in the context of the environment shown in Table 1 in section 4.1.
If "Joe Bloggs" is supplied, a subtree search of Physics, University College London, GB will be made, and the user gets prompted for "Joseph Z. Bloggs" as the only possible match ๐.
If "Computer Science" is supplied, first Physics, University College London, GB gets searched, and the user rejects the approximate match of "Colin Skin" ๐
. Then a subtree search of University College London, GB is made, looking for a person. Then a single level search is made looking for Org Unit, and Computer Science, University College London, GB is returned without prompting (exact match) ๐.
Supplying "Steve Hardcastle-Kille" leads to a failed subtree search of Physics, University College London, GB, and then straight to a subtree search of University College London, GB. This leads to an exact value match, so a single entry is returned without prompting ๐.
If "Andrew Findlay, Brunel" is supplied, the first element of the environment is skipped, and a single level search of "Brunel" under "GB" finds Brunel University, GB. A subtree search for "Andrew Findlay" then gets initiated. This yields:
Andrew Findlay, Computing and Media Services, Brunel University, GB
Dr A J Findlay, Manufacturing and Engineering Systems, Brunel University, GB
and the user will be prompted with a choice ๐ค.
This approach shows how a simple format of this nature will "do the right thing" in many cases ๐ง.
6. Support required from the standard ๐
Fortunately, all that is needed is there! ๐ It would be useful to have "friendly country name" as a standard attribute ๐ฅฐ.
7. Support of OSI Services โจ
okay so this is where it gets really good ๐ฆ the whole point of this work is giving Organisations and Users a way to be identified, but applications need identifying too, and that's a related vibe ๐ if the Application is identified by an AET (Application Entity Title) whose RDN is Common Name, this specification just kinda flows naturally ๐ซถ like, say a filestore is named "gannet". it could be identified with this name:
Gannet, Computer Laboratory, Cambridge University, GB
in normal usage, that could lead to access (using a purported name) like this:
FTAM gannet,cambridge
second type of access: the user identifies an Organisation (Organisational Unit) and just wants a default service ๐ the service is implied by the application, and the user should not have to do any additional naming as far as they're concerned. it's proposed that this is supported by User Friendly Naming in the following way ๐
- Determine that the purported name identifies a non-leaf object, which is of object class Organisation or Organisational Unit or Locality.
- Perform a single level search for Application Entities which support the required application contexts. This assumes that all services which are supporting default access for the organisation are registered at one level below (possibly by the use of aliases), and that other services (specific machines or parts of the organisation) are represented further down the tree. This seems to be a reasonable layout, and its utility can be evaluated by experiment.
8. Experience ๐ฅ
Colin Robbins built an experimental implementation of this, and Figure 1 shows it can be super effective at finding known individuals with minimal effort ๐ญ this code got deployed within the "FRED" interface of the PSI Pilot [Ros90], and within a prototype interface for managing distribution lists ๐ the user reaction has been favourable ๐
some issues popped up from this experience, so let's spill ๐
- Where there is more than one level of Organisational Unit, and the user guesses one which is not immediately below the organisation, the algorithm works badly. There does not appear to be an easy fix for this. It is not clear if this is a serious deficiency.
- Substring searching is currently done with leading and trailing wildcards. As many implementations will not implement leading wildcards efficiently, it may be preferable to only use trailing wildcards. The effect of this on the algorithm needs to be investigated.
implementors of this specification are encouraged to investigate variants of the basic algorithm ๐ a final specification should depend on experience with such variants ๐งช
-> t hales, csiro, australia
Found good match(es) for 'australia'
Found exact match(es) for 'csiro'
Please select from the following:
Trevor Hales, OC, HPCC, DIT, IICT, CSIRO, AU [y/n] ? y
The following were matched...
Trevor Hales, OC, HPCC, DIT, IICT, CSIRO, AU
-> g michaelson, queensland, au
Found exact match(es) for 'au'
Please select from the following:
University of Queensland, AU [y/n] ? y
Axolotl, AU [y/n] ? n
Please select from the following:
George Michaelson, Prentice Computer Centre, University of
Queensland, AU [y/n] ? y
Manager, University of Queensland, AU [y/n] ? n
The following were matched...
George Michaelson, Prentice Computer Centre, University of
Queensland, AU
-> r needham, cambridge
Found good match(es) for 'cambridge'
Please select from the following:
Roger Needham, Computer Lab, Cambridge University [y/n] ? y
The following were matched...
Roger Needham, Computer Lab, Cambridge University
-> kirstein
Found good match(es) for 'kirstein'
The following were matched...
Peter Kirstein
Figure 1: Example usage of User Friendly Naming
9. Relationship to other work ๐ง
Colin Robbin's work on the interface "Tom" and implementation of a distribution list interface strongly influenced this specification [KRRT90] ๐ซถ
some of the ideas used here originally came from a UK Proposal to the ISO/CCITT Directory Group on "New Name Forms" [Kil89a]. this defined, and showed how to implement, four different types of names ๐
- Typed and Ordered: The current Distinguished Name is a restricted example of this type of name.
- Untyped and Ordered: This is the type of name proposed here (with some extensions to allow optional typing). It is seen as meeting the key user requirement of disliking typed names, and is efficient to implement. this is the main character here ๐
- Typed and Unordered: This sort of name is proposed by others as the key basis for user friendly naming. Neufeld shows how X.500 can be used to provide this [Neu89], and Peterson proposes the Profile system to provide this [Pet88]. The author argues that whilst typed naming is interesting for some types of searching (e.g., yellow page searching), it is less desirable for naming objects. This is backed up by operational experience with OSI Directories [Kil89b].
- Untyped and Unordered: Surprisingly this form of name can be supported quite easily. However, a considerable gain in efficiency can be achieved by requiring ordering. In practice, users can supply this easily. Therefore, this type of name is not proposed. ๐
10. Issues ๐จ
the following issues are noted, which would need to be resolved before this document is progressed as an Internet Standard ๐
Potential Ambiguity
Whilst the intention of the notation is to allow for specification of alternate values, it inherently allows for ambiguous names to be specified. It needs to be demonstrated that problems of this characteristic are outweighed by other benefits of the notation. ๐ค
Utility
Determine that the specification is being implemented and used.
Performance
Measurements on the performance implications of using this approach should be made. ๐
Alogrithm
The utility of the algorithm, and possible variants, should be investigated.
this format, and the procedures for resolving purported names, should be evolved. The syntax can be expected to be stable. In light of experience, the algorithm for resolving purported names may be changed ๐ฆ
11. References ๐
- [CCI88] The Directory --- overview of concepts, models and services, December 1988. CCITT X.500 Series Recommendations.
- [HK93] S.E. Hardcastle-Kille. A string representation of distinguished names. RFC 1485, Department of Computer Science, University College London, July 1993.
- [Kil89a] S.E. Kille. New name forms, May 1989. ISO/IEC/JTC 21/ WG4/N797 UK National Body Contribution to the Oslo Directory Meeting.
- [Kil89b] S.E. Kille. The THORN large scale pilot exercise. Computer Networks and ISDN Systems, 16(1):143--145, January 1989.
- [Kil90] S.E. Kille. Using the OSI directory to achieve user friendly naming. Research Note RN/20/29, Department of Computer Science, University College London, February 1990.
- [KRRT90] S.E. Kille, C.J. Robbins, M. Roe, and A. Turland. The ISO development environment: User's manual (version 6.0), January 1990. Volume 5: QUIPU.
- [Neu89] G.W. Neufeld. Descriptive names in X.500. In SIGCOMM 89 Symposiun Communications Architectures and Protocols, pages 64--71, September 1989.
- [Pet88] L.L. Petersen. The profile naming service. ACM Transactions on Computing Systems, 6(4):341--364, November 1988.
- [Ros90] M.T. Rose. Realizing the White Pages using the OSI Directory Service. Technical Report 90--05--10--1, Performance Systems International, Inc., May 1990.
12. Security Considerations ๐
Security issues are not discussed in this memo. ๐
13. Author's Address ๐
here's where to find the author, bestie ๐ง
Steve Hardcastle-Kille
ISODE Consortium
P.O. Box 505
London
SW11 1DX
England
Phone:+44-71-223-4062
EMail: S.Kille@ISODE.COM
DN: CN=Steve Hardcastle-Kille,
O=ISODE Consortium, C=GB
UFN: S. Hardcastle-Kille,
ISODE Consortium, GB
A. Pseudo-code for the matching algorithm ๐งฎ
the following pseudo-code is intended to clarify the matching algorithm. The language uses ASN.1 data types, with flow control "C"-like,but with keywords upper--cased. ๐
____________________________________________________________________
PurportedName ::= SEQUENCE OF String
-- simplication, as attribute types can optionally be
-- specified
-- Each element of the Purported Name is a string
-- which has been parsed from the BNF
Attribute ::= SEQUENCE { 10
type OBJECT IDENTIFIER,
value ANY }
RDN ::= Attribute -- simplification, as can be multi-value
DN ::= SEQUENCE OF RDN
Environment ::= SEQUENCE OF DN
20
EnvironmentList ::= SEQUENCE OF SEQUENCE {
lower-bound INTEGER,
upper-bound INTEGER,
environment Environment }
friendlyMatch(p: PurportedName; el: EnvironmentList): SET OF DN
{
-- Find correct environment
30
IF length(el) == 0 THEN return(NULL);
IF length(p) <= head(el).upper-bound
&& length(p) >= head(el).lower-bound THEN
return envMatch (p, head(el).environment);
ELSE
return(friendlyMatch(p, tail(el));
}
40
envMatch(p: PurportedName; e: Environment): SET OF DN
{
-- Check elements of environment
-- in the defined order
matches: SET OF DN;
IF length(e) == 0 THEN return(NULL);
matches = purportedMatch(head(e).DN, p) 50
IF matches != NULL THEN
return(matches);
ELSE
return(envMatch(p, tail(e));
}
purportedMatch(base: DN; p: PurportedName): SET OF DN
{
s: String = head(p); 60
matches: SET OF DN = NULL;
IF length(p) == 1 THEN
IF length(base) == 0 THEN
IF (matches = rootSearch(s)) != NULL THEN
return(matches);
ELSE return(leafSearch(base, s, one-level);
ELSE IF length(base) == 1 THEN
IF (matches = intSearch(base, s)) != NULL THEN
return(matches); 70
ELSE return(leafSearch(base, s, one-level);
ELSE
IF (matches = leafSearch(base, s, subtree)) !=
NULL THEN
return(matches);
ELSE return(intsearch(base, s);
IF length(base) == 0 THEN
FOR x IN rootSearch(s) DO
matches += (purportedMatch(x, tail(p)); 80
ELSE
FOR x IN intSearch(base, s) DO
matches += (purportedMatch(x, tail(p));
return(matches);
}
-- General. Might need to tighten the filter for short strings,
-- in order to stop being flooded. Alternatively, this could be
-- done if the loose search hists a size limit
rootSearch(s: String): SET OF DN
{
IF length(s) == 2 THEN
return(search(NULL, one-level, s, {CountryName,
FriendlyCountryName, OrganizationName},
{exact}, {Country, Organisation}));
-- test exact match only
-- probably a country code
ELSE
return(search(NULL, one-level, s, {OrganizationName,
FriendlyCountryName}, {substring, approx},
{Country, Organisation}));
}
intSearch( base: DN; s: String)
{
IF present(base, OrgUnitName) THEN
return(search(base, one-level, s, {OrgUnitName},
{substring, approx}, {OrgUnit}));
ELSE IF present(base, OrganisationName) THEN
return(search(base, one-level, s, {OrgUnitName,
LocalityName}, {substring, approx},
{Organization, OrgUnit, Locality}));
ELSE IF present(base, LocalityName) THEN
return(search(base, one-level, s, {OrganisationName},
{substring, approx}, {Locality});
ELSE
return(search(base, one-level, s, {OrganisationName,
LocalityName}, {substring, approx},
{Organisation, Locality}));
}
present(d: DN; t: AttributeType): BOOLEAN
{
FOR x IN d DO
IF x.type == t THEN return(TRUE);
return(FALSE);
}
SearchScope := ENUMERATED (base-object, one-level, subtree)
leafSearch(base: DN; s: String; search-scope: SearchScope)
{
return(search(base, search-scope, s, {CommonName, Surname,
UserId}, {substring, approx}));
}
search(base: DN; search-scope: SearchScope; s: string;
alist SET OF AttributeType; matchtypes SET OF MatchType
objectClasses SET OF ObjectClass OPTIONAL): SET OF DN
{
-- mapped onto Directory Search, with OR conjunction
-- of filter items
return dNSelect (s, search-results, alist);
}
read(base: DN; alist SET OF AttributeType): SET OF Attribute;
{
-- mapped onto Directory Read
-- Types repeated to deal with multiple values
-- This would be implemented by returning selected info
-- with the search operation
}
dNSelect(s: String; dlist SET OF DN; alist: SET OF AttributeType):
SET OF DN
{
exact, good: SET OF DN;
FOR x IN dlist DO
IF last(DN).Value == s THEN
exact += x;
ELSE IF FOR y IN read(x, alist) DO
IF y.value == s THEN
good += x;
IF exact != NULL THEN return(exact);
IF good != NULL THEN return(good);
return(userQuery(dlist));
}
userQuery(dlist SET OF DN): SET OF DN
{
-- pass back up for manual checking
-- user can strip all matches to force progres....
}
head() -- return first element of list
tail() -- return list with first element removed
length() -- return size of list
last() -- return last element of list
Figure 2: Matching Algorithm ๐ โจ
๐ฆ where this page comes from
- ietf: rfc1484 1993-07
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms