CHOps: PROGRAM 2 VERSION 3 = BEGIN DEPENDS UPON BulkData (0) VERSION 1, CHName (2) VERSION 0, Authentication (14) VERSION 2; Organization: TYPE = CHName.Organization; OrganizationName: TYPE = CHName.OrganizationName; Domain: TYPE = CHName.Domain; DomainName: TYPE = CHName.DomainName; Object: TYPE = CHName.Object; ObjectName: TYPE = CHName.ObjectName; Name: TYPE = CHName.Name; TwoPartName: TYPE = CHName.TwoPartName; ThreePartName: TYPE = CHName.ThreePartName; OrganizationNamePattern: TYPE = CHName.Organization; DomainNamePattern: TYPE = CHName.TwoPartName; ObjectNamePattern: TYPE = CHName.ThreePartName; StreamKind: TYPE = { nextSegment(0), lastSegment(1) }; StreamOfDomain: TYPE = CHOICE StreamKind OF { nextSegment => DomainSequence, -- (0) lastSegment => DomainSequence -- (1) }; DomainSequence: TYPE = SEQUENCE OF Domain; StreamOfDomainName: TYPE = CHOICE StreamKind OF { nextSegment => DomainNameSequence, -- (0) lastSegment => DomainNameSequence -- (1) }; DomainNameSequence: TYPE = SEQUENCE OF DomainName; StreamOfObject: TYPE = CHOICE StreamKind OF { nextSegment => ObjectSequence, -- (0) lastSegment => ObjectSequence -- (1) }; ObjectSequence: TYPE = SEQUENCE OF Object; StreamOfObjectName: TYPE = CHOICE StreamKind OF { nextSegment => ObjectNameSequence, -- (0) lastSegment => ObjectNameSequence -- (1) }; ObjectNameSequence: TYPE = SEQUENCE OF ObjectName; StreamOfOrganization: TYPE = CHOICE StreamKind OF { nextSegment => OrganizationSequence, -- (0) lastSegment => OrganizationSequence -- (1) }; OrganizationSequence: TYPE = SEQUENCE OF Organization; StreamOfThreePartName: TYPE = CHOICE StreamKind OF { nextSegment => ThreePartNameSequence, -- (0) lastSegment => ThreePartNameSequence -- (1) }; ThreePartNameSequence: TYPE = SEQUENCE OF ThreePartName; Property: TYPE = LONG CARDINAL; Properties: TYPE = SEQUENCE 250 OF Property; all: Property = 0; nullProperty: Property = 37777777777B; Item: TYPE = SEQUENCE 500 OF UNSPECIFIED; -- value of an item property NetworkNumber: TYPE = ARRAY 2 OF UNSPECIFIED; HostNumber: TYPE = ARRAY 3 OF UNSPECIFIED; SocketNumber: TYPE = UNSPECIFIED; NetworkAddress: TYPE = RECORD [ network: NetworkNumber, host: HostNumber, socket: SocketNumber ]; NetworkAddressList: TYPE = SEQUENCE 40 OF NetworkAddress; Authenticator: TYPE = RECORD [ credentials: Authentication.Credentials, verifier: Authentication.Verifier ]; wildcard: STRING = "*"; -- the wildcard character (asterisk) CreateObject: PROCEDURE [name: ObjectName, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError, WrongServer] = 2; DeleteObject: PROCEDURE [name: ObjectName, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError, WrongServer] = 3; LookupObject: PROCEDURE [name: ObjectNamePattern, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 4; ListOrganizations: PROCEDURE [pattern: OrganizationName--Pattern--, list: BulkData.Sink, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 5; ListDomains: PROCEDURE [pattern: DomainNamePattern, list: BulkData.Sink, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 6; ListObjects: PROCEDURE [pattern: ObjectNamePattern, property: Property, list: BulkData.Sink, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 7; ListAliasesOf: PROCEDURE [pattern: ObjectNamePattern, list: BulkData.Sink, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 9; CreateAlias: PROCEDURE [alias, sameAs: ObjectName, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError, WrongServer] = 10; DeleteAlias: PROCEDURE [alias: ObjectName, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, UpdateError, WrongServer] = 11; ListAliases: PROCEDURE [pattern: ObjectNamePattern, list: BulkData.Sink, agent: Authenticator] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 8; DeleteProperty: PROCEDURE [name: ObjectName, property: Property, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 14; ListProperties: PROCEDURE [pattern: ObjectNamePattern, agent: Authenticator] RETURNS [distinguishedObject: ObjectName, properties: Properties] REPORTS [ArgumentError, AuthenticationError, CallError, WrongServer] = 15; AddItemProperty: PROCEDURE [name: ObjectName, newProperty: Property, value: Item, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 13; RetrieveItem: PROCEDURE [pattern: ObjectNamePattern, property: Property, agent: Authenticator] RETURNS [distinguishedObject: ObjectName, value: Item] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, WrongServer] = 16; ChangeItem: PROCEDURE [name: ObjectName, property: Property, newValue: Item, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 17; AddGroupProperty: PROCEDURE [name: ObjectName, newProperty: Property, membership: BulkData.Source, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 12; RetrieveMembers: PROCEDURE [pattern: ObjectNamePattern, property: Property, membership: BulkData.Sink, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, WrongServer] = 18; AddMember: PROCEDURE [name: ObjectName, property: Property, newMember: ThreePartName, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 19; AddSelf: PROCEDURE [name: ObjectName, property: Property, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 20; DeleteMember: PROCEDURE [name: ObjectName, property: Property, member: ThreePartName, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 21; DeleteSelf: PROCEDURE [name: ObjectName, property: Property, agent: Authenticator] RETURNS [distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, UpdateError, WrongServer] = 22; IsMember: PROCEDURE [memberOf: ObjectNamePattern, property, secondaryProperty: Property, name: ThreePartName, agent: Authenticator] RETURNS [isMember: BOOLEAN, distinguishedObject: ObjectName] REPORTS [ArgumentError, AuthenticationError, CallError, PropertyError, WrongServer] = 23; RetrieveAddresses: PROCEDURE RETURNS [address: NetworkAddressList] REPORTS [CallError] = 0; ListDomainsServed: PROCEDURE [domains: BulkData.Sink, agent: Authenticator] REPORTS [AuthenticationError, CallError] = 1; WhichArgument: TYPE = { first(1), -- concerns the first name or property argument second(2) -- concerns the second name or property argument }; ArgumentError: ERROR [problem: ArgumentProblem, which: WhichArgument] = 2; ArgumentProblem: TYPE = { illegalProperty(10), -- property is not usable by a client illegalOrganizationName(11), -- the organization component of the name is incorrect, e.g., too long or short, or has wild card characters when not allowed illegalDomainName(12), -- the domain component of the name is incorrect, e.g., too long or short, or has wild card characters when not allowed illegalObjectName(13), -- the object component of the name is incorrect, e.g., too long or short, or has wild card characters when not allowed noSuchOrganization(14), -- the name's organization component does not exist noSuchDomain(15), -- the name's domain component does not exist noSuchObject(16) -- the name's object component does not exist }; AuthenticationError: ERROR [problem: Authentication.Problem] = 6; CallError: ERROR [problem: CallProblem] = 1; CallProblem: TYPE = { accessRightsInsufficient(1), -- operation prevented by access controls tooBusy(2), -- server is too busy to service this request serverDown(3), -- a remote Clearinghouse server was down and was needed for this request useCourier(4), -- server insists that Courier be used for this particular request other(5) }; PropertyError: ERROR [problem: PropertyProblem, distinguishedObject: ObjectName] = 3; PropertyProblem: TYPE = { missing(20), -- the object exists, but the property doesn't wrongType(21) -- client wanted a Group but it was an Item, or vice versa }; UpdateError: ERROR [problem: UpdateProblem, found: BOOLEAN, which: WhichArgument, distinguishedObject: ObjectName] = 4; UpdateProblem: TYPE = { noChange(30), -- operation wouldn't change the database outOfDate(31), -- more recent information was in database objectOverflow(32), -- the particular object will have too much data associated with it databaseOverflow(33) -- the server has run out of room }; WrongServer: ERROR [hint: ObjectName] = 5; END. 8 CHOps3.cr Copyright Σ 1986, 1991 by Xerox Corporation. All rights reserved. Bill Jackson (bj) August 8, 1986 7:25:29 pm PDT Demers, January 15, 1987 0:08:03 am PST Copied types Types Describing Bulk Parameters Types and Constants Describing Properties Network Addresses Authentication Initialized Constants Remote procedures PROCEDURES DEALING WITH OBJECTS PROCEDURES DEALING WITH ALIASES PROCEDURES DEALING WITH PROPERTIES PROCEDURES DEALING WITH THE ITEM PROPERTY PROCEDURES DEALING WITH THE GROUP PROPERTY PROCEDURES DEALING WITH SERVERS Remote Errors Κ •NewlineDelimiter –(cedarcode) style™šœ ™ Icodešœ Οeœ6™BK™/K™'—J˜šΟnœΟkœŸœŸ˜"šŸœŸ˜ Kšœ Ÿœ˜Kšœ Ÿœ˜KšœŸœ˜—K˜headšœ ™ K™KšœŸœ˜)KšœŸœ˜1K˜KšœŸœ Ÿœ˜Kšœ Ÿœ˜%K˜KšœŸœ Ÿœ˜Kšœ Ÿœ˜%K˜KšœŸœ˜Kšœ Ÿœ˜'KšœŸœ˜+K˜KšœŸœ˜4KšœŸœ˜-KšœŸœ˜/K˜—™ K˜Kšœ Ÿœ&˜6K˜šœŸœŸœ Ÿœ˜-KšœΟc˜%Kšœ ˜$Kšœ˜—KšœŸœŸœŸœ˜*K˜šœŸœŸœ Ÿœ˜1Kšœ# ˜)Kšœ" ˜(Kšœ˜—KšœŸœŸœŸœ ˜2K˜šœŸœŸœ Ÿœ˜-Kšœ ˜%Kšœ ˜$Kšœ˜—šœŸœŸœŸœ˜*K˜—šœŸœŸœ Ÿœ˜1Kšœ# ˜)Kšœ" ˜(Kšœ˜—šœŸœŸœŸœ ˜2K˜—šœŸœŸœ Ÿœ˜3Kšœ% ˜+Kšœ$ ˜*Kšœ˜—šœŸœŸœŸœ˜6K˜—šœŸœŸœ Ÿœ˜4Kšœ& ˜,Kšœ% ˜+Kšœ˜—KšœŸœŸœŸœ˜8K˜—™)K˜Kšœ ŸœŸœŸœ˜Kšœ ŸœŸœŸœ ˜,K˜K˜K˜&K˜Kš œŸœŸœŸœŸ œ ˜FK˜—™K˜Kš œŸœŸœŸœŸ œ˜-Kš œ ŸœŸœŸœŸ œ˜*KšœŸœŸ œ˜!K˜šœŸœŸœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜—K˜KšœŸœŸœŸœ˜9K˜—™K˜šœŸœŸœ˜Kšœ(˜(Kšœ!˜!K˜—K˜—™K™Kšœ Ÿœ  "˜Kšœ˜—K˜KšžœŸœ'˜AK˜Kšž œŸœ˜,šœ Ÿœ˜Kšœ '˜FKšœ +˜9Kšœ G˜XKšœ @˜QK˜K˜—K˜Kšž œŸœA˜UšœŸœ˜Kšœ  .˜;Kšœ :˜HKšœ˜K˜—K˜Kšž œŸœ!Ÿœ=˜wšœŸœ˜Kšœ )˜7Kšœ *˜9Kšœ C˜WKšœ !˜6Kšœ˜—K˜Kšž œŸœ˜*K˜—KšŸœ˜—K˜K˜—…—%^0—