Annotation of 43BSDReno/contrib/isode-beta/doc/ufn/algo.tex, revision 1.1.1.1

1.1       root        1: \File{algo.py},{08:16},{Jul  6 1990}
                      2: \L{\LB{}}
                      3: \L{\LB{}}
                      4: \L{\LB{\Proc{PurportedName}PurportedName ::= \K{SEQUENCE} \K{OF} String}}
                      5: \L{\LB{}\Tab{16}{\C{}\-\- simplication, as attribute types can optionally be }}
                      6: \CE{}\L{\LB{}\Tab{16}{\C{}\-\- specified}}
                      7: \CE{}\L{\LB{}}
                      8: \L{\LB{}\Tab{16}{\C{}\-\- Each element of the Purported Name is a string}}
                      9: \CE{}\L{\LB{}\Tab{16}{\C{}\-\- which has been parsed from the BNF   }}
                     10: \CE{}\L{\LB{}}
                     11: \L{\LB{\Proc{Attribute}Attribute ::= \K{SEQUENCE} \{ }}
                     12: \L{\LB{}\Tab{8}{type \K{OBJECT} \K{IDENTIFIER}, }}
                     13: \L{\LB{}\Tab{8}{value \K{ANY} \}}}
                     14: \L{\LB{}}
                     15: \L{\LB{\Proc{RDN}RDN ::= Attribute \C{}\-\- simplification, as can be multi\-value}}
                     16: \CE{}\L{\LB{}}
                     17: \L{\LB{\Proc{DN}DN ::= \K{SEQUENCE} \K{OF} RDN}}
                     18: \L{\LB{}}
                     19: \L{\LB{\Proc{Environment}Environment ::= \K{SEQUENCE} \K{OF} DN}}
                     20: \L{\LB{}}
                     21: \L{\LB{}}
                     22: \L{\LB{\Proc{EnvironmentList}EnvironmentList ::= \K{SEQUENCE} \K{OF} \K{SEQUENCE} \{}}
                     23: \L{\LB{}\Tab{24}{lower\-bound \K{INTEGER},}}
                     24: \L{\LB{}\Tab{24}{upper\-bound \K{INTEGER}, }}
                     25: \L{\LB{}\Tab{24}{environment Environment \}}}
                     26: \L{\LB{}}
                     27: \L{\LB{}}
                     28: \L{\LB{friendlyMatch(p: PurportedName; el: EnvironmentList):  \K{SET} \K{OF} DN }}
                     29: \L{\LB{\{}}
                     30: \L{\LB{}\Tab{32}{\C{}\-\- Find correct environment}}
                     31: \CE{}\L{\LB{}\Tab{32}{}}
                     32: \L{\LB{}\Tab{8}{IF length(el) == 0 THEN return(\K{NULL});}}
                     33: \L{\LB{}}
                     34: \L{\LB{}\Tab{8}{IF length(p) \<= head(el).upper\-bound}}
                     35: \L{\LB{}\Tab{24}{\&\& length(p) \>= head(el).lower\-bound THEN}}
                     36: \L{\LB{}\Tab{16}{return envMatch (p, head(el).environment);}}
                     37: \L{\LB{}\Tab{8}{ELSE}}
                     38: \L{\LB{}\Tab{16}{return(friendlyMatch(p, tail(el));}}
                     39: \L{\LB{\}}}
                     40: \L{\LB{}}
                     41: \L{\LB{}}
                     42: \L{\LB{envMatch(p: PurportedName; e: Environment):  \K{SET} \K{OF} DN }}
                     43: \L{\LB{\{}}
                     44: \L{\LB{}\Tab{32}{\C{}\-\- Check elements of environment}}
                     45: \CE{}\L{\LB{}\Tab{32}{\C{}\-\- in the defined order}}
                     46: \CE{}\L{\LB{}\Tab{32}{}}
                     47: \L{\LB{}\Tab{8}{matches: \K{SET} \K{OF} DN;}}
                     48: \L{\LB{}\Tab{8}{}}
                     49: \L{\LB{}\Tab{8}{IF length(e) == 0 THEN return(\K{NULL});}}
                     50: \L{\LB{}}
                     51: \L{\LB{}\Tab{8}{matches = purportedMatch(head(el).DN, p)}}
                     52: \L{\LB{ }\Tab{8}{IF matches != \K{NULL} THEN }}
                     53: \L{\LB{}\Tab{16}{return(matches);}}
                     54: \L{\LB{}\Tab{8}{ELSE}}
                     55: \L{\LB{}\Tab{16}{return(envMatch(p, tail(e));}}
                     56: \L{\LB{\}}}
                     57: \L{\LB{}}
                     58: \L{\LB{}}
                     59: \L{\LB{purportedMatch(base: DN; p: PurportedName): \K{SET} \K{OF} DN }}
                     60: \L{\LB{\{}}
                     61: \L{\LB{}\Tab{8}{s: String = head(p);}}
                     62: \L{\LB{}\Tab{8}{matches: \K{SET} \K{OF} DN = \K{NULL};}}
                     63: \L{\LB{}}
                     64: \L{\LB{}\Tab{8}{IF length(p) == 1 THEN }}
                     65: \L{\LB{}\Tab{16}{IF length(base) == 0 THEN}}
                     66: \L{\LB{}\Tab{24}{IF (matches = rootSearch(s)) != \K{NULL} THEN }}
                     67: \L{\LB{}\Tab{32}{return(matches);}}
                     68: \L{\LB{}\Tab{24}{ELSE return(leafSearch(base, s, \K{FALSE});}}
                     69: \L{\LB{}\Tab{16}{ELSE IF length(base) == 1 THEN}}
                     70: \L{\LB{}\Tab{24}{IF (matches = intSearch(base, s)) != \K{NULL} THEN}}
                     71: \L{\LB{}\Tab{32}{return(matches);}}
                     72: \L{\LB{}\Tab{24}{ELSE return(leafSearch(base, s, \K{FALSE});}}
                     73: \L{\LB{}\Tab{16}{ELSE }}
                     74: \L{\LB{}\Tab{24}{IF (matches = leafSearch(base, s, \K{TRUE})) != \K{NULL} THEN}}
                     75: \L{\LB{}\Tab{32}{return(matches);}}
                     76: \L{\LB{}\Tab{24}{ELSE return(intsearch(base, s);}}
                     77: \L{\LB{}}
                     78: \L{\LB{}}
                     79: \L{\LB{}\Tab{8}{IF length(base) == 0 THEN}}
                     80: \L{\LB{}\Tab{16}{\K{FOR} x IN rootSearch(s) DO}}
                     81: \L{\LB{}\Tab{24}{matches += (purportedMatch(x, tail(p));}}
                     82: \L{\LB{}\Tab{8}{ELSE}\Tab{32}{}}
                     83: \L{\LB{}\Tab{16}{\K{FOR} x IN intSearch(base, s) DO}}
                     84: \L{\LB{}\Tab{24}{matches += (purportedMatch(x, tail(p));}}
                     85: \L{\LB{}\Tab{8}{return(matches);}}
                     86: \L{\LB{\}}\Tab{24}{}}
                     87: \L{\LB{}}
                     88: \L{\LB{}}
                     89: \L{\LB{\C{}\-\- General.  Might need to tighten the filter for short strings,}}
                     90: \CE{}\L{\LB{\C{}\-\- in order to stop being flooded.  Alternatively, this could be }}
                     91: \CE{}\L{\LB{\C{}\-\- done if the loose search hists a size limit}}
                     92: \CE{}\L{\LB{}\Tab{8}{}}
                     93: \L{\LB{rootSearch(s: String): \K{SET} \K{OF} DN}}
                     94: \L{\LB{\{}}
                     95: \L{\LB{}\Tab{8}{IF length == 2 THEN}}
                     96: \L{\LB{}\Tab{16}{return(search(\K{NULL}, \K{FALSE}, s, \{CountryName, }}
                     97: \L{\LB{}\Tab{24}{FriendlyCountryName, OrganizationName\},}}
                     98: \L{\LB{}\Tab{24}{\{exact\}, \{Country, Organisation\}));}}
                     99: \L{\LB{}\Tab{8}{ELSE}}
                    100: \L{\LB{}\Tab{16}{return(search(\K{NULL}, \K{FALSE}, s, \{OrganizationName,}}
                    101: \L{\LB{}\Tab{24}{FriendlyCountryName\}, \{substring, approx\},}}
                    102: \L{\LB{}\Tab{24}{\{Country, Organisation\}));}}
                    103: \L{\LB{\}}}
                    104: \L{\LB{}\Tab{16}{}}
                    105: \L{\LB{}}
                    106: \L{\LB{intSearch( base: DN; s: String)}}
                    107: \L{\LB{\{}}
                    108: \L{\LB{}\Tab{8}{IF present(base, OrgUnitName) THEN}}
                    109: \L{\LB{}\Tab{16}{return(search(base, \K{FALSE}, s, \{OrgUnitName\},}}
                    110: \L{\LB{}\Tab{24}{\{substring, approx\}, \{OrgUnit\}));}}
                    111: \L{\LB{}\Tab{8}{ELSE IF present(base, OrganisationName) THEN}}
                    112: \L{\LB{}\Tab{16}{return(search(base, \K{FALSE}, \{OrgUnitName,}}
                    113: \L{\LB{}\Tab{24}{LocalityName\}, \{substring, approx\},}}
                    114: \L{\LB{}\Tab{24}{\{Organization, OrgUnit, Locality\}));}}
                    115: \L{\LB{}\Tab{8}{ELSE IF present(base, LocalityName) THEN}}
                    116: \L{\LB{}\Tab{16}{return(search(base, \K{FALSE}, s, \{OrganisationName\},}}
                    117: \L{\LB{}\Tab{24}{\{substring, approx\}, \{Locality\});}}
                    118: \L{\LB{}\Tab{8}{ELSE}}
                    119: \L{\LB{}\Tab{16}{return(search(base, false, s, \{OrganisationName,}}
                    120: \L{\LB{}\Tab{24}{LocalityName\}, \{substring, approx\}, }}
                    121: \L{\LB{}\Tab{24}{\{Organisation, Locality\}));}}
                    122: \L{\LB{\}}}
                    123: \L{\LB{}}
                    124: \L{\LB{}}
                    125: \L{\LB{present(d: DN; t: AttributeType): \K{BOOLEAN}}}
                    126: \L{\LB{\{}}
                    127: \L{\LB{}\Tab{8}{\K{FOR} x IN d DO}}
                    128: \L{\LB{}\Tab{16}{IF x.type == t THEN return(\K{TRUE});}}
                    129: \L{\LB{}\Tab{8}{return(\K{FALSE});}}
                    130: \L{\LB{\}}}
                    131: \L{\LB{}}
                    132: \L{\LB{leafSearch(base: DN; s: String; subtree: \K{BOOLEAN}) }}
                    133: \L{\LB{\{}\Tab{8}{}}
                    134: \L{\LB{}\Tab{8}{return(search(base, subtree, s, \{CommonName, Surname,}}
                    135: \L{\LB{}\Tab{16}{UserId\}, \{substring, approx\}));}}
                    136: \L{\LB{\}}}
                    137: \L{\LB{}}
                    138: \L{\LB{}}
                    139: \L{\LB{search(base: DN; subtrees: \K{BOOLEAN}; s: string;}}
                    140: \L{\LB{}\Tab{8}{alist \K{SET} \K{OF} AttributeType; matchtypes \K{SET} \K{OF} MatchType }}
                    141: \L{\LB{}\Tab{8}{objectClasses \K{SET} \K{OF} ObjectClass \K{OPTIONAL}): \K{SET} \K{OF} DN }}
                    142: \L{\LB{\{}}
                    143: \L{\LB{}\Tab{8}{\C{}\-\- mapped onto Directory Search, with OR conjunction}}
                    144: \CE{}\L{\LB{}\Tab{8}{\C{}\-\- of filter items}}
                    145: \CE{}\L{\LB{}}
                    146: \L{\LB{}\Tab{8}{return dNSelect (s, search\-results, alist);}}
                    147: \L{\LB{\}}}
                    148: \L{\LB{}}
                    149: \L{\LB{read(base: DN; alist \K{SET} \K{OF} AttributeType): \K{SET} \K{OF} Attribute;}}
                    150: \L{\LB{\{}}
                    151: \L{\LB{}\Tab{8}{\C{}\-\- mapped onto Directory Read}}
                    152: \CE{}\L{\LB{}\Tab{8}{\C{}\-\- Types repeated to deal with multiple values}}
                    153: \CE{}\L{\LB{}\Tab{8}{\C{}\-\- This would be implemented by returning selected info}}
                    154: \CE{}\L{\LB{}\Tab{8}{\C{}\-\- with the search operation}}
                    155: \CE{}\L{\LB{\}}}
                    156: \L{\LB{}}
                    157: \L{\LB{dNSelect(s: String; dlist \K{SET} \K{OF} DN; alist: \K{SET} \K{OF} AttributeType): \K{SET} \K{OF} DN}}
                    158: \L{\LB{\{}}
                    159: \L{\LB{}\Tab{8}{exact, good: \K{SET} \K{OF} DN;}}
                    160: \L{\LB{}}
                    161: \L{\LB{}\Tab{8}{\K{FOR} x IN dlist DO}}
                    162: \L{\LB{}\Tab{16}{IF last(DN).Value == s THEN}}
                    163: \L{\LB{}\Tab{24}{exact += x;}}
                    164: \L{\LB{}\Tab{16}{ELSE IF \K{FOR} y IN read(x, alist) DO}}
                    165: \L{\LB{}\Tab{24}{IF y.value == s THEN}}
                    166: \L{\LB{}\Tab{32}{good += x;}}
                    167: \L{\LB{}}
                    168: \L{\LB{}}
                    169: \L{\LB{}\Tab{8}{IF exact != \K{NULL} THEN return(exact);}}
                    170: \L{\LB{}\Tab{8}{IF good != \K{NULL} THEN return(good);}}
                    171: \L{\LB{}\Tab{8}{return(userQuery(dlist));}}
                    172: \L{\LB{\}}\Tab{8}{}}
                    173: \L{\LB{}\Tab{32}{}}
                    174: \L{\LB{}}
                    175: \L{\LB{userQuery(dlist \K{SET} \K{OF} DN): \K{SET} \K{OF} DN}}
                    176: \L{\LB{\{}}
                    177: \L{\LB{}\Tab{8}{\C{}\-\- pass back up for manual checking}}
                    178: \CE{}\L{\LB{}\Tab{8}{\C{}\-\- user can strip all matches to force progres....}}
                    179: \CE{}\L{\LB{\}}}
                    180: \L{\LB{}}
                    181: \L{\LB{}}
                    182: \L{\LB{head()    \C{}\-\- return first element of list}}
                    183: \CE{}\L{\LB{tail()    \C{}\-\- return list with first element removed}}
                    184: \CE{}\L{\LB{length()  \C{}\-\- return size of list}}
                    185: \CE{}\L{\LB{last()}\Tab{8}{  \C{}\-\- return last element of list}}

unix.superglobalmegacorp.com

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