From: David Howells <dhowells@redhat.com> Date: Tue, 13 May 2014 16:43:30 +0000 (+0100) Subject: Implement "pts listentries" X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=786dd2b06dc4bfad7540680ee7bc697caa348368;p=users%2Fdhowells%2Fkafs-utils.git Implement "pts listentries" Signed-off-by: David Howells <dhowells@redhat.com> --- diff --git a/rpc-api/pts.xg b/rpc-api/pts.xg index 67009d9..0173c37 100644 --- a/rpc-api/pts.xg +++ b/rpc-api/pts.xg @@ -61,6 +61,7 @@ const PRSETFIELDSENTRY = 516; const PRLISTOWNED = 517; const PRGETCPS2 = 518; const PRGETHOSTCPS = 519; +const PRLISTENTRIES = 521; /* Constants */ const PR_MAXNAMELEN = 64; @@ -287,5 +288,11 @@ GetHostCPS(IN uint32_t host, OUT prlist *elist, OUT uint32_t *over) = 519; +const PRWANTUSERS = 1; +const PRWANTGROUPS = 2; + +ListEntries(IN uint32_t flags, + IN uint32_t unknown, + OUT prcheckentry<PR_MAXLIST> *entries) = PRLISTENTRIES; /* the end */ diff --git a/suite/commands/pts/listentries.py b/suite/commands/pts/listentries.py new file mode 100644 index 0000000..fb35ad6 --- /dev/null +++ b/suite/commands/pts/listentries.py @@ -0,0 +1,79 @@ +# +# AFS Server management toolkit: List protection DB entries +# -*- 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 = "Display all users or groups in the Protection Database" + +command_arguments = [ + [ "users", get_dummy, "fn" ], + [ "groups", get_dummy, "fn" ], + [ "cell", get_cell, "os", "<cell name>" ], + [ "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" ), +] + +description = r""" +Display all users or groups in the Protection Database +""" + +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 + elif "groups" in params: + flags = kafs.PRWANTGROUPS + else: + flags = kafs.PRWANTUSERS + + while True: + try: + ret = kafs.PR_ListEntries(pt_conn, 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