-- 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.