<> <> <> <> DIRECTORY CrRPC, CHNameP2V0, AuthenticationP14V2, BulkDataP0V1, ClearinghouseP2V2; ClearinghouseP2V2ServerImpl: CEDAR PROGRAM IMPORTS CrRPC, ClearinghouseP2V2 ~ { OPEN ClearinghouseP2V2; Server: CrRPC.ServerProc ~ { <<[h: Handle, pgm: CARD, pgmVersion: CARDINAL, proc: CARDINAL, beginReturn: BeginReturnProc, beginError: BeginErrorProc, beginReject: BeginRejectProc]>> ENABLE { ClearinghouseP2V2.ArgumentError => { -- (2) beginError[h, 2]; CrRPC.PutCARDINAL[h, ORD[problem]]; CrRPC.PutCARDINAL[h, ORD[which]]; GO TO Finished; }; ClearinghouseP2V2.PropertyError => { -- (3) beginError[h, 3]; CrRPC.PutCARDINAL[h, ORD[problem]]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; GO TO Finished; }; ClearinghouseP2V2.CallError => { -- (1) beginError[h, 1]; CrRPC.PutCARDINAL[h, ORD[problem]]; GO TO Finished; }; ClearinghouseP2V2.UpdateError => { -- (4) beginError[h, 4]; CrRPC.PutCARDINAL[h, ORD[problem]]; CrRPC.PutBOOL[h, found]; CrRPC.PutCARDINAL[h, ORD[which]]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; GO TO Finished; }; ClearinghouseP2V2.AuthenticationError => { -- (6) beginError[h, 6]; CrRPC.PutCARDINAL[h, ORD[problem]]; GO TO Finished; }; ClearinghouseP2V2.WrongServer => { -- (5) beginError[h, 5]; CrRPC.PutROPE[h, hint.organization]; CrRPC.PutROPE[h, hint.domain]; CrRPC.PutROPE[h, hint.object]; GO TO Finished; }; }; IF (pgmVersion # 2) THEN { beginReject[h, CrRPC.noSuchVersion]; CrRPC.PutCARDINAL[h, 2]; --low CrRPC.PutCARDINAL[h, 2]; --high RETURN }; SELECT proc FROM 10 => { -- CreateAlias alias: CHNameP2V0.ThreePartName; sameAs: CHNameP2V0.ThreePartName; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; alias.organization _ CrRPC.GetROPE[h]; alias.domain _ CrRPC.GetROPE[h]; alias.object _ CrRPC.GetROPE[h]; sameAs.organization _ CrRPC.GetROPE[h]; sameAs.domain _ CrRPC.GetROPE[h]; sameAs.object _ CrRPC.GetROPE[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ CreateAlias[h, alias, sameAs, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 14 => { -- DeleteProperty name: CHNameP2V0.ThreePartName; property: CARD; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; property _ CrRPC.GetCARD[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ DeleteProperty[h, name, property, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 2 => { -- CreateObject name: CHNameP2V0.ThreePartName; agent: ClearinghouseP2V2.Authenticator; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [] _ CreateObject[h, name, agent]; beginReturn[h]; }; 8 => { -- ListAliases pattern: CHNameP2V0.ThreePartName; list: CrRPC.BulkDataSink; agent: ClearinghouseP2V2.Authenticator; pattern.organization _ CrRPC.GetROPE[h]; pattern.domain _ CrRPC.GetROPE[h]; pattern.object _ CrRPC.GetROPE[h]; TRUSTED { list _ CrRPC.GetBulkDataSink[h]; }; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [] _ ListAliases[h, pattern, list, agent]; beginReturn[h]; }; 22 => { -- DeleteSelf name: CHNameP2V0.ThreePartName; property: CARD; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; property _ CrRPC.GetCARD[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ DeleteSelf[h, name, property, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 16 => { -- RetrieveItem pattern: CHNameP2V0.ThreePartName; property: CARD; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; value: ClearinghouseP2V2.Item; pattern.organization _ CrRPC.GetROPE[h]; pattern.domain _ CrRPC.GetROPE[h]; pattern.object _ CrRPC.GetROPE[h]; property _ CrRPC.GetCARD[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject, value] _ RetrieveItem[h, pattern, property, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; CrRPC.PutCARDINAL[h, value.length]; FOR i0: CARDINAL IN [0..value.length) DO CrRPC.PutCARDINAL[h, value.body[i0]]; ENDLOOP; }; 5 => { -- ListOrganizations pattern: ROPE; list: CrRPC.BulkDataSink; agent: ClearinghouseP2V2.Authenticator; pattern _ CrRPC.GetROPE[h]; TRUSTED { list _ CrRPC.GetBulkDataSink[h]; }; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [] _ ListOrganizations[h, pattern, list, agent]; beginReturn[h]; }; 15 => { -- ListProperties pattern: CHNameP2V0.ThreePartName; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; properties: ClearinghouseP2V2.Properties; pattern.organization _ CrRPC.GetROPE[h]; pattern.domain _ CrRPC.GetROPE[h]; pattern.object _ CrRPC.GetROPE[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject, properties] _ ListProperties[h, pattern, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; CrRPC.PutCARDINAL[h, properties.length]; FOR i0: CARDINAL IN [0..properties.length) DO CrRPC.PutCARD[h, properties.body[i0]]; ENDLOOP; }; 18 => { -- RetrieveMembers pattern: CHNameP2V0.ThreePartName; property: CARD; membership: CrRPC.BulkDataSink; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; pattern.organization _ CrRPC.GetROPE[h]; pattern.domain _ CrRPC.GetROPE[h]; pattern.object _ CrRPC.GetROPE[h]; property _ CrRPC.GetCARD[h]; TRUSTED { membership _ CrRPC.GetBulkDataSink[h]; }; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ RetrieveMembers[h, pattern, property, membership, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 1 => { -- ListDomainServed domains: CrRPC.BulkDataSink; agent: ClearinghouseP2V2.Authenticator; TRUSTED { domains _ CrRPC.GetBulkDataSink[h]; }; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [] _ ListDomainServed[h, domains, agent]; beginReturn[h]; }; 23 => { -- IsMember memberOf: CHNameP2V0.ThreePartName; property: CARD; secondaryProperty: CARD; name: CHNameP2V0.ThreePartName; agent: ClearinghouseP2V2.Authenticator; isMember: BOOLEAN; distinguishedObject: CHNameP2V0.ThreePartName; memberOf.organization _ CrRPC.GetROPE[h]; memberOf.domain _ CrRPC.GetROPE[h]; memberOf.object _ CrRPC.GetROPE[h]; property _ CrRPC.GetCARD[h]; secondaryProperty _ CrRPC.GetCARD[h]; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [isMember, distinguishedObject] _ IsMember[h, memberOf, property, secondaryProperty, name, agent]; beginReturn[h]; CrRPC.PutBOOL[h, isMember]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 9 => { -- ListAliasesOf pattern: CHNameP2V0.ThreePartName; list: CrRPC.BulkDataSink; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; pattern.organization _ CrRPC.GetROPE[h]; pattern.domain _ CrRPC.GetROPE[h]; pattern.object _ CrRPC.GetROPE[h]; TRUSTED { list _ CrRPC.GetBulkDataSink[h]; }; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ ListAliasesOf[h, pattern, list, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 17 => { -- ChangeItem name: CHNameP2V0.ThreePartName; property: CARD; newValue: ClearinghouseP2V2.Item; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; property _ CrRPC.GetCARD[h]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; newValue _ NEW[ClearinghouseP2V2.ItemObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO newValue.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ ChangeItem[h, name, property, newValue, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 6 => { -- ListDomain pattern: CHNameP2V0.TwoPartName; list: CrRPC.BulkDataSink; agent: ClearinghouseP2V2.Authenticator; pattern.organization _ CrRPC.GetROPE[h]; pattern.domain _ CrRPC.GetROPE[h]; TRUSTED { list _ CrRPC.GetBulkDataSink[h]; }; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [] _ ListDomain[h, pattern, list, agent]; beginReturn[h]; }; 21 => { -- DeleteMember name: CHNameP2V0.ThreePartName; property: CARD; member: CHNameP2V0.ThreePartName; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; property _ CrRPC.GetCARD[h]; member.organization _ CrRPC.GetROPE[h]; member.domain _ CrRPC.GetROPE[h]; member.object _ CrRPC.GetROPE[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ DeleteMember[h, name, property, member, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 20 => { -- AddSelf name: CHNameP2V0.ThreePartName; property: CARD; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; property _ CrRPC.GetCARD[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ AddSelf[h, name, property, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 0 => { -- RetrieveAddresses address: ClearinghouseP2V2.NetworkAddressList; [address] _ RetrieveAddresses[h]; beginReturn[h]; CrRPC.PutCARDINAL[h, address.length]; FOR i0: CARDINAL IN [0..address.length) DO FOR i1: CARDINAL IN [0..2) DO CrRPC.PutCARDINAL[h, address.body[i0].network[i1]]; ENDLOOP; FOR i1: CARDINAL IN [0..3) DO CrRPC.PutCARDINAL[h, address.body[i0].host[i1]]; ENDLOOP; CrRPC.PutCARDINAL[h, address.body[i0].socket]; ENDLOOP; }; 11 => { -- DeleteAlias alias: CHNameP2V0.ThreePartName; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; alias.organization _ CrRPC.GetROPE[h]; alias.domain _ CrRPC.GetROPE[h]; alias.object _ CrRPC.GetROPE[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ DeleteAlias[h, alias, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 4 => { -- LookupObject name: CHNameP2V0.ThreePartName; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ LookupObject[h, name, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 12 => { -- AddGroupProperty name: CHNameP2V0.ThreePartName; newProperty: CARD; membership: CrRPC.BulkDataSource; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; newProperty _ CrRPC.GetCARD[h]; TRUSTED { membership _ CrRPC.GetBulkDataSource[h]; }; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ AddGroupProperty[h, name, newProperty, membership, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 3 => { -- DeleteObject name: CHNameP2V0.ThreePartName; agent: ClearinghouseP2V2.Authenticator; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [] _ DeleteObject[h, name, agent]; beginReturn[h]; }; 13 => { -- AddItemProperty name: CHNameP2V0.ThreePartName; newProperty: CARD; value: ClearinghouseP2V2.Item; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; newProperty _ CrRPC.GetCARD[h]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; value _ NEW[ClearinghouseP2V2.ItemObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ AddItemProperty[h, name, newProperty, value, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 19 => { -- AddMember name: CHNameP2V0.ThreePartName; property: CARD; newMember: CHNameP2V0.ThreePartName; agent: ClearinghouseP2V2.Authenticator; distinguishedObject: CHNameP2V0.ThreePartName; name.organization _ CrRPC.GetROPE[h]; name.domain _ CrRPC.GetROPE[h]; name.object _ CrRPC.GetROPE[h]; property _ CrRPC.GetCARD[h]; newMember.organization _ CrRPC.GetROPE[h]; newMember.domain _ CrRPC.GetROPE[h]; newMember.object _ CrRPC.GetROPE[h]; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [distinguishedObject] _ AddMember[h, name, property, newMember, agent]; beginReturn[h]; CrRPC.PutROPE[h, distinguishedObject.organization]; CrRPC.PutROPE[h, distinguishedObject.domain]; CrRPC.PutROPE[h, distinguishedObject.object]; }; 7 => { -- ListObjects pattern: CHNameP2V0.ThreePartName; property: CARD; list: CrRPC.BulkDataSink; agent: ClearinghouseP2V2.Authenticator; pattern.organization _ CrRPC.GetROPE[h]; pattern.domain _ CrRPC.GetROPE[h]; pattern.object _ CrRPC.GetROPE[h]; property _ CrRPC.GetCARD[h]; TRUSTED { list _ CrRPC.GetBulkDataSink[h]; }; agent.credentials.type _ VAL[CrRPC.GetCARDINAL[h]]; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.credentials.value _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.credentials.value.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; { length1: CARDINAL ~ CrRPC.GetCARDINAL[h]; agent.verifier _ NEW[AuthenticationP14V2.SeqWordsObject[length1]]; FOR i0: CARDINAL IN [0..length1) DO agent.verifier.body[i0] _ CrRPC.GetCARDINAL[h]; ENDLOOP; }; [] _ ListObjects[h, pattern, property, list, agent]; beginReturn[h]; }; ENDCASE => { beginReject[h, CrRPC.noSuchProcedure]; }; EXITS Finished => { NULL }; }; CrRPC.RegisterServerProc[pgm~2, serverProc~Server, pgmVersion~2]; CrRPC.EnsureListener[class~$SPP]; }...