-- GrapevineUser: DEFs for updates to the database
-- [Indigo]<Grapevine>User>NameUpdateDefs.mesa
-- Andrew Birrell August 27, 1982 3:10 pm
DIRECTORY
BodyDefs USING[ Connect, Password, Remark, RName ],
ProtocolDefs USING[ MakeKey, RSOperation ],
NameInfoDefs USING[ Outcome ];
NameUpdateDefs: DEFINITIONS
IMPORTS ProtocolDefs =
BEGIN
-- Replicated from ProtocolDefs --
MakeKey: PROC[text: STRING] RETURNS[ BodyDefs.Password ] = INLINE
{ RETURN[ ProtocolDefs.MakeKey[text] ] };
-- Private subroutines --
Update: PRIVATE PROC[user: BodyDefs.RName,
password: BodyDefs.Password,
op: ProtocolDefs.RSOperation,
target: BodyDefs.RName,
value: STRING ← NIL,
newPwd: BodyDefs.Password ← [,,,],
reporter: PROC[STRING] ← NIL]
RETURNS[NameInfoDefs.Outcome];
-- Creation and Deletion --
CreateIndividual: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
individual: BodyDefs.RName,
newPwd: BodyDefs.Password ← [0,0,0,0] ]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, CreateIndividual, individual, NIL, newPwd] ] };
DeleteIndividual: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
individual: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, DeleteIndividual, individual] ] };
CreateGroup: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
group: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, CreateGroup, group] ] };
DeleteGroup: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
group: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, DeleteGroup, group] ] };
-- Updates to single-valued components --
SetPassword: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
individual: BodyDefs.RName, newPwd: BodyDefs.Password]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, ChangePassword, individual, NIL, newPwd] ] };
SetConnect: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
individual: BodyDefs.RName, connect: BodyDefs.Connect]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, ChangeConnect, individual, connect] ] };
SetRemark: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
group: BodyDefs.RName, remark: BodyDefs.Remark]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, ChangeRemark, group, remark] ] };
-- Adding to list-valued components --
AddMailbox: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
individual: BodyDefs.RName, site: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, AddMailBox, individual, site] ] };
AddForward: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
individual: BodyDefs.RName, dest: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, AddForward, individual, dest] ] };
AddMember: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
group: BodyDefs.RName, member: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, AddMember, group, member] ] };
AddOwner: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
group: BodyDefs.RName, owner: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, AddOwner, group, owner] ] };
AddFriend: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
group: BodyDefs.RName, friend: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, AddFriend, group, friend] ] };
-- Removing from list-valued components --
RemoveMailbox: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
individual: BodyDefs.RName, site: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, DeleteMailBox, individual, site] ] };
RemoveForward: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
individual: BodyDefs.RName, dest: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, DeleteForward, individual, dest] ] };
RemoveMember: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
group: BodyDefs.RName, member: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, DeleteMember, group, member] ] };
RemoveOwner: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
group: BodyDefs.RName, owner: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, DeleteOwner, group, owner] ] };
RemoveFriend: PROC[user: BodyDefs.RName, password: BodyDefs.Password,
group: BodyDefs.RName, friend: BodyDefs.RName]
RETURNS[NameInfoDefs.Outcome] = INLINE
{ RETURN[ Update[user, password, DeleteFriend, group, friend] ] };
END.