CHOps3.cr
Copyright © 1986 by Xerox Corporation. All rights reserved.
Bill Jackson (bj) August 8, 1986 7:25:29 pm PDT
Demers, January 5, 1987 10:30:56 pm PST
CHOps: PROGRAM 2 VERSION 3 = BEGIN
DEPENDS UPON
BulkData (0) VERSION 1,
CHName (2) VERSION 0,
Authentication (14) VERSION 2;
Copied types
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;
Primitive types
Property: TYPE = LONG CARDINAL;
Enumerated types
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
};
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)
};
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
};
StreamKind: TYPE = {
nextSegment(0),
lastSegment(1)
};
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
};
WhichArgument: TYPE = {
first(1), -- concerns the first name or property argument
second(2) -- concerns the second name or property argument
};
Array types
NetworkNumber: TYPE = ARRAY 2 OF UNSPECIFIED;
HostNumber: TYPE = ARRAY 3 OF UNSPECIFIED;
Record Types
Authenticator: TYPE = RECORD [
credentials: Authentication.Credentials,
verifier: Authentication.Verifier
];
DomainList: TYPE = RECORD [
segment: DomainSequence
restOfStream: StreamOfDomain
];
DomainNameList: TYPE = RECORD [
segment: DomainNameSequence
restOfStream: StreamOfDomainName
];
NetworkAddress: TYPE = RECORD [
network: NetworkNumber,
host: HostNumber,
socket: UNSPECIFIED
];
ObjectList: TYPE = RECORD [
segment: ObjectSequence
restOfStream: StreamOfObject
];
ObjectNameList: TYPE = RECORD [
segment: ObjectNameSequence
restOfStream: StreamOfObjectName
];
OrganizationList: TYPE = RECORD [
segment: OrganizationSequence
restOfStream: StreamOfOrganization
];
ThreePartNameList: TYPE = RECORD [
segment: ThreePartNameSequence
restOfStream: StreamOfThreePartName
];
Choice Types
StreamOfDomain: TYPE = CHOICE StreamKind OF {
nextSegment => DomainList, -- (0)
lastSegment => DomainSequence -- (1)
};
StreamOfDomainName: TYPE = CHOICE StreamKind OF {
nextSegment => DomainNameList, -- (0)
lastSegment => DomainNameSequence -- (1)
};
StreamOfObject: TYPE = CHOICE StreamKind OF {
nextSegment => ObjectList, -- (0)
lastSegment => ObjectSequence -- (1)
};
StreamOfObjectName: TYPE = CHOICE StreamKind OF {
nextSegment => ObjectNameList, -- (0)
lastSegment => ObjectNameSequence -- (1)
};
StreamOfOrganization: TYPE = CHOICE StreamKind OF {
nextSegment => OrganizationList, -- (0)
lastSegment => OrganizationSequence -- (1)
};
StreamOfThreePartName: TYPE = CHOICE StreamKind OF {
nextSegment => ThreePartNameList, -- (0)
lastSegment => ThreePartNameSequence -- (1)
};
Sequence Types
DomainSequence: TYPE = SEQUENCE OF Domain;
DomainNameSequence: TYPE = SEQUENCE OF DomainName;
Item: TYPE = SEQUENCE 500 OF UNSPECIFIED;
NetworkAddressList: TYPE = SEQUENCE 40 OF NetworkAddress;
ObjectSequence: TYPE = SEQUENCE OF Object;
ObjectNameSequence: TYPE = SEQUENCE OF ObjectName;
OrganizationSequence: TYPE = SEQUENCE OF Organization;
Properties: TYPE = SEQUENCE 250 OF Property;
ThreePartNameSequence: TYPE = SEQUENCE OF ThreePartName;
Constants
all: Property = 0;
nullProperty: Property = 37777777777B;
Initialized Constants
wildcard: STRING = "*"; -- the wildcard character (asterisk)
Remote Errors
ArgumentError: ERROR [problem: ArgumentProblem, which: WhichArgument] = 2;
AuthenticationError: ERROR [problem: Authentication.Problem] = 6;
CallError: ERROR [problem: CallProblem] = 1;
PropertyError: ERROR [problem: PropertyProblem, distinguishedObject: ObjectName] = 3;
UpdateError: ERROR [problem: UpdateProblem, found: BOOLEAN, which: WhichArgument, distinguishedObject: ObjectName] = 4;
WrongServer: ERROR [hint: ObjectName] = 5;
Remote procedures
PROCEDURES DEALING WITH OBJECTS
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;
PROCEDURES DEALING WITH ALIASES
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;
PROCEDURES DEALING WITH PROPERTIES
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;
PROCEDURES DEALING WITH THE ITEM PROPERTY
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;
PROCEDURES DEALING WITH THE GROUP PROPERTY
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;
PROCEDURES DEALING WITH SERVERS
RetrieveAddresses: PROCEDURE
RETURNS [address: NetworkAddressList]
REPORTS [CallError] = 0;
ListDomainsServed: PROCEDURE [domains: BulkData.Sink, agent: Authenticator]
REPORTS [AuthenticationError, CallError] = 1;
END.