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