From d0b52bb8f6ebbc100ac7b904413ba57a0404bf88 Mon Sep 17 00:00:00 2001 From: David Howells Date: Tue, 13 May 2014 15:59:37 +0100 Subject: [PATCH] Implement "pts delete" Signed-off-by: David Howells --- suite/commands/pts/d.py | 1 + suite/commands/pts/delete.py | 96 ++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 suite/commands/pts/d.py create mode 100644 suite/commands/pts/delete.py diff --git a/suite/commands/pts/d.py b/suite/commands/pts/d.py new file mode 100644 index 0000000..e215a6f --- /dev/null +++ b/suite/commands/pts/d.py @@ -0,0 +1 @@ +alias = "delete" diff --git a/suite/commands/pts/delete.py b/suite/commands/pts/delete.py new file mode 100644 index 0000000..fa173fc --- /dev/null +++ b/suite/commands/pts/delete.py @@ -0,0 +1,96 @@ +# +# AFS Server management toolkit: Delete a protection db record +# -*- coding: utf-8 -*- +# + +__copyright__ = """ +Copyright (C) 2014 Red Hat, Inc. All Rights Reserved. +Written by David Howells (dhowells@redhat.com) + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public Licence version 2 as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public Licence for more details. + +You should have received a copy of the GNU General Public Licence +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" + +from afs.argparse import * +from afs.lib.output import * +import kafs +import sys + +help = "Delete a Protection Database entry" + +command_arguments = [ + [ "nameorid", get_strings, "rm", "+" ], + [ "cell", get_cell, "os", "" ], + [ "noauth", get_auth, "fn" ], + [ "localauth", get_auth, "fn" ], + [ "verbose", get_verbose, "fn" ], + [ "encrypt", get_dummy, "fn" ], + [ "force", get_dummy, "fn" ], +] + +cant_combine_arguments = [ + ( "cell", "localauth" ), + ( "noauth", "localauth" ), +] + +argument_size_limits = { + "nameorid" : kafs.PR_MAXNAMELEN, +} + +description = r""" +Delete a Protection Database entry +""" + +def main(params): + cell = params["cell"] + pt_conn = cell.open_pt_server(params) + + for name in params["nameorid"]: + try: + if name.isnumeric() or name[0] == "-" and name[1:].isnumeric(): + uid = int(name) + verbose("ID ", uid, "\n") + # 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 ]) + 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 ]) + 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) + + 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: + break + except kafs.AbortPRPERM: + error("Permission denied deleting ", name, " (id: ", uid, ")\n") + if "force" not in params: + break -- 2.49.0