<> <> <> <> DIRECTORY CrRPC, CHNameP2V0, AuthenticationP14V2, BulkDataP0V1, CHOpsP2V3; CHOpsP2V3ClientImpl: CEDAR PROGRAM IMPORTS CrRPC EXPORTS CHOpsP2V3 ~ { OPEN CHOpsP2V3; <> ArgumentError: PUBLIC ERROR [problem: CHOpsP2V3.ArgumentProblem, which: CHOpsP2V3.WhichArgument] ~ CODE; PropertyError: PUBLIC ERROR [problem: CHOpsP2V3.PropertyProblem, distinguishedObject: CHNameP2V0.ThreePartName] ~ CODE; CallError: PUBLIC ERROR [problem: CHOpsP2V3.CallProblem] ~ CODE; UpdateError: PUBLIC ERROR [problem: CHOpsP2V3.UpdateProblem, found: BOOLEAN, which: CHOpsP2V3.WhichArgument, distinguishedObject: CHNameP2V0.ThreePartName] ~ CODE; AuthenticationError: PUBLIC ERROR [problem: AuthenticationP14V2.Problem] ~ CODE; WrongServer: PUBLIC ERROR [hint: CHNameP2V0.ThreePartName] ~ CODE; <> GetError: CrRPC.GetErrorProc ~ { SELECT errNum FROM 2 => { problem: CHOpsP2V3.ArgumentProblem; which: CHOpsP2V3.WhichArgument; problem _ VAL[CrRPC.GetCARDINAL[h]]; which _ VAL[CrRPC.GetCARDINAL[h]]; ERROR ArgumentError[problem, which] }; 3 => { problem: CHOpsP2V3.PropertyProblem; distinguishedObject: CHNameP2V0.ThreePartName; problem _ VAL[CrRPC.GetCARDINAL[h]]; distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; ERROR PropertyError[problem, distinguishedObject] }; 1 => { problem: CHOpsP2V3.CallProblem; problem _ VAL[CrRPC.GetCARDINAL[h]]; ERROR CallError[problem] }; 4 => { problem: CHOpsP2V3.UpdateProblem; found: BOOLEAN; which: CHOpsP2V3.WhichArgument; distinguishedObject: CHNameP2V0.ThreePartName; problem _ VAL[CrRPC.GetCARDINAL[h]]; found _ CrRPC.GetBOOL[h]; which _ VAL[CrRPC.GetCARDINAL[h]]; distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; ERROR UpdateError[problem, found, which, distinguishedObject] }; 6 => { problem: AuthenticationP14V2.Problem; problem _ VAL[CrRPC.GetCARDINAL[h]]; ERROR AuthenticationError[problem] }; 5 => { hint: CHNameP2V0.ThreePartName; hint.organization _ CrRPC.GetROPE[h]; hint.domain _ CrRPC.GetROPE[h]; hint.object _ CrRPC.GetROPE[h]; ERROR WrongServer[hint] }; ENDCASE => { ERROR CrRPC.Error[h, remoteError, "Unexpected Remote Error"]; }; }; <> CreateAlias: PUBLIC PROC [h: CrRPC.Handle, alias: CHNameP2V0.ThreePartName, sameAs: CHNameP2V0.ThreePartName, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, alias.organization]; CrRPC.PutROPE[h, alias.domain]; CrRPC.PutROPE[h, alias.object]; CrRPC.PutROPE[h, sameAs.organization]; CrRPC.PutROPE[h, sameAs.domain]; CrRPC.PutROPE[h, sameAs.object]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~10, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; DeleteProperty: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, property: CARD, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARD[h, property]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~14, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; CreateObject: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, agent: CHOpsP2V3.Authenticator] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~2, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ListAliases: PUBLIC PROC [h: CrRPC.Handle, pattern: CHNameP2V0.ThreePartName, list: CrRPC.BulkDataSink, agent: CHOpsP2V3.Authenticator] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, pattern.organization]; CrRPC.PutROPE[h, pattern.domain]; CrRPC.PutROPE[h, pattern.object]; CrRPC.PutBulkDataSink[h, list]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~8, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ListDomainsServed: PUBLIC PROC [h: CrRPC.Handle, domains: CrRPC.BulkDataSink, agent: CHOpsP2V3.Authenticator] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutBulkDataSink[h, domains]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~1, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; DeleteSelf: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, property: CARD, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARD[h, property]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~22, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; RetrieveItem: PUBLIC PROC [h: CrRPC.Handle, pattern: CHNameP2V0.ThreePartName, property: CARD, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName, value: CHOpsP2V3.Item] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, pattern.organization]; CrRPC.PutROPE[h, pattern.domain]; CrRPC.PutROPE[h, pattern.object]; CrRPC.PutCARD[h, property]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; value _ NEW[CHOpsP2V3.ItemObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~16, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ListOrganizations: PUBLIC PROC [h: CrRPC.Handle, pattern: ROPE, list: CrRPC.BulkDataSink, agent: CHOpsP2V3.Authenticator] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, pattern]; CrRPC.PutBulkDataSink[h, list]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~5, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ListProperties: PUBLIC PROC [h: CrRPC.Handle, pattern: CHNameP2V0.ThreePartName, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName, properties: CHOpsP2V3.Properties] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, pattern.organization]; CrRPC.PutROPE[h, pattern.domain]; CrRPC.PutROPE[h, pattern.object]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; properties _ NEW[CHOpsP2V3.PropertiesObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO properties.body[i0] _ CrRPC.GetCARD[h]; ENDLOOP; }; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~15, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ListDomains: PUBLIC PROC [h: CrRPC.Handle, pattern: CHNameP2V0.TwoPartName, list: CrRPC.BulkDataSink, agent: CHOpsP2V3.Authenticator] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, pattern.organization]; CrRPC.PutROPE[h, pattern.domain]; CrRPC.PutBulkDataSink[h, list]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~6, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; RetrieveMembers: PUBLIC PROC [h: CrRPC.Handle, pattern: CHNameP2V0.ThreePartName, property: CARD, membership: CrRPC.BulkDataSink, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, pattern.organization]; CrRPC.PutROPE[h, pattern.domain]; CrRPC.PutROPE[h, pattern.object]; CrRPC.PutCARD[h, property]; CrRPC.PutBulkDataSink[h, membership]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~18, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; IsMember: PUBLIC PROC [h: CrRPC.Handle, memberOf: CHNameP2V0.ThreePartName, property: CARD, secondaryProperty: CARD, name: CHNameP2V0.ThreePartName, agent: CHOpsP2V3.Authenticator] RETURNS [isMember: BOOLEAN, distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, memberOf.organization]; CrRPC.PutROPE[h, memberOf.domain]; CrRPC.PutROPE[h, memberOf.object]; CrRPC.PutCARD[h, property]; CrRPC.PutCARD[h, secondaryProperty]; CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { isMember _ CrRPC.GetBOOL[h]; distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~23, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ListAliasesOf: PUBLIC PROC [h: CrRPC.Handle, pattern: CHNameP2V0.ThreePartName, list: CrRPC.BulkDataSink, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, pattern.organization]; CrRPC.PutROPE[h, pattern.domain]; CrRPC.PutROPE[h, pattern.object]; CrRPC.PutBulkDataSink[h, list]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~9, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ChangeItem: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, property: CARD, newValue: CHOpsP2V3.Item, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARD[h, property]; CrRPC.PutCARDINAL[h, newValue.length]; FOR i0: CARDINAL IN [0..newValue.length) DO CrRPC.PutCARDINAL[h, newValue.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~17, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; DeleteMember: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, property: CARD, member: CHNameP2V0.ThreePartName, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARD[h, property]; CrRPC.PutROPE[h, member.organization]; CrRPC.PutROPE[h, member.domain]; CrRPC.PutROPE[h, member.object]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~21, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; AddSelf: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, property: CARD, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARD[h, property]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~20, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; RetrieveAddresses: PUBLIC PROC [h: CrRPC.Handle] RETURNS [address: CHOpsP2V3.NetworkAddressList] ~ { PutArgs: CrRPC.PutArgsProc ~ { }; GetResults: CrRPC.GetResultsProc ~ { { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; address _ NEW[CHOpsP2V3.NetworkAddressListObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO FOR i2: CARDINAL IN [0..2) DO address.body[i0].network[i2] _ CrRPC.GetCARDINAL[h]; ENDLOOP; FOR i2: CARDINAL IN [0..3) DO address.body[i0].host[i2] _ CrRPC.GetCARDINAL[h]; ENDLOOP; address.body[i0].socket _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~0, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; DeleteAlias: PUBLIC PROC [h: CrRPC.Handle, alias: CHNameP2V0.ThreePartName, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, alias.organization]; CrRPC.PutROPE[h, alias.domain]; CrRPC.PutROPE[h, alias.object]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~11, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; LookupObject: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~4, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; AddGroupProperty: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, newProperty: CARD, membership: CrRPC.BulkDataSource, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARD[h, newProperty]; CrRPC.PutBulkDataSource[h, membership]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~12, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; DeleteObject: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, agent: CHOpsP2V3.Authenticator] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~3, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; AddItemProperty: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, newProperty: CARD, value: CHOpsP2V3.Item, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARD[h, newProperty]; CrRPC.PutCARDINAL[h, value.length]; FOR i0: CARDINAL IN [0..value.length) DO CrRPC.PutCARDINAL[h, value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~13, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; AddMember: PUBLIC PROC [h: CrRPC.Handle, name: CHNameP2V0.ThreePartName, property: CARD, newMember: CHNameP2V0.ThreePartName, agent: CHOpsP2V3.Authenticator] RETURNS [distinguishedObject: CHNameP2V0.ThreePartName] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, name.organization]; CrRPC.PutROPE[h, name.domain]; CrRPC.PutROPE[h, name.object]; CrRPC.PutCARD[h, property]; CrRPC.PutROPE[h, newMember.organization]; CrRPC.PutROPE[h, newMember.domain]; CrRPC.PutROPE[h, newMember.object]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { distinguishedObject.organization _ CrRPC.GetROPE[h]; distinguishedObject.domain _ CrRPC.GetROPE[h]; distinguishedObject.object _ CrRPC.GetROPE[h]; }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~19, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; ListObjects: PUBLIC PROC [h: CrRPC.Handle, pattern: CHNameP2V0.ThreePartName, property: CARD, list: CrRPC.BulkDataSink, agent: CHOpsP2V3.Authenticator] RETURNS [] ~ { PutArgs: CrRPC.PutArgsProc ~ { CrRPC.PutROPE[h, pattern.organization]; CrRPC.PutROPE[h, pattern.domain]; CrRPC.PutROPE[h, pattern.object]; CrRPC.PutCARD[h, property]; CrRPC.PutBulkDataSink[h, list]; CrRPC.PutCARDINAL[h, ORD[agent.credentials.type]]; CrRPC.PutCARDINAL[h, agent.credentials.value.length]; FOR i0: CARDINAL IN [0..agent.credentials.value.length) DO CrRPC.PutCARDINAL[h, agent.credentials.value.body[i0]]; ENDLOOP; CrRPC.PutCARDINAL[h, agent.verifier.length]; FOR i0: CARDINAL IN [0..agent.verifier.length) DO CrRPC.PutCARDINAL[h, agent.verifier.body[i0]]; ENDLOOP; }; GetResults: CrRPC.GetResultsProc ~ { NULL }; CrRPC.Call[h~h, remotePgm~2, remotePgmVersion~3, remoteProc~7, putArgs~PutArgs, getResults~GetResults, getError~GetError]; }; }...