|
|
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.