⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc1781.txt

📁 中、英文RFC文档大全打包下载完全版 .
💻 TXT
📖 第 1 页 / 共 4 页
字号:
   [8] L.L. Petersen. The profile naming service.  ACM Transactions on       Computing Systems, 6(4):341--364, November 1988.   [9] M.T. Rose. Realizing the White Pages using the OSI Directory       Service. Technical Report 90--05--10--1, Performance Systems       International, Inc., May 1990.Kille                                                          [Page 20]RFC 1781                  User Friendly Naming                March 199512.  Security Considerations   Security issues are not discussed in this memo.13.  Author's Address   Steve Kille   ISODE Consortium   The Dome   The Square   Richmond, Surrey   TW9 1DT   England   Phone:+44-181-332-9091   EMail:  S.Kille@ISODE.COM   DN: CN=Steve Kille,   O=ISODE Consortium, C=GB   UFN: S. Kille,   ISODE Consortium, GBKille                                                          [Page 21]RFC 1781                  User Friendly Naming                March 1995A.  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 BNFAttribute ::= SEQUENCE {        type OBJECT IDENTIFIER,        value ANY }RDN ::= Attribute -- simplification, as can be multi-valueDN ::= SEQUENCE OF RDNEnvironment ::= SEQUENCE OF DNEnvironmentList ::= SEQUENCE OF SEQUENCE {                        lower-bound INTEGER,                        upper-bound INTEGER,                        environment Environment }friendlyMatch(p:  PurportedName; el:  EnvironmentList):    SET OF DN{                                -- Find correct environment        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));}envMatch(p:  PurportedName; e:  Environment):    SET OF DN{                                -- Check elements of environment                                -- in the defined order        matches:  SET OF DN;Kille                                                          [Page 22]RFC 1781                  User Friendly Naming                March 1995        IF length(e) == 0 THEN return(NULL);        matches = purportedMatch(head(e).DN, p)        IF matches != NULL THEN                return(matches);        ELSE                return(envMatch(p, tail(e));}purportedMatch(base:  DN; p:  PurportedName):  SET OF DN{        s:  String = head(p);        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);                        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));        ELSE                FOR x IN intSearch(base, s) DO                        matches += (purportedMatch(x, tail(p));        return(matches);}Kille                                                          [Page 23]RFC 1781                  User Friendly Naming                March 1995-- 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 hits a size limitrootSearch(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)Kille                                                          [Page 24]RFC 1781                  User Friendly Naming                March 1995{        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):16SET0OF 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 listtail()    -- return list with first element removedKille                                                          [Page 25]RFC 1781                  User Friendly Naming                March 1995length()  -- return size of listlast()    -- return last element of list                    Figure 2: Matching AlgorithmKille                                                          [Page 26]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -