def main(params):
exitcode = 0
cell = params["cell"]
- pt_conn = cell.open_pt_server(params)
names = params["name"]
if "id" in params:
verbose("Adding user ", name, "\n")
if i < len(ids):
new_id = int(ids[i])
- ret = kafs.PR_INewEntry(pt_conn, name, new_id, 0)
+ ret = cell.call_pt_server(params, kafs.PR_INewEntry, name, new_id, 0)
else:
- ret = kafs.PR_NewEntry(pt_conn, name, 0, 0)
+ ret = cell.call_pt_server(params, kafs.PR_INewEntry, name, 0, 0)
new_id = ret.id
output("User ", name, " has id ", new_id, "\n")
- except ConnectionRefusedError:
- # Move on to the next server
- verbose("Connection refused\n");
- pt_conn = cell.open_pt_server(params)
- continue
- except kafs.AbortUNOTSYNC:
- verbose("Server is not synchronised\n");
- pt_conn = cell.open_pt_server(params)
- continue
except kafs.AbortPREXIST:
error("Entry for name already exists ; unable to create user ", name, "\n")
if "force" not in params:
error("Entry for id already exists ; unable to create user ", name, " with id ", new_id, "\n")
if "force" not in params:
break
- except kafs.RemoteAbort as e:
- if str(e) == "Aborted 17":
- error("failed to add user ", i, " (File exists)\n")
- exitcode = 1
- else:
- raise
return exitcode
def main(params):
cell = params["cell"]
- pt_conn = cell.open_pt_server(params)
for name in params["nameorid"]:
try:
# Convert the id to a name for message purposes - note that if
# the entry does not exist, this will just stringify the ID for
# us.
- ret = kafs.PR_IDToName(pt_conn, [ uid ])
+ ret = cell.call_pt_server(params, kafs.PR_IDToName, [ uid ])
name = ret.nlist[0].prname
- verbose("Deleting user ", uid, " (", name, ")\n")
- ret = kafs.PR_Delete(pt_conn, uid)
else:
verbose("Name ", name, "\n")
- ret = kafs.PR_NameToID(pt_conn, [ name ])
+ ret = cell.call_pt_server(params, kafs.PR_NameToID, [ name ])
uid = ret.ilist[0]
if uid == kafs.PR_ANONYMOUSID and name != "anonymous":
error("User or group doesn't exist so couldn't look up id for " + name + "\n")
- else:
- verbose("Deleting user ", uid, " (", name, ")\n")
- ret = kafs.PR_Delete(pt_conn, uid)
+ if "force" not in params:
+ break
+ continue
+
+ verbose("Deleting user ", uid, " (", name, ")\n")
+ ret = cell.call_pt_server(params, kafs.PR_Delete, uid)
- except ConnectionRefusedError:
- # Move on to the next server
- verbose("Connection refused\n");
- pt_conn = cell.open_pt_server(params)
- continue
- except kafs.AbortUNOTSYNC:
- verbose("Server is not synchronised\n");
- pt_conn = cell.open_pt_server(params)
- continue
except kafs.AbortPRNOENT:
error("User or group doesn't exist deleting ", name, " (id ", uid, ")\n")
if "force" not in params:
def main(params):
cell = params["cell"]
- pt_conn = cell.open_pt_server(params)
if "users" in params and "groups" in params:
flags = kafs.PRWANTUSERS | kafs.PRWANTGROUPS
else:
flags = kafs.PRWANTUSERS
- while True:
- try:
- ret = kafs.PR_ListEntries(pt_conn, flags, 0)
+ ret = cell.call_pt_server(params, kafs.PR_ListEntries, flags, 0)
- output("Name ID Owner Creator\n")
- for i in ret.entries:
- outputf("{:24s} {:7d} {:7d} {:7d}\n", i.name, i.id, i.owner, i.creator)
-
- except ConnectionRefusedError:
- # Move on to the next server
- verbose("Connection refused\n");
- pt_conn = cell.open_pt_server(params)
- continue
- except kafs.AbortUNOTSYNC:
- verbose("Server is not synchronised\n");
- pt_conn = cell.open_pt_server(params)
- continue
- break
+ output("Name ID Owner Creator\n")
+ for i in ret.entries:
+ outputf("{:24s} {:7d} {:7d} {:7d}\n", i.name, i.id, i.owner, i.creator)
def main(params):
cell = params["cell"]
- pt_conn = cell.open_pt_server(params)
- while True:
- try:
- ret = kafs.PR_ListMax(pt_conn)
- output("Max user id is ", ret.uid, " and max group id is ", ret.gid, ".\n")
-
- except ConnectionRefusedError:
- # Move on to the next server
- verbose("Connection refused\n");
- pt_conn = cell.open_pt_server(params)
- continue
- except kafs.AbortUNOTSYNC:
- verbose("Server is not synchronised\n");
- pt_conn = cell.open_pt_server(params)
- continue
- break
+ ret = cell.call_pt_server(params, kafs.PR_ListMax)
+ output("Max user id is ", ret.uid, " and max group id is ", ret.gid, ".\n")
self.__vlserver_names = dict()
self.__vlservers = []
self.__vlconn = None
- self.__ptservers = None
+ self.__ptserver_index = None
+ self.__ptconn = None
def __repr__(self):
return "<" + "AFS:" + self.__name + ">"
# Open a Protection Server connection
def open_pt_server(self, params=None):
- if self.__ptservers == None:
+ if self.__ptserver_index == None:
self.__ptservers = self.query_vl_addrs()
+ self.__ptserver_index = 0
- if len(self.__ptservers) == 0:
+ if self.__ptserver_index >= len(self.__ptservers):
raise CellError("Couldn't connect to a PT server")
- server = self.__ptservers[0]
- self.__ptservers[0] = self.__ptservers[1:]
+ server = self.__ptservers[self.__ptserver_index]
key, security = self.determine_security(params)
kafs.PR_SERVICE,
key, security)
return pt_conn
+
+ # Find and call out to a working protection server
+ def call_pt_server(self, params, rpc, *args):
+ while True:
+ if not self.__ptconn:
+ self.__ptconn = self.open_pt_server(params)
+ try:
+ return rpc(self.__ptconn, *args)
+ except ConnectionRefusedError:
+ # Move on to the next server
+ verbose("Connection refused\n");
+ except kafs.AbortUNOTSYNC:
+ verbose("Server is not synchronised\n");
+ except OSError as e:
+ verbose(e, "\n");
+ self.__ptconn = None
+ self.__ptserver_index += 1