try:
ret = cell.call_pt_server(params, kafs.PR_AddToGroup, uid, gid)
+ prcache.evict_groups()
except kafs.AbortPRIDEXIST:
error("Entry for id already exists ; unable to add user ", user, " to group ", group, ignored, "\n")
if "force" not in params:
ret = cell.call_pt_server(params, kafs.PR_NewEntry, name, kafs.PRGRP, oid)
new_id = ret.id
output("Group ", name, " has id ", new_id, "\n")
+ evict_name(name)
+ evict_id(new_id)
except kafs.AbortPREXIST:
error("Entry for name already exists ; unable to create group ", name, "\n")
if "force" not in params:
def main(params):
exitcode = 0
cell = params["cell"]
+ prcache = cell.get_prcache(params)
names = params["name"]
if "id" in params:
ret = cell.call_pt_server(params, kafs.PR_INewEntry, name, 0, 0)
new_id = ret.id
output("User ", name, " has id ", new_id, "\n")
+ evict_name(name)
+ evict_id(new_id)
except kafs.AbortPREXIST:
error("Entry for name already exists ; unable to create user ", name, "\n")
if "force" not in params:
try:
verbose("Deleting user ", uid, " (", prcache.id_to_name(uid), ")\n")
ret = cell.call_pt_server(params, kafs.PR_Delete, uid)
+ prcache.evict_id(uid)
+ prcache.evict_groups()
except kafs.AbortPRNOENT:
error("User or group doesn't exist deleting ", name, " (id ", uid, ")\n")
if "force" not in params:
try:
ret = cell.call_pt_server(params, kafs.PR_RemoveFromGroup, uid, gid)
+ prcache.evict_groups()
except kafs.AbortPRNOENT:
error("User or group doesn't exist ; unable to remove user ", user, " from group ", group, ignored, "\n")
if "force" not in params:
try:
verbose("Renaming ", uid, " to ", newname, "\n")
ret = cell.call_pt_server(params, kafs.PR_ChangeEntry, uid, newname, 0, 0)
+ prcache.evict_id(uid)
+ prcache.evict_groups()
except kafs.AbortPREXIST:
error("Entry for name already exists ; unable to change name of ",
prcache.id_to_name(uid), " to ", newname, "\n")
entry = AFS_PR_Entry(name, None)
self.__name2id[name] = entry
+ ###########################################################################
+ #
+ # Evict a name and the corresponding ID from the cache
+ #
+ ###########################################################################
+ def evict_name(self, name):
+ if name in self.__name2id:
+ ugid = self.__name2id[name].ugid()
+ del self.__name2id[name]
+ if ugid != None:
+ del self.__id2name[ugid]
+
+ ###########################################################################
+ #
+ # Evict an id and the corresponding name from the cache
+ #
+ ###########################################################################
+ def evict_id(self, ugid):
+ if ugid in self.__id2name:
+ name = self.__id2name[ugid].name()
+ del self.__id2name[ugid]
+ if name != None:
+ del self.__name2id[name]
+
###########################################################################
#
# Note that an ID is unknown
assert(gid < 0)
group = self.__groups[gid]
return group.expand(self)
+
+ ###########################################################################
+ #
+ # Evict all group records from the group cache
+ #
+ ###########################################################################
+ def evict_groups(self):
+ self.__groups = dict()