// GrapevineNameInfo.bcpl // Copyright Xerox Corporation 1981 // Last modified January 4, 1982 12:52 PM by Taft get "Grapevine.decl" get "GrapevineProtocol.decl" get "GrapevineInternal.decl" external [ // outgoing procedures IsMemberClosure; IsInACL; ReadRList; ReadRString; Authenticate // incoming procedures SendWord; SendRName; ReceiveWord; ReceiveRName; ReceiveRList Enquire; EnquireWithStamp BSPWriteBlock; BSPForceOutput Gets; Puts; DefaultArgs; Free // incoming statics offsetBSPStr ] //---------------------------------------------------------------------------- let IsMemberClosure(group, member) = //---------------------------------------------------------------------------- // Determines whether member appears anywhere in the tree that results from // expanding group; see IsInACL for details. IsInACL(group, member, dItself+dMember+dClosure) //---------------------------------------------------------------------------- and IsInACL(name, member, descriptor) = valof //---------------------------------------------------------------------------- // Determines membership in an ACL, as specified by descriptor, which is any // combination of: {dItself|dItsRegistry} + {dMember|dOwner|dFriend} + // {dDirect|dClosure|dUpArrow} // name identifies the ACL; member is the name being tested for membership; // both are RNames. Returns one of the following: // ecIsMember member is in the ACL // ecIsNotMember member is not in the ACL // ecBadRName name does not exist or is of wrong type for op // ecAllDown can't contact any R-Server for name's registry [ let res = nil // member, descriptor, and res must be consecutive in frame let returnCode = Enquire(name, IsInACLWork, lv member) resultis selecton returnCode<>GUS.zone when // done with it. If unsuccessful, stores an error code in @lvEC (if // supplied) and returns zero. The error codes are: // ecBadRName name does not exist or is of wrong type for op // ecAllDown can't contact any R-Server for name's registry [ DefaultArgs(lv na, -2, lv na) let string = 0 // at op+3 in frame let returnCode = Enquire(name, ReadRStringWork, lv op) if string eq 0 then @lvEC = returnCode<