Annotation of 43BSDTahoe/new/xns/examples/authchtest/Clearinghouse.cr, revision 1.1.1.1

1.1       root        1: -- $Header: Clearinghouse.cr,v 1.2 85/03/10 05:22:58 jqj Exp $ --
                      2: 
                      3: -- $Log:       Clearinghouse.cr,v $
                      4: -- Revision 1.2  85/03/10  05:22:58  jqj
                      5: -- Modified for UNIX:  reordered declaratons to eliminate forward
                      6: -- references, deleted recursive (StreamOf...) declarations, fixed
                      7: -- lots of typos.
                      8: --
                      9: -- Revision 1.1 Initial revision - from Rochester
                     10: 
                     11: Clearinghouse: PROGRAM 2 VERSION 2 =
                     12: BEGIN
                     13:        DEPENDS UPON
                     14:                BulkData(0) VERSION 1,
                     15:                Authentication (14) VERSION 1;
                     16: 
                     17: -- TYPES AND CONSTANTS DESCRIBING NAMES --
                     18: 
                     19: Organization: TYPE = STRING;
                     20: Domain: TYPE = STRING;
                     21: Object: TYPE = STRING;
                     22: 
                     23: maxOrganizationsLength: CARDINAL = 20; -- in bytes --
                     24: maxDomainLength: CARDINAL = 20; -- in bytes --
                     25: maxObjectLength: CARDINAL = 40; -- in bytes --
                     26: 
                     27: -- There can be no wildcard characters in any of the following types. --
                     28: OrganizationName: TYPE = Organization;
                     29: 
                     30: TwoPartName: TYPE = RECORD [
                     31:        organization: Organization,
                     32:        domain: Domain];
                     33: 
                     34: DomainName: TYPE = TwoPartName;
                     35: 
                     36: ThreePartName: TYPE = RECORD [
                     37:        organization: Organization,
                     38:        domain: Domain,
                     39:        object: Object];
                     40: 
                     41: ObjectName: TYPE = ThreePartName;
                     42: 
                     43: Name: TYPE = ThreePartName;
                     44: 
                     45: -- Wildcard characters are permittedin OrganizationNamePatterns. --
                     46: OrganizationNamePattern: TYPE = Organization;
                     47: 
                     48: -- Wildcard characters are permitted in the domain component of this type,
                     49: -- but not in the organization component.
                     50: DomainNamePattern: TYPE = TwoPartName;
                     51: 
                     52: -- Wildcard characters are permitted in the object component of this type,
                     53: -- but not in the organization and domain components.
                     54: ObjectNamePattern: TYPE = ThreePartName;
                     55: 
                     56: -- TYPES AND CONSTANTS DESCRIBING BULK PARAMETERS --
                     57: 
                     58: StreamOfDomain: TYPE = CHOICE OF {
                     59:        nextSegment (0) => RECORD [
                     60:                segment: SEQUENCE OF Domain,
                     61:                restOfStream: StreamOfDomain],
                     62:        lastSegment (1) => SEQUENCE OF Domain};
                     63: 
                     64: StreamOfDomainName: TYPE = CHOICE OF {
                     65:        nextSegment (0) => RECORD [
                     66:                segment: SEQUENCE OF DomainName,
                     67:                restOfStream: StreamOfDomainName],
                     68:        lastSeqment (1) => SEQUENCE OF DomainName};
                     69: 
                     70: StreamOfObject: TYPE = CHOICE OF {
                     71:        nextSegment (0) => RECORD [
                     72:                segment: SEQUENCE OF Object,
                     73:                restOfStream: StreamOfObject],
                     74:        lastSegment (1) => SEQUENCE OF Object};
                     75: 
                     76: StreamOfObjectName: TYPE = CHOICE OF {
                     77:        nextSegment (0) => RECORD [
                     78:                segment: SEQUENCE OF ObjectName,
                     79:                restOfStream: StreamOfObjectName],
                     80:        lastSegment (1) => SEQUENCE OF ObjectName};
                     81: 
                     82: StreamOfOrganization: TYPE = CHOICE OF {
                     83:        nextSegment (0) => RECORD [
                     84:                segment: SEQUENCE OF Organization,
                     85:                restOfStream: StreamOfOrganization],
                     86:        lastSegment (1) => SEQUENCE OF Organization};
                     87: 
                     88: StreamOfThreePartName: TYPE = CHOICE OF {
                     89:        nextSegment (0) => RECORD [
                     90:                segment: SEQUENCE OF ThreePartName,
                     91:                restOfStream: StreamOfThreePartName],
                     92:        lastSegment (1) => SEQUENCE OF ThreePartName};
                     93: 
                     94: -- TYPES AND CONSTANTS DESCRIBING PROPERTIES --
                     95: 
                     96: Property: TYPE = LONG CARDINAL;
                     97: 
                     98: -- A Name can have up to 250 Properties associated with it. --
                     99: Properties: TYPE = SEQUENCE 250 OF Property;
                    100: 
                    101: all: Property = 0;
                    102: nullProperty: Property = 37777777777B;
                    103: 
                    104: -- The value associated with an item property. --
                    105: Item: TYPE = SEQUENCE 500 OF UNSPECIFIED;
                    106: 
                    107: -- TYPES AND CONSTANTS DESCRIBING NETWORK ADDRESSES --
                    108: 
                    109: -- Clearinghouse addresses aer stored in this form. --
                    110: 
                    111: NetworkAddress: TYPE = RECORD [
                    112:        network: ARRAY 2 OF UNSPECIFIED,
                    113:        host: ARRAY 3 OF UNSPECIFIED,
                    114:        socket: UNSPECIFIED ];
                    115: 
                    116: NetworkAddressList: TYPE = SEQUENCE 40 OF NetworkAddress;
                    117: 
                    118: -- OTHER TYPES AND CONSTANTS --
                    119: 
                    120: -- How the client identifies itself to the service --
                    121: Authenticator: TYPE = RECORD [
                    122:        credentials: Authentication.Credentials,
                    123:        verifier: Authentication.Verifier];
                    124: 
                    125: wildcard: STRING = "*"; -- the wildcard character (asterisk) --
                    126: 
                    127: -- ERRORS --
                    128: 
                    129: WhichArgument: TYPE = {
                    130:        first(1), -- concerns the first name or property argument --
                    131:        second(2) }; -- concerns the second name or property argument --
                    132: 
                    133: ArgumentProblem: TYPE = {
                    134:        illegalProperty(10), -- property is not usable by a client --
                    135:        illegalOrganizationName(11), -- the organization component of the name
                    136:                -- is incorrect, e.g., too long or short, or has wild card
                    137:                -- characters when not allowed --
                    138:        illegalDomainName(12), -- the domain component of the name
                    139:                -- is incorrect, e.g., too long or short, or has wild card
                    140:                -- characters when not allowed --
                    141:        illegalObjectName(13), -- the object component of the name
                    142:                -- is incorrect, e.g., too long or short, or has wild card
                    143:                -- characters when not allowed --
                    144:        noSuchOrganization(14), -- the name's organization component does not exist --
                    145:        noSuchDomain(15), -- the name's domain component does not exist --
                    146:        noSuchObject(16) }; -- the name's object component does not exist --
                    147: ArgumentError: ERROR [problem: ArgumentProblem, which: WhichArgument] = 2;
                    148: 
                    149: AuthenticationError: ERROR [problem: Authentication.Problem] = 6;
                    150: 
                    151: CallProblem: TYPE = {
                    152:        accessRightsInsufficient(1), -- operation prevented by access controls --
                    153:        tooBusy(2), -- server is too busy to service this request --
                    154:        serverDown(3), -- a remote Clearinghouse server was down and was needed for this request --
                    155:        useCourier(4), -- server insists that Courier be used for this particular request --
                    156:        other(5) };
                    157: CallError: ERROR [problem: CallProblem] = 1;
                    158: 
                    159: PropertyProblem: TYPE = {
                    160:        missing(20), -- the object exists, but the property doesn't --
                    161:        wrongType(21)}; -- client wanted a Group but it was an Item, or vice versa --
                    162: PropertyError: ERROR [problem: PropertyProblem,
                    163:        distinguishedObject: ObjectName] = 3;
                    164: UpdateProblem: TYPE = {
                    165:        noChange(30), -- operation wouldn't change the database --
                    166:        outOfDate(31), -- more recent information was in database --
                    167:        objectOverflow(32), -- the particular object will have too much data
                    168:                -- associated with it --
                    169:        databaseOverflow(33)}; -- the server has run out of room --
                    170: UpdateError: ERROR [problem: UpdateProblem, found: BOOLEAN,
                    171:        which: WhichArgument, distinguishedObject: ObjectName] = 4;
                    172: 
                    173: WrongServer: ERROR [hint: ObjectName] = 5;
                    174: 
                    175: -- PROCEDURES --
                    176: 
                    177: -- DEALING WITH OBJECTS --
                    178: 
                    179: CreateObject: PROCEDURE [name: ObjectName, agent: Authenticator]
                    180: REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError,
                    181:        WrongServer] = 2;
                    182: 
                    183: DeleteObject: PROCEDURE [name: ObjectName, agent: Authenticator]
                    184: REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError,
                    185:        WrongServer] = 3;
                    186: 
                    187: LookupObject: PROCEDURE [name: ObjectNamePattern, agent: Authenticator]
                    188: RETURNS [distinguishedObject: ObjectName]
                    189: REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 4;
                    190: 
                    191: ListOrganizations: PROCEDURE [pattern: OrganizationNamePattern,
                    192:        list: BulkData.Sink, agent: Authenticator]
                    193: REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 5;
                    194: 
                    195: ListDomain: PROCEDURE [pattern: DomainNamePattern, list: BulkData.Sink,
                    196:        agent: Authenticator]
                    197: REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 6;
                    198: 
                    199: ListObjects: PROCEDURE [pattern: ObjectNamePattern, property: Property,
                    200:        list: BulkData.Sink, agent: Authenticator]
                    201: REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 7;
                    202: 
                    203: ListAliasesOf: PROCEDURE [pattern: ObjectNamePattern, list: BulkData.Sink,
                    204:        agent: Authenticator]
                    205: RETURNS [distinguishedObject: ObjectName]
                    206: REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 9;
                    207: 
                    208: -- PROCEDURES DEALING WITH ALIASES --
                    209: 
                    210: CreateAlias: PROCEDURE [alias, sameAs: ObjectName, agent: Authenticator]
                    211: RETURNS [distinguishedObject: ObjectName]
                    212: REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError,
                    213:        WrongServer] = 10;
                    214: 
                    215: DeleteAlias: PROCEDURE [alias: ObjectName, agent: Authenticator]
                    216: RETURNS [distinguishedObject: ObjectName]
                    217: REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError,
                    218:        WrongServer] = 11;
                    219: 
                    220: ListAliases: PROCEDURE [pattern: ObjectNamePattern, list: BulkData.Sink,
                    221:        agent: Authenticator]
                    222: REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 8;
                    223: 
                    224: -- PROCEDURES DEALING WITH PROPERTIES --
                    225: 
                    226: DeleteProperty: PROCEDURE [name: ObjectName, property: Property,
                    227:        agent: Authenticator]
                    228: RETURNS [distinguishedObject: ObjectName]
                    229: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    230:        UpdateError, WrongServer] = 14;
                    231: 
                    232: ListProperties: PROCEDURE [pattern: ObjectNamePattern, agent: Authenticator]
                    233: RETURNS [distinguishedObject: ObjectName, properties: Properties]
                    234: REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 15;
                    235: 
                    236: -- PROCEDURES DEALING WITH THE ITEM PROPERTY --
                    237: 
                    238: AddItemProperty: PROCEDURE [name: ObjectName, newProperty: Property,
                    239:        value: Item, agent: Authenticator]
                    240: RETURNS [distinguishedObject: ObjectName]
                    241: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    242:        UpdateError, WrongServer] = 13;
                    243: 
                    244: RetrieveItem: PROCEDURE [pattern: ObjectNamePattern, property: Property,
                    245:        agent: Authenticator]
                    246: RETURNS [distinguishedObject: ObjectName, value: Item]
                    247: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    248:        WrongServer] = 16;
                    249: 
                    250: ChangeItem: PROCEDURE [name: ObjectName, property: Property, newValue: Item,
                    251:        agent: Authenticator]
                    252: RETURNS [distinguishedObject: ObjectName]
                    253: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    254:        UpdateError, WrongServer] = 17;
                    255: 
                    256: -- PROCEDURES DEALING WITH THE GROUP PROPERTY -- 
                    257: 
                    258: AddGroupProperty: PROCEDURE [name: ObjectName, newProperty: Property,
                    259:        membership: BulkData.Source, agent: Authenticator]
                    260: RETURNS [distinguishedObject: ObjectName]
                    261: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    262:        UpdateError, WrongServer] = 12;
                    263: 
                    264: RetrieveMembers: PROCEDURE [pattern: ObjectNamePattern, property: Property,
                    265:        membership: BulkData.Sink, agent: Authenticator]
                    266: RETURNS [distinguishedObject: ObjectName]
                    267: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    268:        WrongServer] = 18;
                    269: 
                    270: AddMember: PROCEDURE [name: ObjectName, property: Property,
                    271:        newMember: ThreePartName, agent: Authenticator]
                    272: RETURNS [distinguishedObject: ObjectName]
                    273: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    274:        UpdateError, WrongServer] = 19;
                    275: 
                    276: AddSelf: PROCEDURE [name: ObjectName, property: Property, agent: Authenticator]
                    277: RETURNS [distinguishedObject: ObjectName]
                    278: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    279:        UpdateError, WrongServer] = 20;
                    280: 
                    281: DeleteMember: PROCEDURE [name: ObjectName, property: Property,
                    282:        member: ThreePartName, agent: Authenticator]
                    283: RETURNS [distinguishedObject: ObjectName]
                    284: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    285:        UpdateError, WrongServer] = 21;
                    286: 
                    287: DeleteSelf: PROCEDURE [name: ObjectName, property: Property, agent: Authenticator]
                    288: RETURNS [distinguishedObject: ObjectName]
                    289: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    290:        UpdateError, WrongServer] = 22;
                    291: 
                    292: isMember: PROCEDURE [memberOf: ObjectNamePattern,
                    293:        property, secondaryProperty: Property, name: ThreePartName,
                    294:        agent: Authenticator]
                    295: RETURNS [isMember: BOOLEAN, distinguishedObject: ObjectName]
                    296: REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError,
                    297:        WrongServer] = 23;
                    298: 
                    299: -- PROCEDURES DEALING WITH SERVERS --
                    300: 
                    301: RetrieveAddresses: PROCEDURE
                    302: RETURNS [address: NetworkAddressList]
                    303: REPORTS [CallError] = 0;
                    304: 
                    305: ListDomainServed: PROCEDURE [domains: BulkData.Sink, agent: Authenticator]
                    306: REPORTS [AuthenticationError, CallError] = 1;
                    307: 
                    308: END. -- of Clearinghouse --
                    309: 

unix.superglobalmegacorp.com

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