From a47d7ebda924e6f30f1664f38bfa7c322fad7887 Mon Sep 17 00:00:00 2001 From: David Howells Date: Wed, 23 Sep 2015 11:41:44 +0100 Subject: [PATCH] setup: Sort out the Python setup so that it can build an RPM This does the following steps: (1) Adds a new command class to handle rxgen in the setup script so that the Python builder runs the XDR routine generation rather than needing a separate make step. (2) Moves everything that needs installing under kafs - which will be the name of the module. (3) Renames the module produced by the various C components to kafs.rpc and accesses it from python scripts with "import kafs.rpc as rpc" and then uses "rpc." instead of "kafs." to qualify accesses to the module. Signed-off-by: David Howells --- MANIFEST.in | 6 ++ Makefile | 21 ++--- suite/afs => afs | 2 +- kafs/README.txt | 1 + kafs/__init__.py | 24 ++++++ af_rxrpc.c => kafs/af_rxrpc.c | 0 af_rxrpc.h => kafs/af_rxrpc.h | 0 {suite => kafs}/apropos.py | 8 +- {suite => kafs}/argparse.py | 18 ++--- {suite => kafs}/bash-comp-helper.py | 14 ++-- {suite => kafs}/commands/__init__.py | 0 {suite => kafs}/commands/bos/__init__.py | 0 {suite => kafs}/commands/bos/addhost.py | 10 +-- {suite => kafs}/commands/bos/addkey.py | 18 ++--- {suite => kafs}/commands/bos/adduser.py | 12 +-- {suite => kafs}/commands/bos/create.py | 20 ++--- {suite => kafs}/commands/bos/delete.py | 14 ++-- {suite => kafs}/commands/bos/exec.py | 14 ++-- {suite => kafs}/commands/bos/getcell.py | 0 {suite => kafs}/commands/bos/getdate.py | 14 ++-- {suite => kafs}/commands/bos/getlog.py | 12 +-- {suite => kafs}/commands/bos/getrestart.py | 28 +++---- {suite => kafs}/commands/bos/getrestricted.py | 8 +- {suite => kafs}/commands/bos/install.py | 14 ++-- {suite => kafs}/commands/bos/listhosts.py | 12 +-- {suite => kafs}/commands/bos/listkeys.py | 14 ++-- {suite => kafs}/commands/bos/listusers.py | 10 +-- {suite => kafs}/commands/bos/prune.py | 16 ++-- {suite => kafs}/commands/bos/removehost.py | 10 +-- {suite => kafs}/commands/bos/removekey.py | 14 ++-- {suite => kafs}/commands/bos/removeuser.py | 12 +-- {suite => kafs}/commands/bos/restart.py | 18 ++--- {suite => kafs}/commands/bos/setauth.py | 12 +-- {suite => kafs}/commands/bos/setcellname.py | 10 +-- {suite => kafs}/commands/bos/setrestart.py | 16 ++-- {suite => kafs}/commands/bos/setrestricted.py | 10 +-- {suite => kafs}/commands/bos/shutdown.py | 18 ++--- {suite => kafs}/commands/bos/start.py | 14 ++-- {suite => kafs}/commands/bos/startup.py | 16 ++-- {suite => kafs}/commands/bos/status.py | 46 +++++------ {suite => kafs}/commands/bos/stop.py | 16 ++-- {suite => kafs}/commands/bos/uninstall.py | 16 ++-- {suite => kafs}/commands/pts/__init__.py | 0 {suite => kafs}/commands/pts/adduser.py | 12 +-- {suite => kafs}/commands/pts/cg.py | 0 {suite => kafs}/commands/pts/check.py | 0 {suite => kafs}/commands/pts/chown.py | 16 ++-- {suite => kafs}/commands/pts/creategroup.py | 16 ++-- {suite => kafs}/commands/pts/createuser.py | 16 ++-- {suite => kafs}/commands/pts/cu.py | 0 {suite => kafs}/commands/pts/d.py | 0 {suite => kafs}/commands/pts/delete.py | 14 ++-- {suite => kafs}/commands/pts/e.py | 0 {suite => kafs}/commands/pts/examine.py | 34 ++++---- {suite => kafs}/commands/pts/g.py | 0 {suite => kafs}/commands/pts/groups.py | 0 {suite => kafs}/commands/pts/listentries.py | 14 ++-- {suite => kafs}/commands/pts/listmax.py | 8 +- {suite => kafs}/commands/pts/listowned.py | 14 ++-- {suite => kafs}/commands/pts/m.py | 0 {suite => kafs}/commands/pts/membership.py | 16 ++-- {suite => kafs}/commands/pts/removeuser.py | 12 +-- {suite => kafs}/commands/pts/rename.py | 16 ++-- {suite => kafs}/commands/pts/setfields.py | 36 ++++----- {suite => kafs}/commands/pts/setmax.py | 14 ++-- {suite => kafs}/commands/vos/__init__.py | 0 {suite => kafs}/commands/vos/create.py | 60 +++++++------- {suite => kafs}/commands/vos/examine.py | 66 +++++++-------- {suite => kafs}/commands/vos/listaddrs.py | 28 +++---- {suite => kafs}/commands/vos/listpart.py | 10 +-- {suite => kafs}/commands/vos/listvldb.py | 30 +++---- {suite => kafs}/commands/vos/listvol.py | 24 +++--- {suite => kafs}/commands/vos/partinfo.py | 14 ++-- {suite => kafs}/commands/vos/status.py | 22 ++--- {suite => kafs}/exception.py | 0 {suite => kafs}/help.py | 8 +- kafs.c => kafs/kafs.c | 7 +- kafs.h => kafs/kafs.h | 0 kafs/lib/__init__.py | 24 ++++++ {suite => kafs}/lib/addrcache.py | 14 ++-- {suite => kafs}/lib/bosserver.py | 5 +- {suite => kafs}/lib/cell.py | 50 ++++++------ {suite => kafs}/lib/fileserver.py | 5 +- {suite => kafs}/lib/output.py | 0 {suite => kafs}/lib/parse_setrestart_time.py | 14 ++-- {suite => kafs}/lib/partition.py | 2 +- {suite => kafs}/lib/prcache.py | 15 ++-- {suite => kafs}/lib/server.py | 8 +- {suite => kafs}/lib/time.py | 0 {suite => kafs}/lib/uuid.py | 2 +- {suite => kafs}/lib/vlserver.py | 5 +- {suite => kafs}/lib/voldisplay.py | 38 ++++----- {suite => kafs}/lib/volserver.py | 5 +- {suite => kafs}/main.py | 24 +++--- py_passwd.c => kafs/py_passwd.c | 0 py_rxconn.c => kafs/py_rxconn.c | 0 py_rxgen.c => kafs/py_rxgen.c | 2 +- py_rxgen.h => kafs/py_rxgen.h | 0 py_rxsplit.c => kafs/py_rxsplit.c | 2 +- kafs/rpc-api/__init__.py | 3 + {rpc-api => kafs/rpc-api}/afsuuid.h | 0 {rpc-api => kafs/rpc-api}/bos.xg | 0 {rpc-api => kafs/rpc-api}/cb.xg | 0 {rpc-api => kafs/rpc-api}/common.h | 0 {rpc-api => kafs/rpc-api}/fs.xg | 0 {rpc-api => kafs/rpc-api}/ka.xg | 0 {rpc-api => kafs/rpc-api}/pts.xg | 0 {rpc-api => kafs/rpc-api}/rxgen.xg | 0 {rpc-api => kafs/rpc-api}/rxkad.xg | 0 {rpc-api => kafs/rpc-api}/ubik.xg | 0 {rpc-api => kafs/rpc-api}/vldb.xg | 0 {rpc-api => kafs/rpc-api}/volumeserver.xg | 0 rxgen.h => kafs/rxgen.h | 0 rxgen/emit_c_struct.py | 2 +- rxgen/emit_c_sync_funcs.py | 2 +- rxgen/emit_py_module.py | 6 +- rxgen/emit_py_sync_funcs.py | 2 +- rxgen/emit_py_types.py | 2 +- rxgen/rxgen.py | 40 ++++++---- rxgen/rxgen_bits.py | 10 +-- setup.py | 80 ++++++++++++++----- vl-test.py | 14 ++-- 122 files changed, 758 insertions(+), 663 deletions(-) create mode 100644 MANIFEST.in rename suite/afs => afs (98%) create mode 100644 kafs/README.txt create mode 100644 kafs/__init__.py rename af_rxrpc.c => kafs/af_rxrpc.c (100%) rename af_rxrpc.h => kafs/af_rxrpc.h (100%) rename {suite => kafs}/apropos.py (92%) rename {suite => kafs}/argparse.py (96%) rename {suite => kafs}/bash-comp-helper.py (97%) rename {suite => kafs}/commands/__init__.py (100%) rename {suite => kafs}/commands/bos/__init__.py (100%) rename {suite => kafs}/commands/bos/addhost.py (91%) rename {suite => kafs}/commands/bos/addkey.py (87%) rename {suite => kafs}/commands/bos/adduser.py (90%) rename {suite => kafs}/commands/bos/create.py (86%) rename {suite => kafs}/commands/bos/delete.py (88%) rename {suite => kafs}/commands/bos/exec.py (89%) rename {suite => kafs}/commands/bos/getcell.py (100%) rename {suite => kafs}/commands/bos/getdate.py (91%) rename {suite => kafs}/commands/bos/getlog.py (94%) rename {suite => kafs}/commands/bos/getrestart.py (81%) rename {suite => kafs}/commands/bos/getrestricted.py (93%) rename {suite => kafs}/commands/bos/install.py (91%) rename {suite => kafs}/commands/bos/listhosts.py (89%) rename {suite => kafs}/commands/bos/listkeys.py (90%) rename {suite => kafs}/commands/bos/listusers.py (91%) rename {suite => kafs}/commands/bos/prune.py (87%) rename {suite => kafs}/commands/bos/removehost.py (91%) rename {suite => kafs}/commands/bos/removekey.py (88%) rename {suite => kafs}/commands/bos/removeuser.py (90%) rename {suite => kafs}/commands/bos/restart.py (86%) rename {suite => kafs}/commands/bos/setauth.py (90%) rename {suite => kafs}/commands/bos/setcellname.py (90%) rename {suite => kafs}/commands/bos/setrestart.py (86%) rename {suite => kafs}/commands/bos/setrestricted.py (91%) rename {suite => kafs}/commands/bos/shutdown.py (85%) rename {suite => kafs}/commands/bos/start.py (87%) rename {suite => kafs}/commands/bos/startup.py (85%) rename {suite => kafs}/commands/bos/status.py (83%) rename {suite => kafs}/commands/bos/stop.py (86%) rename {suite => kafs}/commands/bos/uninstall.py (88%) rename {suite => kafs}/commands/pts/__init__.py (100%) rename {suite => kafs}/commands/pts/adduser.py (91%) rename {suite => kafs}/commands/pts/cg.py (100%) rename {suite => kafs}/commands/pts/check.py (100%) rename {suite => kafs}/commands/pts/chown.py (89%) rename {suite => kafs}/commands/pts/creategroup.py (88%) rename {suite => kafs}/commands/pts/createuser.py (87%) rename {suite => kafs}/commands/pts/cu.py (100%) rename {suite => kafs}/commands/pts/d.py (100%) rename {suite => kafs}/commands/pts/delete.py (90%) rename {suite => kafs}/commands/pts/e.py (100%) rename {suite => kafs}/commands/pts/examine.py (85%) rename {suite => kafs}/commands/pts/g.py (100%) rename {suite => kafs}/commands/pts/groups.py (100%) rename {suite => kafs}/commands/pts/listentries.py (87%) rename {suite => kafs}/commands/pts/listmax.py (92%) rename {suite => kafs}/commands/pts/listowned.py (91%) rename {suite => kafs}/commands/pts/m.py (100%) rename {suite => kafs}/commands/pts/membership.py (93%) rename {suite => kafs}/commands/pts/removeuser.py (91%) rename {suite => kafs}/commands/pts/rename.py (88%) rename {suite => kafs}/commands/pts/setfields.py (83%) rename {suite => kafs}/commands/pts/setmax.py (87%) rename {suite => kafs}/commands/vos/__init__.py (100%) rename {suite => kafs}/commands/vos/create.py (75%) rename {suite => kafs}/commands/vos/examine.py (70%) rename {suite => kafs}/commands/vos/listaddrs.py (83%) rename {suite => kafs}/commands/vos/listpart.py (92%) rename {suite => kafs}/commands/vos/listvldb.py (82%) rename {suite => kafs}/commands/vos/listvol.py (92%) rename {suite => kafs}/commands/vos/partinfo.py (88%) rename {suite => kafs}/commands/vos/status.py (88%) rename {suite => kafs}/exception.py (100%) rename {suite => kafs}/help.py (96%) rename kafs.c => kafs/kafs.c (91%) rename kafs.h => kafs/kafs.h (100%) create mode 100644 kafs/lib/__init__.py rename {suite => kafs}/lib/addrcache.py (90%) rename {suite => kafs}/lib/bosserver.py (92%) rename {suite => kafs}/lib/cell.py (86%) rename {suite => kafs}/lib/fileserver.py (92%) rename {suite => kafs}/lib/output.py (100%) rename {suite => kafs}/lib/parse_setrestart_time.py (92%) rename {suite => kafs}/lib/partition.py (97%) rename {suite => kafs}/lib/prcache.py (96%) rename {suite => kafs}/lib/server.py (94%) rename {suite => kafs}/lib/time.py (100%) rename {suite => kafs}/lib/uuid.py (98%) rename {suite => kafs}/lib/vlserver.py (92%) rename {suite => kafs}/lib/voldisplay.py (94%) rename {suite => kafs}/lib/volserver.py (92%) rename {suite => kafs}/main.py (89%) rename py_passwd.c => kafs/py_passwd.c (100%) rename py_rxconn.c => kafs/py_rxconn.c (100%) rename py_rxgen.c => kafs/py_rxgen.c (99%) rename py_rxgen.h => kafs/py_rxgen.h (100%) rename py_rxsplit.c => kafs/py_rxsplit.c (99%) create mode 100644 kafs/rpc-api/__init__.py rename {rpc-api => kafs/rpc-api}/afsuuid.h (100%) rename {rpc-api => kafs/rpc-api}/bos.xg (100%) rename {rpc-api => kafs/rpc-api}/cb.xg (100%) rename {rpc-api => kafs/rpc-api}/common.h (100%) rename {rpc-api => kafs/rpc-api}/fs.xg (100%) rename {rpc-api => kafs/rpc-api}/ka.xg (100%) rename {rpc-api => kafs/rpc-api}/pts.xg (100%) rename {rpc-api => kafs/rpc-api}/rxgen.xg (100%) rename {rpc-api => kafs/rpc-api}/rxkad.xg (100%) rename {rpc-api => kafs/rpc-api}/ubik.xg (100%) rename {rpc-api => kafs/rpc-api}/vldb.xg (100%) rename {rpc-api => kafs/rpc-api}/volumeserver.xg (100%) rename rxgen.h => kafs/rxgen.h (100%) diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..0fa6d12 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,6 @@ +include setup.py +include kafs/*.c +include kafs/*.h +include rxgen/*.py +include kafs/rpc-api/*.h +include kafs/rpc-api/*.xg diff --git a/Makefile b/Makefile index de6c506..d66a84d 100644 --- a/Makefile +++ b/Makefile @@ -1,20 +1,13 @@ -CFLAGS := $(shell python3-config --cflags) - -RXGEN := ./rxgen/rxgen.py $(wildcard ./rxgen/*.py) - -GENERATED := afs_xg.c afs_xg.h afs_py.c afs_py.h - -pykafs.so: $(GENERATED) +build: python3 setup.py build -#AFS_API := rpc-api/afsuuid.h rpc-api/vldb.xg -AFS_API := $(sort $(wildcard rpc-api/*.h)) $(sort $(wildcard rpc-api/*.xg)) +rpm: + python3 setup.py bdist_rpm -.rxgen.check $(GENERATED): $(AFS_API) $(RXGEN) - ./rxgen/rxgen.py $(AFS_API) - touch .rxgen.check +source_tarball: + python3 setup.py sdist clean: find \( -name "*~" -o -name "*.o" -o -name "*.so" \) -delete - rm -rf build/ - rm -f $(GENERATED) .rxgen.check + rm -rf build/ dist/ + rm -rf $(GENERATED) .rxgen.check diff --git a/suite/afs b/afs similarity index 98% rename from suite/afs rename to afs index 7699e4c..ed33c71 100755 --- a/suite/afs +++ b/afs @@ -42,7 +42,7 @@ if bin == 'bin' and prefix != sys.prefix: 'site-packages')] sys.path = local_path + sys.path -from afs.main import main +from kafs.main import main if __name__ == '__main__': main() diff --git a/kafs/README.txt b/kafs/README.txt new file mode 100644 index 0000000..33008e5 --- /dev/null +++ b/kafs/README.txt @@ -0,0 +1 @@ +These are the kAFS command line utilities. diff --git a/kafs/__init__.py b/kafs/__init__.py new file mode 100644 index 0000000..34ec353 --- /dev/null +++ b/kafs/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +__copyright__ = """ +Copyright (C) 2014 Red Hat, Inc. All Rights Reserved. +Written by David Howells (dhowells@redhat.com) + +Derived from StGIT: + +Copyright (C) 2005, Catalin Marinas +Copyright (C) 2008, Karl Hasselström + +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 +""" diff --git a/af_rxrpc.c b/kafs/af_rxrpc.c similarity index 100% rename from af_rxrpc.c rename to kafs/af_rxrpc.c diff --git a/af_rxrpc.h b/kafs/af_rxrpc.h similarity index 100% rename from af_rxrpc.h rename to kafs/af_rxrpc.h diff --git a/suite/apropos.py b/kafs/apropos.py similarity index 92% rename from suite/apropos.py rename to kafs/apropos.py index 04d1198..0bec57c 100644 --- a/suite/apropos.py +++ b/kafs/apropos.py @@ -21,9 +21,9 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * help = "Search by help text" @@ -39,7 +39,7 @@ def search_help(prog, cmdsetmod, commands, topic): matches = dict() for i in commands: if i == "help": - command = __import__("afs.help", globals(), locals(), ['*']) + command = __import__("kafs.help", globals(), locals(), ['*']) if topic in command.help.casefold(): matches["help"] = command.help continue diff --git a/suite/argparse.py b/kafs/argparse.py similarity index 96% rename from suite/argparse.py rename to kafs/argparse.py index 7258042..be6f350 100644 --- a/suite/argparse.py +++ b/kafs/argparse.py @@ -13,27 +13,27 @@ as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version. """ -from exception import AFSArgumentError, AFSHelpFlag -from afs.lib.output import set_verbosity +from kafs.exception import AFSArgumentError, AFSHelpFlag +from kafs.lib.output import set_verbosity def get_cell(switch, params): - from afs.lib.cell import cell + from kafs.lib.cell import cell return cell(params[0]) def get_bosserver(switch, params): - from afs.lib.bosserver import bosserver + from kafs.lib.bosserver import bosserver return bosserver(params[0]) def get_fileserver(switch, params): - from afs.lib.fileserver import fileserver + from kafs.lib.fileserver import fileserver return fileserver(params[0]) def get_volserver(switch, params): - from afs.lib.volserver import volserver + from kafs.lib.volserver import volserver return volserver(params[0]) def get_vlservers(switch, params): - from afs.lib.vlserver import vlserver + from kafs.lib.vlserver import vlserver servers = [] for i in params: servers.append(vlserver(params[0])) @@ -64,14 +64,14 @@ def get_file_names(switch, params): return params def get_partition_id(switch, params): - from afs.lib.partition import part2id + from kafs.lib.partition import part2id return part2id(params[0]) def get_auth(switch, params): return params def get_uuid(switch, params): - from afs.lib.uuid import str2uuid + from kafs.lib.uuid import str2uuid return str2uuid(params[0]) def get_string(switch, params): diff --git a/suite/bash-comp-helper.py b/kafs/bash-comp-helper.py similarity index 97% rename from suite/bash-comp-helper.py rename to kafs/bash-comp-helper.py index aef5986..3725aa5 100755 --- a/suite/bash-comp-helper.py +++ b/kafs/bash-comp-helper.py @@ -23,9 +23,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import sys, os -import afs.commands -from afs.argparse import * -from afs.lib.output import * +import kafs.commands +from kafs.argparse import * +from kafs.lib.output import * logfile = None @@ -99,7 +99,7 @@ def main(): del s # If we're starting from the "afs" program, we need to select the command set - cmdsets = afs.commands.get_command_sets() + cmdsets = kafs.commands.get_command_sets() #log("Command sets ", cmdsets, "\n") if cmdset == "afs": set_program_name("afs") @@ -122,7 +122,7 @@ def main(): error("Unknown command set '", cmdset, "'\n") sys.exit(1) - cmdsetmod = afs.commands.import_command_set(cmdset) + cmdsetmod = kafs.commands.import_command_set(cmdset) commands = cmdsetmod.get_command_list() commands.append("help") commands.append("apropos") @@ -149,9 +149,9 @@ def main(): # Load the command if cmd == "help": - command = __import__("afs.help", globals(), locals(), ['*']) + command = __import__("kafs.help", globals(), locals(), ['*']) elif cmd == "apropos": - command = __import__("afs.apropos", globals(), locals(), ['*']) + command = __import__("kafs.apropos", globals(), locals(), ['*']) else: command = cmdsetmod.get_command(cmd) # If it's an alias, then switch to the real module diff --git a/suite/commands/__init__.py b/kafs/commands/__init__.py similarity index 100% rename from suite/commands/__init__.py rename to kafs/commands/__init__.py diff --git a/suite/commands/bos/__init__.py b/kafs/commands/bos/__init__.py similarity index 100% rename from suite/commands/bos/__init__.py rename to kafs/commands/bos/__init__.py diff --git a/suite/commands/bos/addhost.py b/kafs/commands/bos/addhost.py similarity index 91% rename from suite/commands/bos/addhost.py rename to kafs/commands/bos/addhost.py index 8a8ded0..8923565 100644 --- a/suite/commands/bos/addhost.py +++ b/kafs/commands/bos/addhost.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Add a database server machine to the CellServDB file" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "host" : kafs.BOZO_BSSIZE, + "host" : rpc.BOZO_BSSIZE, } description = r""" @@ -60,4 +60,4 @@ def main(params): if "clone" in params: name = "[" + name + "]" verbose("Adding host ", name, "\n") - ret = kafs.BOZO_AddCellHost(bos_conn, name) + ret = rpc.BOZO_AddCellHost(bos_conn, name) diff --git a/suite/commands/bos/addkey.py b/kafs/commands/bos/addkey.py similarity index 87% rename from suite/commands/bos/addkey.py rename to kafs/commands/bos/addkey.py index b18e323..12654fc 100644 --- a/suite/commands/bos/addkey.py +++ b/kafs/commands/bos/addkey.py @@ -21,11 +21,11 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -from afs.lib.time import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +from kafs.lib.time import * +import kafs.rpc as rpc from getpass import getpass help = "Add a new server encryption key to the KeyFile file" @@ -62,8 +62,8 @@ def main(params): if passwd != passwd2: raise RuntimeError("Input key mismatch") - salted_passwd = kafs.afs_string_to_key(passwd, str(cell)) - key = kafs.bozo_key() + salted_passwd = rpc.afs_string_to_key(passwd, str(cell)) + key = rpc.bozo_key() key.data = salted_passwd a = "" @@ -72,6 +72,6 @@ def main(params): verbose("Key: {:d}: ".format(len(key.data)), a, "\n") try: - ret = kafs.BOZO_AddKey(bos_conn, int(params["kvno"]), key) - except kafs.AbortBZKVNOINUSE: + ret = rpc.BOZO_AddKey(bos_conn, int(params["kvno"]), key) + except rpc.AbortBZKVNOINUSE: errorf("failed to set key {:s} (kvno already used - have to remove existing kvno's before reuse)\n", params["kvno"]) diff --git a/suite/commands/bos/adduser.py b/kafs/commands/bos/adduser.py similarity index 90% rename from suite/commands/bos/adduser.py rename to kafs/commands/bos/adduser.py index 228e12e..ea05f74 100644 --- a/suite/commands/bos/adduser.py +++ b/kafs/commands/bos/adduser.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Add a privileged user to the UserList file" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "user" : kafs.BOZO_BSSIZE, + "user" : rpc.BOZO_BSSIZE, } description = r""" @@ -59,8 +59,8 @@ def main(params): for i in params["user"]: try: verbose("Adding user ", i, "\n") - ret = kafs.BOZO_AddSUser(bos_conn, i) - except kafs.RemoteAbort as e: + ret = rpc.BOZO_AddSUser(bos_conn, i) + except rpc.RemoteAbort as e: if str(e) == "Aborted 17": error("failed to add user ", i, " (File exists)\n") exitcode = 1 diff --git a/suite/commands/bos/create.py b/kafs/commands/bos/create.py similarity index 86% rename from suite/commands/bos/create.py rename to kafs/commands/bos/create.py index 5461def..7a5a494 100644 --- a/suite/commands/bos/create.py +++ b/kafs/commands/bos/create.py @@ -21,10 +21,10 @@ 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.exception import AFSException, AFSArgumentError -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSException, AFSArgumentError +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Define a new process in the BosConfig file and start it" @@ -47,10 +47,10 @@ cant_combine_arguments = [ ] argument_size_limits = { - "instance" : kafs.BOZO_BSSIZE, - "type" : kafs.BOZO_BSSIZE, - "cmd" : kafs.BOZO_BSSIZE, - "notifier" : kafs.BOZO_BSSIZE, + "instance" : rpc.BOZO_BSSIZE, + "type" : rpc.BOZO_BSSIZE, + "cmd" : rpc.BOZO_BSSIZE, + "notifier" : rpc.BOZO_BSSIZE, } description = r""" @@ -78,8 +78,8 @@ def main(params): bos_conn = cell.open_bos_server(params["server"], params) try: - ret = kafs.BOZO_CreateBnode(bos_conn, type, instance, + ret = rpc.BOZO_CreateBnode(bos_conn, type, instance, cmd[0], cmd[1], cmd[2], cmd[3], cmd[4], cmd[5]) - except kafs.AbortBZEXISTS: + except rpc.AbortBZEXISTS: error("failed to create new server instance ", instance, " of type '", type, "' (entity already exists)\n") diff --git a/suite/commands/bos/delete.py b/kafs/commands/bos/delete.py similarity index 88% rename from suite/commands/bos/delete.py rename to kafs/commands/bos/delete.py index 2796296..2310932 100644 --- a/suite/commands/bos/delete.py +++ b/kafs/commands/bos/delete.py @@ -21,10 +21,10 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Delete a server process from the BosConfig file" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "instance" : kafs.BOZO_BSSIZE, + "instance" : rpc.BOZO_BSSIZE, } description = r""" @@ -58,6 +58,6 @@ def main(params): for i in params["instance"]: verbose("Deleting instance ", i, "\n") try: - ret = kafs.BOZO_DeleteBnode(bos_conn, i) - except kafs.AbortBZBUSY: + ret = rpc.BOZO_DeleteBnode(bos_conn, i) + except rpc.AbortBZBUSY: error("can't delete running instance '", i, "'\n") diff --git a/suite/commands/bos/exec.py b/kafs/commands/bos/exec.py similarity index 89% rename from suite/commands/bos/exec.py rename to kafs/commands/bos/exec.py index 2b2fd12..7766311 100644 --- a/suite/commands/bos/exec.py +++ b/kafs/commands/bos/exec.py @@ -21,10 +21,10 @@ 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.exception import AFSArgumentError -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSArgumentError +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Execute a command on a remote server machine" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "cmd" : kafs.BOZO_BSSIZE, + "cmd" : rpc.BOZO_BSSIZE, } description = r""" @@ -56,8 +56,8 @@ def main(params): bos_conn = cell.open_bos_server(params["server"], params) try: - ret = kafs.BOZO_Exec(bos_conn, params["cmd"]) - except kafs.RemoteAbort as e: + ret = rpc.BOZO_Exec(bos_conn, params["cmd"]) + except rpc.RemoteAbort as e: # If the command terminates with anything other than exit(0), the # server aborts with the wait() status. status = int(str(e)[8:]) diff --git a/suite/commands/bos/getcell.py b/kafs/commands/bos/getcell.py similarity index 100% rename from suite/commands/bos/getcell.py rename to kafs/commands/bos/getcell.py diff --git a/suite/commands/bos/getdate.py b/kafs/commands/bos/getdate.py similarity index 91% rename from suite/commands/bos/getdate.py rename to kafs/commands/bos/getdate.py index 662dfd4..6747353 100644 --- a/suite/commands/bos/getdate.py +++ b/kafs/commands/bos/getdate.py @@ -21,10 +21,10 @@ 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 * -from afs.lib.time import * -import kafs +from kafs.argparse import * +from kafs.lib.output import * +from kafs.lib.time import * +import kafs.rpc as rpc help = "Display the time stamps on an AFS binary file" @@ -45,8 +45,8 @@ cant_combine_arguments = [ ] argument_size_limits = { - "file" : kafs.BOZO_BSSIZE, - "dir" : kafs.BOZO_BSSIZE, + "file" : rpc.BOZO_BSSIZE, + "dir" : rpc.BOZO_BSSIZE, } description = r""" @@ -69,7 +69,7 @@ def main(params): f = d + "/" + f verbose("Asking about ", f, "\n") - ret = kafs.BOZO_GetDates(bos_conn, f) + ret = rpc.BOZO_GetDates(bos_conn, f) if ret.newtime == 0: s = "File " + f + "does not exist, " diff --git a/suite/commands/bos/getlog.py b/kafs/commands/bos/getlog.py similarity index 94% rename from suite/commands/bos/getlog.py rename to kafs/commands/bos/getlog.py index 8abf115..cb0d8e4 100644 --- a/suite/commands/bos/getlog.py +++ b/kafs/commands/bos/getlog.py @@ -21,10 +21,10 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import os help = "Print a server process's log file" @@ -45,7 +45,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "file" : kafs.BOZO_BSSIZE, + "file" : rpc.BOZO_BSSIZE, } description = r""" @@ -118,4 +118,4 @@ def main(params): output("Fetching log file '", params["file"], "'...\n") output_flush() - ret = kafs.BOZO_GetLog(bos_conn, params["file"], split) + ret = rpc.BOZO_GetLog(bos_conn, params["file"], split) diff --git a/suite/commands/bos/getrestart.py b/kafs/commands/bos/getrestart.py similarity index 81% rename from suite/commands/bos/getrestart.py rename to kafs/commands/bos/getrestart.py index 56131bd..c49ed79 100644 --- a/suite/commands/bos/getrestart.py +++ b/kafs/commands/bos/getrestart.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Display the automatic restart times for server processes" @@ -48,22 +48,22 @@ Display the automatic restart times for server processes restart_days = [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ] def display_restart_time(params, desc, time): - if time.mask & kafs.KTIME_NEVER: + if time.mask & rpc.KTIME_NEVER: t = "never" - elif time.mask & kafs.KTIME_NOW: + elif time.mask & rpc.KTIME_NOW: t = "never" - elif time.mask & (kafs.KTIME_DAY | kafs.KTIME_TIME) == 0: + elif time.mask & (rpc.KTIME_DAY | rpc.KTIME_TIME) == 0: t = "[unspecified time]" else: t = "[unspecified time]" - if time.mask & kafs.KTIME_DAY: + if time.mask & rpc.KTIME_DAY: t = restart_days[time.day] + " "; else: t = "" - if time.mask & kafs.KTIME_TIME: - if not (time.mask & kafs.KTIME_MIN): + if time.mask & rpc.KTIME_TIME: + if not (time.mask & rpc.KTIME_MIN): time.min = 0 - if time.mask & kafs.KTIME_HOUR: + if time.mask & rpc.KTIME_HOUR: h = time.hour if h > 12: h -= 12 @@ -72,9 +72,9 @@ def display_restart_time(params, desc, time): t += "{:d}:{:02d}".format(h, time.min) else: t += "xx:{:02d}".format(time.min) - if time.mask & kafs.KTIME_SEC: + if time.mask & rpc.KTIME_SEC: t += ":{:02d}".format(time.sec) - if time.mask & kafs.KTIME_HOUR: + if time.mask & rpc.KTIME_HOUR: if time.hour < 12: t += " am" else: @@ -88,8 +88,8 @@ def main(params): cell = params["cell"] bos_conn = cell.open_bos_server(params["server"], params) - gen = kafs.BOZO_GetRestartTime(bos_conn, kafs.BOZO_RESTARTTIME_GENERAL) - newbin = kafs.BOZO_GetRestartTime(bos_conn, kafs.BOZO_RESTARTTIME_NEWBIN) + gen = rpc.BOZO_GetRestartTime(bos_conn, rpc.BOZO_RESTARTTIME_GENERAL) + newbin = rpc.BOZO_GetRestartTime(bos_conn, rpc.BOZO_RESTARTTIME_NEWBIN) s = "Server " + params["server"].name() + " restarts " display_restart_time(params, s + "at ", gen.restartTime) diff --git a/suite/commands/bos/getrestricted.py b/kafs/commands/bos/getrestricted.py similarity index 93% rename from suite/commands/bos/getrestricted.py rename to kafs/commands/bos/getrestricted.py index 98382ea..fec02b0 100644 --- a/suite/commands/bos/getrestricted.py +++ b/kafs/commands/bos/getrestricted.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Display whether a bos server is restricted or not" @@ -49,7 +49,7 @@ def main(params): cell = params["cell"] bos_conn = cell.open_bos_server(params["server"], params) - ret = kafs.BOZO_GetRestricted(bos_conn) + ret = rpc.BOZO_GetRestricted(bos_conn) if ret.isrestricted: output("Restricted mode is on\n") else: diff --git a/suite/commands/bos/install.py b/kafs/commands/bos/install.py similarity index 91% rename from suite/commands/bos/install.py rename to kafs/commands/bos/install.py index 0de39f0..fc5ca5b 100644 --- a/suite/commands/bos/install.py +++ b/kafs/commands/bos/install.py @@ -21,10 +21,10 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import os help = "Revert to the former version of a process's binary file" @@ -46,8 +46,8 @@ cant_combine_arguments = [ ] argument_size_limits = { - "file" : kafs.BOZO_BSSIZE, - "dir" : kafs.BOZO_BSSIZE, + "file" : rpc.BOZO_BSSIZE, + "dir" : rpc.BOZO_BSSIZE, } description = r""" @@ -98,6 +98,6 @@ def main(params): remote_file = d + "/" + f verbose("Installing file ", remote_file, "\n") - ret = kafs.BOZO_Install(bos_conn, remote_file, stat.st_size, 0, + ret = rpc.BOZO_Install(bos_conn, remote_file, stat.st_size, 0, int(stat.st_mtime), split) output(program_name, ": installed file ", f, "\n"); diff --git a/suite/commands/bos/listhosts.py b/kafs/commands/bos/listhosts.py similarity index 89% rename from suite/commands/bos/listhosts.py rename to kafs/commands/bos/listhosts.py index e6d8b36..1630661 100644 --- a/suite/commands/bos/listhosts.py +++ b/kafs/commands/bos/listhosts.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Display the contents of the CellServDB file" @@ -49,15 +49,15 @@ def main(params): cell = params["cell"] bos_conn = cell.open_bos_server(params["server"], params) - ret = kafs.BOZO_GetCellName(bos_conn) + ret = rpc.BOZO_GetCellName(bos_conn) cellname = ret.name output("Cell name is ", cellname, "\n") try: i = 0 while True: - ret = kafs.BOZO_GetCellHost(bos_conn, i) + ret = rpc.BOZO_GetCellHost(bos_conn, i) i += 1 output("Host ", i, " is ", ret.name, "\n") - except kafs.AbortBZDOM: + except rpc.AbortBZDOM: pass diff --git a/suite/commands/bos/listkeys.py b/kafs/commands/bos/listkeys.py similarity index 90% rename from suite/commands/bos/listkeys.py rename to kafs/commands/bos/listkeys.py index f27db55..b9dac77 100644 --- a/suite/commands/bos/listkeys.py +++ b/kafs/commands/bos/listkeys.py @@ -21,11 +21,11 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -from afs.lib.time import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +from kafs.lib.time import * +import kafs.rpc as rpc help = "Display the server encryption keys from the KeyFile file" @@ -56,7 +56,7 @@ def main(params): try: i = 0 while True: - ret = kafs.BOZO_ListKeys(bos_conn, i) + ret = rpc.BOZO_ListKeys(bos_conn, i) i += 1 if mod_sec < ret.keinfo.mod_sec: mod_sec = ret.keinfo.mod_sec @@ -70,7 +70,7 @@ def main(params): else: output(" has cksum ", ret.keinfo.keyCheckSum, "\n") - except kafs.AbortBZDOM: + except rpc.AbortBZDOM: pass output("Keys last changed on ", time2str(mod_sec), ".\n") diff --git a/suite/commands/bos/listusers.py b/kafs/commands/bos/listusers.py similarity index 91% rename from suite/commands/bos/listusers.py rename to kafs/commands/bos/listusers.py index 089a765..4038966 100644 --- a/suite/commands/bos/listusers.py +++ b/kafs/commands/bos/listusers.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "List the privileged users from the UserList file" @@ -53,10 +53,10 @@ def main(params): try: i = 0 while True: - ret = kafs.BOZO_ListSUsers(bos_conn, i) + ret = rpc.BOZO_ListSUsers(bos_conn, i) i += 1 users += " " + ret.name - except kafs.RemoteAbort as msg: + except rpc.RemoteAbort as msg: if str(msg) == "Aborted 1": pass else: diff --git a/suite/commands/bos/prune.py b/kafs/commands/bos/prune.py similarity index 87% rename from suite/commands/bos/prune.py rename to kafs/commands/bos/prune.py index 098847a..c222691 100644 --- a/suite/commands/bos/prune.py +++ b/kafs/commands/bos/prune.py @@ -21,10 +21,10 @@ 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.exception import AFSArgumentError -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSArgumentError +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Remove obsolete files from /usr/afs/bin and /usr/afs/logs" @@ -62,9 +62,9 @@ def main(params): else: flags = 0 if "bak" in params: - flags |= kafs.BOZO_PRUNEBAK + flags |= rpc.BOZO_PRUNEBAK if "old" in params: - flags |= kafs.BOZO_PRUNEOLD + flags |= rpc.BOZO_PRUNEOLD if "core" in params: - flags |= kafs.BOZO_PRUNECORE - ret = kafs.BOZO_Prune(bos_conn, flags) + flags |= rpc.BOZO_PRUNECORE + ret = rpc.BOZO_Prune(bos_conn, flags) diff --git a/suite/commands/bos/removehost.py b/kafs/commands/bos/removehost.py similarity index 91% rename from suite/commands/bos/removehost.py rename to kafs/commands/bos/removehost.py index b65a634..e40504e 100644 --- a/suite/commands/bos/removehost.py +++ b/kafs/commands/bos/removehost.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Remove a database server machine from the CellServDB file" @@ -54,6 +54,6 @@ def main(params): for i in params["host"]: try: verbose("Deleting host ", i.name(), "\n") - ret = kafs.BOZO_DeleteCellHost(bos_conn, i.name()) - except kafs.AbortBZNOENT: + ret = rpc.BOZO_DeleteCellHost(bos_conn, i.name()) + except rpc.AbortBZNOENT: error("failed to delete host ", i.name(), " (no such entity)\n") diff --git a/suite/commands/bos/removekey.py b/kafs/commands/bos/removekey.py similarity index 88% rename from suite/commands/bos/removekey.py rename to kafs/commands/bos/removekey.py index bea0622..a0d4933 100644 --- a/suite/commands/bos/removekey.py +++ b/kafs/commands/bos/removekey.py @@ -21,11 +21,11 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -from afs.lib.time import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +from kafs.lib.time import * +import kafs.rpc as rpc help = "Remove server encryption keys from the KeyFile file" @@ -56,8 +56,8 @@ def main(params): try: for i in params["kvno"]: trying = i - ret = kafs.BOZO_DeleteKey(bos_conn, int(i)) - except kafs.RemoteAbort as e: + ret = rpc.BOZO_DeleteKey(bos_conn, int(i)) + except rpc.RemoteAbort as e: if str(e) != "Aborted 70354689": raise errorf("failed to delete key {:s} (could not find entry)\n", trying) diff --git a/suite/commands/bos/removeuser.py b/kafs/commands/bos/removeuser.py similarity index 90% rename from suite/commands/bos/removeuser.py rename to kafs/commands/bos/removeuser.py index bd11495..b196d71 100644 --- a/suite/commands/bos/removeuser.py +++ b/kafs/commands/bos/removeuser.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Remove a privileged user from the UserList file" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "user" : kafs.BOZO_BSSIZE, + "user" : rpc.BOZO_BSSIZE, } description = r""" @@ -58,8 +58,8 @@ def main(params): for i in params["user"]: try: verbose("Deleting suser ", i, "\n") - ret = kafs.BOZO_DeleteSUser(bos_conn, i) - except kafs.RemoteAbort as e: + ret = rpc.BOZO_DeleteSUser(bos_conn, i) + except rpc.RemoteAbort as e: if str(e) == "Aborted 2": error("failed to delete user ", i, " (no such user)\n") else: diff --git a/suite/commands/bos/restart.py b/kafs/commands/bos/restart.py similarity index 86% rename from suite/commands/bos/restart.py rename to kafs/commands/bos/restart.py index 5ffbf65..462739b 100644 --- a/suite/commands/bos/restart.py +++ b/kafs/commands/bos/restart.py @@ -21,10 +21,10 @@ 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.exception import AFSArgumentError -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSArgumentError +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Restart a server process" @@ -49,7 +49,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "instance" : kafs.BOZO_BSSIZE, + "instance" : rpc.BOZO_BSSIZE, } description = r""" @@ -61,15 +61,15 @@ def main(params): bos_conn = cell.open_bos_server(params["server"], params) if "all" in params: - ret = kafs.BOZO_RestartAll(bos_conn) + ret = rpc.BOZO_RestartAll(bos_conn) elif "bosserver" in params: - ret = kafs.BOZO_ReBozo(bos_conn) + ret = rpc.BOZO_ReBozo(bos_conn) elif "instance" in params: for i in params["instance"]: try: verbose("Restarting ", i, "\n") - ret = kafs.BOZO_Restart(bos_conn, i) - except kafs.AbortBZNOENT: + ret = rpc.BOZO_Restart(bos_conn, i) + except rpc.AbortBZNOENT: error("failed to start instance '", i, "' (no such entity)\n") else: raise AFSArgumentError("One of -all, -bosserver or -instance must be supplied") diff --git a/suite/commands/bos/setauth.py b/kafs/commands/bos/setauth.py similarity index 90% rename from suite/commands/bos/setauth.py rename to kafs/commands/bos/setauth.py index 47ff647..8bd5956 100644 --- a/suite/commands/bos/setauth.py +++ b/kafs/commands/bos/setauth.py @@ -21,10 +21,10 @@ 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.exception import AFSArgumentError -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSArgumentError +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Set authorization checking requirements for all server processes" @@ -56,6 +56,6 @@ def main(params): bos_conn = cell.open_bos_server(params["server"], params) try: - ret = kafs.BOZO_SetNoAuthFlag(bos_conn, auth == "off") - except kafs.AbortBZACCESS: + ret = rpc.BOZO_SetNoAuthFlag(bos_conn, auth == "off") + except rpc.AbortBZACCESS: error("you are not authorized for this operation (failed to set authentication flag)\n") diff --git a/suite/commands/bos/setcellname.py b/kafs/commands/bos/setcellname.py similarity index 90% rename from suite/commands/bos/setcellname.py rename to kafs/commands/bos/setcellname.py index f4c06eb..5f630b2 100644 --- a/suite/commands/bos/setcellname.py +++ b/kafs/commands/bos/setcellname.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Display whether a bos server is restricted or not" @@ -43,7 +43,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "name" : kafs.BOZO_BSSIZE, + "name" : rpc.BOZO_BSSIZE, } description = r""" @@ -54,4 +54,4 @@ def main(params): cell = params["cell"] bos_conn = cell.open_bos_server(params["server"], params) - ret = kafs.BOZO_SetCellName(bos_conn, str(params["name"])) + ret = rpc.BOZO_SetCellName(bos_conn, str(params["name"])) diff --git a/suite/commands/bos/setrestart.py b/kafs/commands/bos/setrestart.py similarity index 86% rename from suite/commands/bos/setrestart.py rename to kafs/commands/bos/setrestart.py index a3e3948..0065dfd 100644 --- a/suite/commands/bos/setrestart.py +++ b/kafs/commands/bos/setrestart.py @@ -21,11 +21,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from exception import AFSArgumentError -from afs.argparse import * -from afs.lib.output import * -from afs.lib.parse_setrestart_time import * -import kafs +from kafs.exception import AFSArgumentError +from kafs.argparse import * +from kafs.lib.output import * +from kafs.lib.parse_setrestart_time import * +import kafs.rpc as rpc help = "Set when the BOS Server restarts processes" @@ -57,8 +57,8 @@ def main(params): time = params["time"] - t = kafs.BOZO_RESTARTTIME_GENERAL + t = rpc.BOZO_RESTARTTIME_GENERAL if "newbinary" in params: - t = kafs.BOZO_RESTARTTIME_NEWBIN + t = rpc.BOZO_RESTARTTIME_NEWBIN - ret = kafs.BOZO_SetRestartTime(bos_conn, t, time) + ret = rpc.BOZO_SetRestartTime(bos_conn, t, time) diff --git a/suite/commands/bos/setrestricted.py b/kafs/commands/bos/setrestricted.py similarity index 91% rename from suite/commands/bos/setrestricted.py rename to kafs/commands/bos/setrestricted.py index 54c71ff..30c96a5 100644 --- a/suite/commands/bos/setrestricted.py +++ b/kafs/commands/bos/setrestricted.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Place a server into restricted mode" @@ -54,6 +54,6 @@ def main(params): raise AFSArgumentError("The -mode argument takes a numeric value") try: - ret = kafs.BOZO_SetRestricted(bos_conn, int(params["mode"])) - except kafs.AbortBZACCESS: + ret = rpc.BOZO_SetRestricted(bos_conn, int(params["mode"])) + except rpc.AbortBZACCESS: error("failed to set restricted mode (you are not authorized for this operation)\n") diff --git a/suite/commands/bos/shutdown.py b/kafs/commands/bos/shutdown.py similarity index 85% rename from suite/commands/bos/shutdown.py rename to kafs/commands/bos/shutdown.py index c27ea11..6d72ae8 100644 --- a/suite/commands/bos/shutdown.py +++ b/kafs/commands/bos/shutdown.py @@ -21,10 +21,10 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Stop a process without changing its status flag" @@ -45,7 +45,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "instance" : kafs.BOZO_BSSIZE, + "instance" : rpc.BOZO_BSSIZE, } description = r""" @@ -61,13 +61,13 @@ def main(params): for i in params["instance"]: try: verbose("Shutting down ", i, "\n"); - ret = kafs.BOZO_SetTStatus(bos_conn, i, kafs.BSTAT_SHUTDOWN) - except kafs.AbortBZNOENT: + ret = rpc.BOZO_SetTStatus(bos_conn, i, rpc.BSTAT_SHUTDOWN) + except rpc.AbortBZNOENT: error("failed to shutdown instance '", i, "' (no such entity)\n") error_occurred = True else: - ret = kafs.BOZO_ShutdownAll(bos_conn) + ret = rpc.BOZO_ShutdownAll(bos_conn) if not error_occurred and "wait" in params: verbose("Waiting\n") - ret = kafs.BOZO_WaitAll(bos_conn) + ret = rpc.BOZO_WaitAll(bos_conn) diff --git a/suite/commands/bos/start.py b/kafs/commands/bos/start.py similarity index 87% rename from suite/commands/bos/start.py rename to kafs/commands/bos/start.py index 972dea4..f011317 100644 --- a/suite/commands/bos/start.py +++ b/kafs/commands/bos/start.py @@ -21,10 +21,10 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Start a process after setting its status flag" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "instance" : kafs.BOZO_BSSIZE, + "instance" : rpc.BOZO_BSSIZE, } description = r""" @@ -58,6 +58,6 @@ def main(params): for i in params["instance"]: try: verbose("Starting ", i, "\n") - ret = kafs.BOZO_SetStatus(bos_conn, i, kafs.BSTAT_NORMAL) - except kafs.AbortBZNOENT: + ret = rpc.BOZO_SetStatus(bos_conn, i, rpc.BSTAT_NORMAL) + except rpc.AbortBZNOENT: error("failed to start instance '", i, "' (no such entity)\n") diff --git a/suite/commands/bos/startup.py b/kafs/commands/bos/startup.py similarity index 85% rename from suite/commands/bos/startup.py rename to kafs/commands/bos/startup.py index b64bb85..e58cf1a 100644 --- a/suite/commands/bos/startup.py +++ b/kafs/commands/bos/startup.py @@ -21,10 +21,10 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Start a process without changing its status flag" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "instance" : kafs.BOZO_BSSIZE, + "instance" : rpc.BOZO_BSSIZE, } description = r""" @@ -59,8 +59,8 @@ def main(params): for i in params["instance"]: try: verbose("Starting ", i, "\n") - ret = kafs.BOZO_SetTStatus(bos_conn, i, kafs.BSTAT_NORMAL) - except kafs.AbortBZNOENT: + ret = rpc.BOZO_SetTStatus(bos_conn, i, rpc.BSTAT_NORMAL) + except rpc.AbortBZNOENT: error("failed to start instance '", i, "' (no such entity)\n") else: - ret = kafs.BOZO_StartupAll(bos_conn) + ret = rpc.BOZO_StartupAll(bos_conn) diff --git a/suite/commands/bos/status.py b/kafs/commands/bos/status.py similarity index 83% rename from suite/commands/bos/status.py rename to kafs/commands/bos/status.py index 8537722..9ac3a80 100644 --- a/suite/commands/bos/status.py +++ b/kafs/commands/bos/status.py @@ -21,10 +21,10 @@ 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 * -from afs.lib.time import * -import kafs +from kafs.argparse import * +from kafs.lib.output import * +from kafs.lib.time import * +import kafs.rpc as rpc import sys import signal @@ -47,7 +47,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "instance" : kafs.BOZO_BSSIZE, + "instance" : rpc.BOZO_BSSIZE, } description = r""" @@ -55,10 +55,10 @@ Display the status of server processes """ def display_instance_normal(params, bos_conn, name): - info = kafs.BOZO_GetInstanceInfo(bos_conn, name) - status = kafs.BOZO_GetStatus(bos_conn, name) + info = rpc.BOZO_GetInstanceInfo(bos_conn, name) + status = rpc.BOZO_GetStatus(bos_conn, name) - if info.status.flags & kafs.BOZO_BADDIRACCESS: + if info.status.flags & rpc.BOZO_BADDIRACCESS: params["_baddiraccess"] = True s = "Instance " + name + "," @@ -68,31 +68,31 @@ def display_instance_normal(params, bos_conn, name): # The instance's permanent state is shown by the goals returned by # GetInstanceInfo() - if info.status.fileGoal == kafs.BSTAT_SHUTDOWN: - if info.status.goal == kafs.BSTAT_SHUTDOWN: + if info.status.fileGoal == rpc.BSTAT_SHUTDOWN: + if info.status.goal == rpc.BSTAT_SHUTDOWN: s += " disabled," else: s += " temporarily enabled," else: - if info.status.goal == kafs.BSTAT_SHUTDOWN: + if info.status.goal == rpc.BSTAT_SHUTDOWN: s += " temporarily disabled," else: pass # Supplementary data is found in the flags - if info.status.flags & kafs.BOZO_HASCORE: + if info.status.flags & rpc.BOZO_HASCORE: s += " has core file," - if info.status.flags & kafs.BOZO_ERRORSTOP: + if info.status.flags & rpc.BOZO_ERRORSTOP: s += " stopped for too many errors," # The instance's actual state is returned by GetStatus() - if status.inStat == kafs.BSTAT_SHUTDOWN: + if status.inStat == rpc.BSTAT_SHUTDOWN: s += " currently shut down." - elif status.inStat == kafs.BSTAT_NORMAL: + elif status.inStat == rpc.BSTAT_NORMAL: s += " currently running normally." - elif status.inStat == kafs.BSTAT_SHUTTINGDOWN: + elif status.inStat == rpc.BSTAT_SHUTTINGDOWN: s += " currently shutting down." - elif status.inStat == kafs.BSTAT_STARTINGUP: + elif status.inStat == rpc.BSTAT_STARTINGUP: s += " currently starting up." output(s, "\n") if status.statdescr != "": @@ -117,7 +117,7 @@ def display_instance_long(params, bos_conn, name): if info.status.lastErrorExit != 0: output(" Last error exit ", info.status.lastErrorExit, "\n") s = " Last error exit at " + time2str(info.status.lastErrorExit) + "," - istr = kafs.BOZO_GetInstanceStrings(bos_conn, name) + istr = rpc.BOZO_GetInstanceStrings(bos_conn, name) if istr.errorname != "": s += " by " + istr.errorname + "," if info.status.errorSignal == signal.SIGTERM: @@ -131,10 +131,10 @@ def display_instance_long(params, bos_conn, name): try: i = 0 while True: - ret = kafs.BOZO_GetInstanceParm(bos_conn, name, i) + ret = rpc.BOZO_GetInstanceParm(bos_conn, name, i) i += 1 output(" Command ", i, " is '", ret.parm, "'\n") - except kafs.AbortBZDOM: + except rpc.AbortBZDOM: pass output("\n") @@ -154,11 +154,11 @@ def main(params): i = 0 while True: verbose("Enum ", i, ": ") - ret = kafs.BOZO_EnumerateInstance(bos_conn, i) + ret = rpc.BOZO_EnumerateInstance(bos_conn, i) i += 1 verbose_cont(ret.iname, "\n") instances.append(ret.iname) - except kafs.AbortBZDOM: + except rpc.AbortBZDOM: verbose_cont("\n") else: instances = params["instance"] @@ -170,7 +170,7 @@ def main(params): display_instance_long(params, bos_conn, i) else: display_instance_normal(params, bos_conn, i) - except kafs.AbortBZNOENT: + except rpc.AbortBZNOENT: error("failed to get instance info for '", i, "' (no such entity)\n") if "_baddiraccess" in params and "long" in params: diff --git a/suite/commands/bos/stop.py b/kafs/commands/bos/stop.py similarity index 86% rename from suite/commands/bos/stop.py rename to kafs/commands/bos/stop.py index df2e074..b4e1214 100644 --- a/suite/commands/bos/stop.py +++ b/kafs/commands/bos/stop.py @@ -21,10 +21,10 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Stop a process after changing its status flag" @@ -45,7 +45,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "instance" : kafs.BOZO_BSSIZE, + "instance" : rpc.BOZO_BSSIZE, } description = r""" @@ -60,11 +60,11 @@ def main(params): for i in params["instance"]: try: verbose("Stopping ", i, "\n") - ret = kafs.BOZO_SetStatus(bos_conn, i, kafs.BSTAT_SHUTDOWN) - except kafs.AbortBZNOENT: + ret = rpc.BOZO_SetStatus(bos_conn, i, rpc.BSTAT_SHUTDOWN) + except rpc.AbortBZNOENT: error("failed to change stop instance '", i, "' (no such entity)") error_occurred = True if not error_occurred and "wait" in params: verbose("Waiting\n") - ret = kafs.BOZO_WaitAll(bos_conn) + ret = rpc.BOZO_WaitAll(bos_conn) diff --git a/suite/commands/bos/uninstall.py b/kafs/commands/bos/uninstall.py similarity index 88% rename from suite/commands/bos/uninstall.py rename to kafs/commands/bos/uninstall.py index 5ef0de7..dc4dfab 100644 --- a/suite/commands/bos/uninstall.py +++ b/kafs/commands/bos/uninstall.py @@ -21,10 +21,10 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * -import kafs +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Revert to the former version of a process's binary file" @@ -45,8 +45,8 @@ cant_combine_arguments = [ ] argument_size_limits = { - "file" : kafs.BOZO_BSSIZE, - "dir" : kafs.BOZO_BSSIZE, + "file" : rpc.BOZO_BSSIZE, + "dir" : rpc.BOZO_BSSIZE, } description = r""" @@ -70,6 +70,6 @@ def main(params): verbose("Reverting file ", f, "\n") try: - ret = kafs.BOZO_UnInstall(bos_conn, f) - except kafs.AbortBZBUSY: + ret = rpc.BOZO_UnInstall(bos_conn, f) + except rpc.AbortBZBUSY: error("can't revert running instance '", f, "'\n") diff --git a/suite/commands/pts/__init__.py b/kafs/commands/pts/__init__.py similarity index 100% rename from suite/commands/pts/__init__.py rename to kafs/commands/pts/__init__.py diff --git a/suite/commands/pts/adduser.py b/kafs/commands/pts/adduser.py similarity index 91% rename from suite/commands/pts/adduser.py rename to kafs/commands/pts/adduser.py index a8feb0c..2866990 100644 --- a/suite/commands/pts/adduser.py +++ b/kafs/commands/pts/adduser.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Add a user or machine to a Protection Database group" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "name" : kafs.PR_MAXNAMELEN, + "name" : rpc.PR_MAXNAMELEN, } description = r""" @@ -79,9 +79,9 @@ def main(params): continue try: - ret = cell.call_pt_server(params, kafs.PR_AddToGroup, uid, gid) + ret = cell.call_pt_server(params, rpc.PR_AddToGroup, uid, gid) prcache.evict_groups() - except kafs.AbortPRIDEXIST: + except rpc.AbortPRIDEXIST: error("Entry for id already exists ; unable to add user ", user, " to group ", group, ignored, "\n") if "force" not in params: return diff --git a/suite/commands/pts/cg.py b/kafs/commands/pts/cg.py similarity index 100% rename from suite/commands/pts/cg.py rename to kafs/commands/pts/cg.py diff --git a/suite/commands/pts/check.py b/kafs/commands/pts/check.py similarity index 100% rename from suite/commands/pts/check.py rename to kafs/commands/pts/check.py diff --git a/suite/commands/pts/chown.py b/kafs/commands/pts/chown.py similarity index 89% rename from suite/commands/pts/chown.py rename to kafs/commands/pts/chown.py index 1d9138f..c7d7a1a 100644 --- a/suite/commands/pts/chown.py +++ b/kafs/commands/pts/chown.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Change the owner of a Protection Database entry" @@ -45,8 +45,8 @@ cant_combine_arguments = [ ] argument_size_limits = { - "oldname" : kafs.PR_MAXNAMELEN, - "owner" : kafs.PR_MAXNAMELEN, + "oldname" : rpc.PR_MAXNAMELEN, + "owner" : rpc.PR_MAXNAMELEN, } description = r""" @@ -71,15 +71,15 @@ def main(params): try: verbose("Chowning ", gid, " to ", owner, "\n") - ret = cell.call_pt_server(params, kafs.PR_ChangeEntry, gid, "", owner, 0) + ret = cell.call_pt_server(params, rpc.PR_ChangeEntry, gid, "", owner, 0) # The name is changed by the act of chowning (group names are prefixed # by the owner user name and a colon, and the prefix gets changed) prcache.evict_id(gid) prcache.evict_groups() - except kafs.AbortPRNOENT: + except rpc.AbortPRNOENT: error("User or group doesn't exist ; unable to change name of ", prcache.id_to_name(gid), " to ", params["owner"], "\n") - except kafs.AbortPRPERM: + except rpc.AbortPRPERM: error("Permission denied ; unable to change name of ", prcache.id_to_name(gid), " to ", prcache.id_to_name(owner), "\n") diff --git a/suite/commands/pts/creategroup.py b/kafs/commands/pts/creategroup.py similarity index 88% rename from suite/commands/pts/creategroup.py rename to kafs/commands/pts/creategroup.py index d0da8b8..215e94a 100644 --- a/suite/commands/pts/creategroup.py +++ b/kafs/commands/pts/creategroup.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Create an (empty) Protection Database group entry" @@ -46,7 +46,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "name" : kafs.PR_MAXNAMELEN, + "name" : rpc.PR_MAXNAMELEN, } description = r""" @@ -74,18 +74,18 @@ def main(params): verbose("Adding group ", name, "\n") if i < len(ids): new_id = int(ids[i]) - ret = cell.call_pt_server(params, kafs.PR_INewEntry, name, new_id, oid) + ret = cell.call_pt_server(params, rpc.PR_INewEntry, name, new_id, oid) else: - ret = cell.call_pt_server(params, kafs.PR_NewEntry, name, kafs.PRGRP, oid) + ret = cell.call_pt_server(params, rpc.PR_NewEntry, name, rpc.PRGRP, oid) new_id = ret.id output("Group ", name, " has id ", new_id, "\n") prcache.evict_name(name) prcache.evict_id(new_id) - except kafs.AbortPREXIST: + except rpc.AbortPREXIST: error("Entry for name already exists ; unable to create group ", name, "\n") if "force" not in params: break - except kafs.AbortPRIDEXIST: + except rpc.AbortPRIDEXIST: error("Entry for id already exists ; unable to create group ", name, " with id ", new_id, "\n") if "force" not in params: break diff --git a/suite/commands/pts/createuser.py b/kafs/commands/pts/createuser.py similarity index 87% rename from suite/commands/pts/createuser.py rename to kafs/commands/pts/createuser.py index 71c415b..ee7d69b 100644 --- a/suite/commands/pts/createuser.py +++ b/kafs/commands/pts/createuser.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Create a user or machine entry in the Protection Database" @@ -45,7 +45,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "name" : kafs.PR_MAXNAMELEN, + "name" : rpc.PR_MAXNAMELEN, } description = r""" @@ -68,18 +68,18 @@ def main(params): verbose("Adding user ", name, "\n") if i < len(ids): new_id = int(ids[i]) - ret = cell.call_pt_server(params, kafs.PR_NewEntry, name, new_id, 0) + ret = cell.call_pt_server(params, rpc.PR_NewEntry, name, new_id, 0) else: - ret = cell.call_pt_server(params, kafs.PR_NewEntry, name, 0, 0) + ret = cell.call_pt_server(params, rpc.PR_NewEntry, name, 0, 0) new_id = ret.id output("User ", name, " has id ", new_id, "\n") prcache.evict_name(name) prcache.evict_id(new_id) - except kafs.AbortPREXIST: + except rpc.AbortPREXIST: error("Entry for name already exists ; unable to create user ", name, "\n") if "force" not in params: break - except kafs.AbortPRIDEXIST: + except rpc.AbortPRIDEXIST: error("Entry for id already exists ; unable to create user ", name, " with id ", new_id, "\n") if "force" not in params: break diff --git a/suite/commands/pts/cu.py b/kafs/commands/pts/cu.py similarity index 100% rename from suite/commands/pts/cu.py rename to kafs/commands/pts/cu.py diff --git a/suite/commands/pts/d.py b/kafs/commands/pts/d.py similarity index 100% rename from suite/commands/pts/d.py rename to kafs/commands/pts/d.py diff --git a/suite/commands/pts/delete.py b/kafs/commands/pts/delete.py similarity index 90% rename from suite/commands/pts/delete.py rename to kafs/commands/pts/delete.py index 3318341..2bd6e16 100644 --- a/suite/commands/pts/delete.py +++ b/kafs/commands/pts/delete.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Delete a Protection Database entry" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "nameorid" : kafs.PR_MAXNAMELEN, + "nameorid" : rpc.PR_MAXNAMELEN, } description = r""" @@ -68,14 +68,14 @@ def main(params): try: verbose("Deleting user ", uid, " (", prcache.id_to_name(uid), ")\n") - ret = cell.call_pt_server(params, kafs.PR_Delete, uid) + ret = cell.call_pt_server(params, rpc.PR_Delete, uid) prcache.evict_id(uid) prcache.evict_groups() - except kafs.AbortPRNOENT: + except rpc.AbortPRNOENT: error("User or group doesn't exist deleting ", name, " (id ", uid, ")\n") if "force" not in params: break - except kafs.AbortPRPERM: + except rpc.AbortPRPERM: error("Permission denied deleting ", name, " (id: ", uid, ")\n") if "force" not in params: break diff --git a/suite/commands/pts/e.py b/kafs/commands/pts/e.py similarity index 100% rename from suite/commands/pts/e.py rename to kafs/commands/pts/e.py diff --git a/suite/commands/pts/examine.py b/kafs/commands/pts/examine.py similarity index 85% rename from suite/commands/pts/examine.py rename to kafs/commands/pts/examine.py index b2022c0..ec5ee90 100644 --- a/suite/commands/pts/examine.py +++ b/kafs/commands/pts/examine.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Display a Protection Database entry" @@ -45,7 +45,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "nameorid" : kafs.PR_MAXNAMELEN, + "nameorid" : rpc.PR_MAXNAMELEN, } description = r""" @@ -69,16 +69,16 @@ def main(params): if uid not in results: try: verbose("Listing entry for ", uid, " (", name, ")\n") - ret = cell.call_pt_server(params, kafs.PR_ListEntry, uid) + ret = cell.call_pt_server(params, rpc.PR_ListEntry, uid) entry = ret.entry results[uid] = entry requests.append(uid) prcache.precache_id(entry.owner) prcache.precache_id(entry.creator) - except kafs.AbortPRNOENT: + except rpc.AbortPRNOENT: error("User or group doesn't exist examining ", name, " (id ", uid, ")\n") prcache.id_is_unknown(uid) - except kafs.AbortPRPERM: + except rpc.AbortPRPERM: error("Permission denied examining ", name, " (id: ", uid, ")\n") # Display the results @@ -87,37 +87,37 @@ def main(params): eflags = entry.flags << 16 flags = "" # Indicate who can use "pts examine" - if eflags & kafs.PRP_STATUS_ANY: + if eflags & rpc.PRP_STATUS_ANY: flags += "S" # Anyone - elif eflags & kafs.PRP_STATUS_MEM: + elif eflags & rpc.PRP_STATUS_MEM: flags += "s" # Members only else: flags += "-" # Should not exist # Indicate who can use "pts listowned" - if eflags & kafs.PRP_OWNED_ANY: + if eflags & rpc.PRP_OWNED_ANY: flags += "O" # Anyone else: flags += "-" # Sysadmin & Group owner only # Indicate who can use "pts membership" - if eflags & kafs.PRP_MEMBER_ANY: + if eflags & rpc.PRP_MEMBER_ANY: flags += "M" # Anyone - elif eflags & kafs.PRP_MEMBER_MEM: + elif eflags & rpc.PRP_MEMBER_MEM: flags += "m" # Members only else: flags += "-" # Sysadmin & User can list which groups they belong to # Indicate who can use "pts adduser" - if eflags & kafs.PRP_ADD_ANY: + if eflags & rpc.PRP_ADD_ANY: flags += "A" # Anyone - elif eflags & kafs.PRP_ADD_MEM: + elif eflags & rpc.PRP_ADD_MEM: flags += "a" # Members only else: flags += "-" # Sysadmin & Group owner only # Indicate who can use "pts removeuser" - if eflags & kafs.PRP_REMOVE_MEM: + if eflags & rpc.PRP_REMOVE_MEM: flags += "r" # Members can remove other members else: flags += "-" # Sysadmin & Group owner only @@ -125,8 +125,8 @@ def main(params): # The group quota being 'unlimited' seems to depend on being a member # of the system:administrators group and/or having zero ngroups (or # possibly something else) - verbose("Is ", entry.id, " a member of ", kafs.PR_SYSADMINID, "?\n") - ret = cell.call_pt_server(params, kafs.PR_IsAMemberOf, entry.id, kafs.PR_SYSADMINID) + verbose("Is ", entry.id, " a member of ", rpc.PR_SYSADMINID, "?\n") + ret = cell.call_pt_server(params, rpc.PR_IsAMemberOf, entry.id, rpc.PR_SYSADMINID) group_quota = entry.ngroups if ret.flag or entry.ngroups == 0: group_quota = "unlimited" diff --git a/suite/commands/pts/g.py b/kafs/commands/pts/g.py similarity index 100% rename from suite/commands/pts/g.py rename to kafs/commands/pts/g.py diff --git a/suite/commands/pts/groups.py b/kafs/commands/pts/groups.py similarity index 100% rename from suite/commands/pts/groups.py rename to kafs/commands/pts/groups.py diff --git a/suite/commands/pts/listentries.py b/kafs/commands/pts/listentries.py similarity index 87% rename from suite/commands/pts/listentries.py rename to kafs/commands/pts/listentries.py index 7c04a8d..bbb4d0e 100644 --- a/suite/commands/pts/listentries.py +++ b/kafs/commands/pts/listentries.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Display all users or groups in the Protection Database" @@ -52,13 +52,13 @@ def main(params): cell = params["cell"] if "users" in params and "groups" in params: - flags = kafs.PRWANTUSERS | kafs.PRWANTGROUPS + flags = rpc.PRWANTUSERS | rpc.PRWANTGROUPS elif "groups" in params: - flags = kafs.PRWANTGROUPS + flags = rpc.PRWANTGROUPS else: - flags = kafs.PRWANTUSERS + flags = rpc.PRWANTUSERS - ret = cell.call_pt_server(params, kafs.PR_ListEntries, flags, 0) + ret = cell.call_pt_server(params, rpc.PR_ListEntries, flags, 0) output("Name ID Owner Creator\n") for i in ret.entries: diff --git a/suite/commands/pts/listmax.py b/kafs/commands/pts/listmax.py similarity index 92% rename from suite/commands/pts/listmax.py rename to kafs/commands/pts/listmax.py index 01c9e5e..2a1a1b6 100644 --- a/suite/commands/pts/listmax.py +++ b/kafs/commands/pts/listmax.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Display the max user id and max group id counters" @@ -49,5 +49,5 @@ Display the max user id and max group id counters def main(params): cell = params["cell"] - ret = cell.call_pt_server(params, kafs.PR_ListMax) + ret = cell.call_pt_server(params, rpc.PR_ListMax) output("Max user id is ", ret.uid, " and max group id is ", ret.gid, ".\n") diff --git a/suite/commands/pts/listowned.py b/kafs/commands/pts/listowned.py similarity index 91% rename from suite/commands/pts/listowned.py rename to kafs/commands/pts/listowned.py index f2a83fa..f103ec5 100644 --- a/suite/commands/pts/listowned.py +++ b/kafs/commands/pts/listowned.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Show the Protection Database groups owned by a user or group" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "nameorid" : kafs.PR_MAXNAMELEN, + "nameorid" : rpc.PR_MAXNAMELEN, } description = r""" @@ -69,17 +69,17 @@ def main(params): try: verbose("Listing entries owned by user ", uid, " (", name, ")\n") - ret = cell.call_pt_server(params, kafs.PR_ListOwned, uid, 0) + ret = cell.call_pt_server(params, rpc.PR_ListOwned, uid, 0) elist = ret.elist for entry in elist: prcache.precache_id(entry) results.append((uid, elist)) - except kafs.AbortPRNOENT: + except rpc.AbortPRNOENT: error("User or group doesn't exist deleting ", name, " (id ", uid, ")\n") if "force" not in params: break - except kafs.AbortPRPERM: + except rpc.AbortPRPERM: error("Permission denied deleting ", name, " (id: ", uid, ")\n") if "force" not in params: break diff --git a/suite/commands/pts/m.py b/kafs/commands/pts/m.py similarity index 100% rename from suite/commands/pts/m.py rename to kafs/commands/pts/m.py diff --git a/suite/commands/pts/membership.py b/kafs/commands/pts/membership.py similarity index 93% rename from suite/commands/pts/membership.py rename to kafs/commands/pts/membership.py index 434db42..91683d3 100644 --- a/suite/commands/pts/membership.py +++ b/kafs/commands/pts/membership.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Show the Protection Database groups owned by a user or group" @@ -46,7 +46,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "nameorid" : kafs.PR_MAXNAMELEN, + "nameorid" : rpc.PR_MAXNAMELEN, } description = r""" @@ -80,7 +80,7 @@ def main(params): prcache.precache_ids(group) else: # User - ListElements returns the ancestry of a non-group - ret = cell.call_pt_server(params, kafs.PR_ListElements, gid) + ret = cell.call_pt_server(params, rpc.PR_ListElements, gid) elist = ret.elist memberships[gid] = elist prcache.precache_ids(elist) @@ -89,12 +89,12 @@ def main(params): prcache.id_to_group(i) requests.append(gid) - except kafs.AbortPRNOENT: + except rpc.AbortPRNOENT: error("User or group doesn't exist ", name, " (id ", gid, ")\n") prcache.id_is_unknown(gid) if "force" not in params: break - except kafs.AbortPRPERM: + except rpc.AbortPRPERM: error("Permission denied on ID ", name, " (id: ", gid, ")\n") prcache.id_is_unknown(gid) if "force" not in params: @@ -114,7 +114,7 @@ def main(params): if "supergroups" in params: for r in requests: if r < 0: - ret = cell.call_pt_server(params, kafs.PR_ListGroupsMemberOf, r) + ret = cell.call_pt_server(params, rpc.PR_ListGroupsMemberOf, r) glist = ret.glist memberships[r] = glist diff --git a/suite/commands/pts/removeuser.py b/kafs/commands/pts/removeuser.py similarity index 91% rename from suite/commands/pts/removeuser.py rename to kafs/commands/pts/removeuser.py index cf03934..2ff7c24 100644 --- a/suite/commands/pts/removeuser.py +++ b/kafs/commands/pts/removeuser.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc help = "Remove a user from a Protection Database group" @@ -44,7 +44,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "name" : kafs.PR_MAXNAMELEN, + "name" : rpc.PR_MAXNAMELEN, } description = r""" @@ -79,9 +79,9 @@ def main(params): continue try: - ret = cell.call_pt_server(params, kafs.PR_RemoveFromGroup, uid, gid) + ret = cell.call_pt_server(params, rpc.PR_RemoveFromGroup, uid, gid) prcache.evict_groups() - except kafs.AbortPRNOENT: + except rpc.AbortPRNOENT: error("User or group doesn't exist ; unable to remove user ", user, " from group ", group, ignored, "\n") if "force" not in params: return diff --git a/suite/commands/pts/rename.py b/kafs/commands/pts/rename.py similarity index 88% rename from suite/commands/pts/rename.py rename to kafs/commands/pts/rename.py index 43b6b98..1906961 100644 --- a/suite/commands/pts/rename.py +++ b/kafs/commands/pts/rename.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Change the name of a Protection Database entry" @@ -45,8 +45,8 @@ cant_combine_arguments = [ ] argument_size_limits = { - "oldname" : kafs.PR_MAXNAMELEN, - "newname" : kafs.PR_MAXNAMELEN, + "oldname" : rpc.PR_MAXNAMELEN, + "newname" : rpc.PR_MAXNAMELEN, } description = r""" @@ -67,13 +67,13 @@ def main(params): try: verbose("Renaming ", uid, " to ", newname, "\n") - ret = cell.call_pt_server(params, kafs.PR_ChangeEntry, uid, newname, 0, 0) + ret = cell.call_pt_server(params, rpc.PR_ChangeEntry, uid, newname, 0, 0) prcache.evict_id(uid) prcache.evict_groups() - except kafs.AbortPREXIST: + except rpc.AbortPREXIST: error("Entry for name already exists ; unable to change name of ", prcache.id_to_name(uid), " to ", newname, "\n") - except kafs.AbortPRNOENT: + except rpc.AbortPRNOENT: error("User or group doesn't exist ; unable to change name of ", uid, " to ", newname, "\n") diff --git a/suite/commands/pts/setfields.py b/kafs/commands/pts/setfields.py similarity index 83% rename from suite/commands/pts/setfields.py rename to kafs/commands/pts/setfields.py index e1dae25..b1757ad 100644 --- a/suite/commands/pts/setfields.py +++ b/kafs/commands/pts/setfields.py @@ -21,10 +21,10 @@ 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.exception import AFSArgumentError -from afs.lib.output import * -import kafs +from kafs.argparse import * +from kafs.exception import AFSArgumentError +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Set privacy flags or quota for a Protection Database entry" @@ -37,15 +37,15 @@ def get_privacy_flags(switch, params): # Indicate who can use "pts examine" if s[0] == "S": - flags |= kafs.PRP_STATUS_ANY # Anyone + flags |= rpc.PRP_STATUS_ANY # Anyone elif s[0] == "s": - flags |= kafs.PRP_STATUS_MEM # Members only + flags |= rpc.PRP_STATUS_MEM # Members only else: raise AFSArgumentError("Status-read privacy flags must be [Ss]") # Indicate who can use "pts listowned" if s[1] == "O": - flags |= kafs.PRP_OWNED_ANY # Anyone + flags |= rpc.PRP_OWNED_ANY # Anyone elif s[1] == "-": pass # Sysadmin & Group owner only else: @@ -53,9 +53,9 @@ def get_privacy_flags(switch, params): # Indicate who can use "pts membership" if s[2] == "M": - flags |= kafs.PRP_MEMBER_ANY # Anyone + flags |= rpc.PRP_MEMBER_ANY # Anyone elif s[2] == "m": - flags |= kafs.PRP_MEMBER_MEM # Members only + flags |= rpc.PRP_MEMBER_MEM # Members only elif s[2] == "-": pass # Sysadmin & User can list which groups they belong to else: @@ -63,9 +63,9 @@ def get_privacy_flags(switch, params): # Indicate who can use "pts adduser" if s[3] == "A": - flags |= kafs.PRP_ADD_ANY # Anyone + flags |= rpc.PRP_ADD_ANY # Anyone elif s[3] == "a": - elflags |= kafs.PRP_ADD_MEM # Members only + elflags |= rpc.PRP_ADD_MEM # Members only elif s[3] == "-": pass # Sysadmin & Group owner only else: @@ -73,7 +73,7 @@ def get_privacy_flags(switch, params): # Indicate who can use "pts removeuser" if s[4] == "r": - flags |= kafs.PRP_REMOVE_MEM # Members can remove other members + flags |= rpc.PRP_REMOVE_MEM # Members can remove other members elif s[4] == "-": pass # Sysadmin |= Group owner only else: @@ -100,7 +100,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "nameorid" : kafs.PR_MAXNAMELEN, + "nameorid" : rpc.PR_MAXNAMELEN, } description = r""" @@ -121,24 +121,24 @@ def main(params): if "access" in params: flags = params["access"] - mask |= kafs.PR_SF_ALLBITS + mask |= rpc.PR_SF_ALLBITS if "groupquota" in params: ngroups = params["groupquota"] if not ngroups.isnumeric(): raise AFSArgumentError("Group quota must be positive integer or zero") ngroups = int(ngroups) - mask |= kafs.PR_SF_NGROUPS + mask |= rpc.PR_SF_NGROUPS for name in params["nameorid"]: uid = prcache.name_or_id_to_id(name) try: verbose("Altering entry for ", uid, " (", name, ")\n") - ret = cell.call_pt_server(params, kafs.PR_SetFieldsEntry, + ret = cell.call_pt_server(params, rpc.PR_SetFieldsEntry, uid, mask, flags, ngroups, 0, 0, 0) - except kafs.AbortPRNOENT: + except rpc.AbortPRNOENT: error("User or group doesn't exist examining ", name, " (id ", uid, ")\n") prcache.id_is_unknown(uid) - except kafs.AbortPRPERM: + except rpc.AbortPRPERM: error("Permission denied examining ", name, " (id: ", uid, ")\n") diff --git a/suite/commands/pts/setmax.py b/kafs/commands/pts/setmax.py similarity index 87% rename from suite/commands/pts/setmax.py rename to kafs/commands/pts/setmax.py index 59f32a8..26acabc 100644 --- a/suite/commands/pts/setmax.py +++ b/kafs/commands/pts/setmax.py @@ -21,9 +21,9 @@ 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 +from kafs.argparse import * +from kafs.lib.output import * +import kafs.rpc as rpc import sys help = "Set the value of the max group id or max user id counter" @@ -55,8 +55,8 @@ def main(params): try: uid = params["user"] verbose("Set max UID to ", uid, "\n") - ret = cell.call_pt_server(params, kafs.PR_SetMax, uid, kafs.PRUSER) - except kafs.AbortPRPERM: + ret = cell.call_pt_server(params, rpc.PR_SetMax, uid, rpc.PRUSER) + except rpc.AbortPRPERM: error("Permission denied ; unable to change max user id\n") if "force" not in params: return @@ -65,8 +65,8 @@ def main(params): try: gid = params["group"] verbose("Set max GID to ", gid, "\n") - ret = cell.call_pt_server(params, kafs.PR_SetMax, gid, kafs.PRGRP) - except kafs.AbortPRPERM: + ret = cell.call_pt_server(params, rpc.PR_SetMax, gid, rpc.PRGRP) + except rpc.AbortPRPERM: error("Permission denied ; unable to change max group id\n") diff --git a/suite/commands/vos/__init__.py b/kafs/commands/vos/__init__.py similarity index 100% rename from suite/commands/vos/__init__.py rename to kafs/commands/vos/__init__.py diff --git a/suite/commands/vos/create.py b/kafs/commands/vos/create.py similarity index 75% rename from suite/commands/vos/create.py rename to kafs/commands/vos/create.py index 4bdb8d4..0d71d81 100644 --- a/suite/commands/vos/create.py +++ b/kafs/commands/vos/create.py @@ -21,12 +21,12 @@ 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.exception import AFSException -from afs.lib.output import * -from afs.lib.partition import id2part -from afs.lib.time import * -import kafs +from kafs.argparse import * +from kafs.exception import AFSException +from kafs.lib.output import * +from kafs.lib.partition import id2part +from kafs.lib.time import * +import kafs.rpc as rpc help = "Create a read/write volume and associated VLDB entry" @@ -57,7 +57,7 @@ def main(params): vol_conn = cell.open_volume_server(params["server"], params) vldb_conn = cell.open_vl_server(params) - ret = kafs.VOLSER_XListPartitions(vol_conn) + ret = rpc.VOLSER_XListPartitions(vol_conn) partitions = ret.ent # The partition must exist on the server @@ -67,36 +67,36 @@ def main(params): # The volume mustn't exist in the VLDB try: - ret = kafs.VL_GetEntryByNameN(vldb_conn, params["name"]) + ret = rpc.VL_GetEntryByNameN(vldb_conn, params["name"]) raise AFSException("Volume " + params["name"] + " already exists") - except kafs.AbortVL_NOENT: + except rpc.AbortVL_NOENT: pass # We need three volume IDs for the R/W, R/O and backup volumes volume_ids = [ 0, 0, 0 ] - ret = kafs.VL_GetNewVolumeId(vldb_conn, 1) - volume_ids[kafs.RWVOL] = ret.newvolumid - ret = kafs.VL_GetNewVolumeId(vldb_conn, 1) - volume_ids[kafs.ROVOL] = ret.newvolumid - ret = kafs.VL_GetNewVolumeId(vldb_conn, 1) - volume_ids[kafs.BACKVOL] = ret.newvolumid + ret = rpc.VL_GetNewVolumeId(vldb_conn, 1) + volume_ids[rpc.RWVOL] = ret.newvolumid + ret = rpc.VL_GetNewVolumeId(vldb_conn, 1) + volume_ids[rpc.ROVOL] = ret.newvolumid + ret = rpc.VL_GetNewVolumeId(vldb_conn, 1) + volume_ids[rpc.BACKVOL] = ret.newvolumid # Begin a volume creation transaction and configure the volume - ret = kafs.VOLSER_CreateVolume(vol_conn, + ret = rpc.VOLSER_CreateVolume(vol_conn, part, params["name"], - kafs.RWVOL, + rpc.RWVOL, 0, - volume_ids[kafs.RWVOL]) - if ret.volid != volume_ids[kafs.RWVOL]: + volume_ids[rpc.RWVOL]) + if ret.volid != volume_ids[rpc.RWVOL]: raise AFSException("Tried to create volume {:x} but got {:x}".format( - ret.volid, volume_ids[kafs.RWVOL])) + ret.volid, volume_ids[rpc.RWVOL])) transaction = ret.trans try: # Set the maximum quota v = 0xffffffff - info = kafs.volintInfo() + info = rpc.volintInfo() info.creationDate = v info.accessDate = v info.updateDate = v @@ -112,41 +112,41 @@ def main(params): else: info.maxquota = 5000 - ret = kafs.VOLSER_SetInfo(vol_conn, transaction, info) + ret = rpc.VOLSER_SetInfo(vol_conn, transaction, info) # Set the flags - ret = kafs.VOLSER_SetFlags(vol_conn, transaction, 0) + ret = rpc.VOLSER_SetFlags(vol_conn, transaction, 0) # Create the VLDB entry - vldb = kafs.nvldbentry() + vldb = rpc.nvldbentry() vldb.name = params["name"] vldb.nServers = 1 vldb.serverNumber[0] = int(params["server"].addr()) vldb.serverPartition[0] = part - vldb.serverFlags[0] = kafs.VLSF_RWVOL + vldb.serverFlags[0] = rpc.VLSF_RWVOL vldb.volumeId = volume_ids vldb.cloneId = 0 - vldb.flags = kafs.VLF_RWEXISTS + vldb.flags = rpc.VLF_RWEXISTS - ret = kafs.VL_CreateEntryN(vldb_conn, vldb) + ret = rpc.VL_CreateEntryN(vldb_conn, vldb) except Exception as e: # If we can't create a VLDB entry, we should probably clean up the # volume we've just created, rather than leaving it lying around. error("VLDB entry or volume creation failed; attempting to delete the volume."); try: - kafs.VOLSER_DeleteVolume(vol_conn, transaction) + rpc.VOLSER_DeleteVolume(vol_conn, transaction) except: error("Volume deletion failed"); try: - ret = kafs.VOLSER_EndTrans(vol_conn, transaction) + ret = rpc.VOLSER_EndTrans(vol_conn, transaction) except: error("Couldn't end volume creation transaction on error\n") raise e # Polish off try: - ret = kafs.VOLSER_EndTrans(vol_conn, transaction) + ret = rpc.VOLSER_EndTrans(vol_conn, transaction) except Exception as e: error("Couldn't end volume creation transaction on error\n") raise e diff --git a/suite/commands/vos/examine.py b/kafs/commands/vos/examine.py similarity index 70% rename from suite/commands/vos/examine.py rename to kafs/commands/vos/examine.py index 71136c5..97fdb34 100644 --- a/suite/commands/vos/examine.py +++ b/kafs/commands/vos/examine.py @@ -21,13 +21,13 @@ 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.exception import AFSException -from afs.lib.output import * -from afs.lib.voldisplay import * -from afs.lib.partition import id2part -from afs.lib.volserver import volserver -import kafs +from kafs.argparse import * +from kafs.exception import AFSException +from kafs.lib.output import * +from kafs.lib.voldisplay import * +from kafs.lib.partition import id2part +from kafs.lib.volserver import volserver +import kafs.rpc as rpc help = "Show volume header and VLDB entry information for a volume" @@ -49,7 +49,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "id" : kafs.VLDB_MAXNAMELEN, + "id" : rpc.VLDB_MAXNAMELEN, } description = r""" @@ -57,12 +57,12 @@ Show volume header and VLDB entry information for a volume """ def display_vldb(params, vldb): - if vldb.volumeId[kafs.RWVOL] != 0: - outputf(" RWrite: {:<10d}", vldb.volumeId[kafs.RWVOL]) - if vldb.volumeId[kafs.ROVOL] != 0: - outputf(" ROnly: {:<10d}", vldb.volumeId[kafs.ROVOL]) - if vldb.volumeId[kafs.BACKVOL] != 0: - outputf(" Backup: {:<10d}", vldb.volumeId[kafs.BACKVOL]) + if vldb.volumeId[rpc.RWVOL] != 0: + outputf(" RWrite: {:<10d}", vldb.volumeId[rpc.RWVOL]) + if vldb.volumeId[rpc.ROVOL] != 0: + outputf(" ROnly: {:<10d}", vldb.volumeId[rpc.ROVOL]) + if vldb.volumeId[rpc.BACKVOL] != 0: + outputf(" Backup: {:<10d}", vldb.volumeId[rpc.BACKVOL]) output("\n") display_vldb_site_list(params, vldb, " ") @@ -90,31 +90,31 @@ def main(params): volname = params["id"] if volname.isnumeric(): volid = int(volname) - ret = kafs.VL_GetEntryByIDN(vl_conn, volid, 0xffffffff) + ret = rpc.VL_GetEntryByIDN(vl_conn, volid, 0xffffffff) vldb = ret.entry - if volid == vldb.volumeId[kafs.RWVOL]: - servflag = kafs.VLSF_RWVOL - elif volid == vldb.volumeId[kafs.ROVOL]: - servflag = kafs.VLSF_ROVOL - elif volid == vldb.volumeId[kafs.BACKVOL]: - servflag = kafs.VLSF_BACKVOL + if volid == vldb.volumeId[rpc.RWVOL]: + servflag = rpc.VLSF_RWVOL + elif volid == vldb.volumeId[rpc.ROVOL]: + servflag = rpc.VLSF_ROVOL + elif volid == vldb.volumeId[rpc.BACKVOL]: + servflag = rpc.VLSF_BACKVOL else: raise AFSException("Requested volume ID not in record for volume ID") else: - ret = kafs.VL_GetEntryByNameN(vl_conn, volname) + ret = rpc.VL_GetEntryByNameN(vl_conn, volname) vldb = ret.entry servflag = 0 for i in range(0, vldb.nServers): servflag |= vldb.serverFlags[i] - if servflag & kafs.VLSF_RWVOL: - servflag = kafs.VLSF_RWVOL - volid = vldb.volumeId[kafs.RWVOL] - elif servflag & kafs.VLSF_ROVOL: - servflag = kafs.VLSF_ROVOL - volid = vldb.volumeId[kafs.ROVOL] - elif servflag & kafs.VLSF_BACKVOL: - servflag = kafs.VLSF_BACKVOL - volid = vldb.volumeId[kafs.BACKVOL] + if servflag & rpc.VLSF_RWVOL: + servflag = rpc.VLSF_RWVOL + volid = vldb.volumeId[rpc.RWVOL] + elif servflag & rpc.VLSF_ROVOL: + servflag = rpc.VLSF_ROVOL + volid = vldb.volumeId[rpc.ROVOL] + elif servflag & rpc.VLSF_BACKVOL: + servflag = rpc.VLSF_BACKVOL + volid = vldb.volumeId[rpc.BACKVOL] else: raise AFSException("Requested volume does not exist on any server") @@ -127,9 +127,9 @@ def main(params): vol_server = volserver(vldb.serverNumber[i]) vol_conn = cell.open_volume_server(vol_server, params) if "extended" in params: - ret = kafs.VOLSER_XListOneVolume(vol_conn, vldb.serverPartition[i], volid) + ret = rpc.VOLSER_XListOneVolume(vol_conn, vldb.serverPartition[i], volid) else: - ret = kafs.VOLSER_ListOneVolume(vol_conn, vldb.serverPartition[i], volid) + ret = rpc.VOLSER_ListOneVolume(vol_conn, vldb.serverPartition[i], volid) params["server"] = vol_server params["_partname"] = id2part(vldb.serverPartition[i]) vol = ret.resultEntries[0] diff --git a/suite/commands/vos/listaddrs.py b/kafs/commands/vos/listaddrs.py similarity index 83% rename from suite/commands/vos/listaddrs.py rename to kafs/commands/vos/listaddrs.py index b9ee595..647155a 100644 --- a/suite/commands/vos/listaddrs.py +++ b/kafs/commands/vos/listaddrs.py @@ -21,11 +21,11 @@ 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 * -from afs.lib.uuid import uuid2str -import afs.lib.addrcache as addrcache -import kafs +from kafs.argparse import * +from kafs.lib.output import * +from kafs.lib.uuid import uuid2str +import kafs.lib.addrcache as addrcache +import kafs.rpc as rpc help = "Display all VLDB entries" @@ -52,7 +52,7 @@ Display all VLDB entries """ def list_one(params, vl_conn, attributes): - ret = kafs.VL_GetAddrsU(vl_conn, attributes) + ret = rpc.VL_GetAddrsU(vl_conn, attributes) if "printuuid" in params: output("UUID: ", uuid2str(ret.uuidp1), "\n") @@ -63,13 +63,13 @@ def list_one(params, vl_conn, attributes): output("\n") def list_all(params, vl_conn): - ret = kafs.VL_GetAddrs(vl_conn, 0, 0) + ret = rpc.VL_GetAddrs(vl_conn, 0, 0) verbose("nentries ", ret.nentries, "\n") found = ret.nentries limit = ret.nentries * 2 - attributes = kafs.ListAddrByAttributes() - attributes.Mask |= kafs.VLADDR_INDEX + attributes = rpc.ListAddrByAttributes() + attributes.Mask |= rpc.VLADDR_INDEX for index in range(1, 65536): verbose("Look up", index) @@ -77,9 +77,9 @@ def list_all(params, vl_conn): try: list_one(params, vl_conn, attributes) found -= 1 - except kafs.AbortVL_NOENT: + except rpc.AbortVL_NOENT: continue - except kafs.AbortVL_INDEXERANGE: + except rpc.AbortVL_INDEXERANGE: break if found <= 0: break @@ -91,13 +91,13 @@ def main(params): if "uuid" not in params and "host" not in params: return list_all(params, vl_conn) - attributes = kafs.ListAddrByAttributes() + attributes = rpc.ListAddrByAttributes() attributes.Mask = 0 if "uuid" in params: - attributes.Mask |= kafs.VLADDR_UUID + attributes.Mask |= rpc.VLADDR_UUID attributes.uuid = params["uuid"] if "host" in params: - attributes.Mask |= kafs.VLADDR_IPADDR + attributes.Mask |= rpc.VLADDR_IPADDR attributes.ipaddr = params["host"].integer_addr() list_one(params, vl_conn, attributes) diff --git a/suite/commands/vos/listpart.py b/kafs/commands/vos/listpart.py similarity index 92% rename from suite/commands/vos/listpart.py rename to kafs/commands/vos/listpart.py index 37e08d9..210e8a5 100644 --- a/suite/commands/vos/listpart.py +++ b/kafs/commands/vos/listpart.py @@ -21,10 +21,10 @@ 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 afs.lib.partition as partition -import kafs +from kafs.argparse import * +from kafs.lib.output import * +import kafs.lib.partition as partition +import kafs.rpc as rpc help = "Display all AFS partitions on a file server machine" @@ -51,7 +51,7 @@ def main(params): cell = params["cell"] vol_conn = cell.open_volume_server(params["server"], params) - ret = kafs.VOLSER_ListPartitions(vol_conn) + ret = rpc.VOLSER_ListPartitions(vol_conn) partitions = ret.partIDs.partIds output("The partitions on the server are:\n"); diff --git a/suite/commands/vos/listvldb.py b/kafs/commands/vos/listvldb.py similarity index 82% rename from suite/commands/vos/listvldb.py rename to kafs/commands/vos/listvldb.py index 28a6284..265076f 100644 --- a/suite/commands/vos/listvldb.py +++ b/kafs/commands/vos/listvldb.py @@ -21,10 +21,10 @@ 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 * -from afs.lib.voldisplay import * -import kafs +from kafs.argparse import * +from kafs.lib.output import * +from kafs.lib.voldisplay import * +import kafs.rpc as rpc help = "Query the VLDB" @@ -52,7 +52,7 @@ cant_combine_arguments = [ ] argument_size_limits = { - "name" : kafs.VLDB_MAXNAMELEN, + "name" : rpc.VLDB_MAXNAMELEN, } description = r""" @@ -64,11 +64,11 @@ def print_record(params, vldb): output(vldb.name, "\n") output(" "); flags = vldb.serverFlags[0] - if flags & kafs.VLSF_RWVOL: + if flags & rpc.VLSF_RWVOL: outputf(" RWrite: {:<12d}", vldb.volumeId[0]) - if flags & kafs.VLSF_ROVOL: + if flags & rpc.VLSF_ROVOL: outputf(" ROnly: {:<12d}", vldb.volumeId[1]) - if flags & kafs.VLSF_BACKVOL: + if flags & rpc.VLSF_BACKVOL: outputf(" Backup: {:<12d}",vldb.volumeId[2]) output("\n") display_vldb_site_list(params, vldb, " ") @@ -81,25 +81,25 @@ def main(params): quiet = "quiet" in params if "name" in params: - ret = kafs.VL_GetEntryByName(z_conn, params["name"]) + ret = rpc.VL_GetEntryByName(z_conn, params["name"]) vldb = ret.entry print_record(params, vldb) return - attributes = kafs.VldbListByAttributes() + attributes = rpc.VldbListByAttributes() attributes.Mask = 0 if "server" in params: - attributes.Mask |= kafs.VLLIST_SERVER + attributes.Mask |= rpc.VLLIST_SERVER attributes.server = params["server"].integer_addr() if "partition" in params: - attributes.Mask |= kafs.VLLIST_PARTITION + attributes.Mask |= rpc.VLLIST_PARTITION attributes.partition = params["partition"] if "locked" in params: - attributes.Mask |= kafs.VLLIST_FLAG - attributes.flag = kafs.VLOP_MOVE | kafs.VLOP_RELEASE | kafs.VLOP_BACKUP | kafs.VLOP_DELETE | kafs.VLOP_DUMP + attributes.Mask |= rpc.VLLIST_FLAG + attributes.flag = rpc.VLOP_MOVE | rpc.VLOP_RELEASE | rpc.VLOP_BACKUP | rpc.VLOP_DELETE | rpc.VLOP_DUMP - ret = kafs.VL_ListAttributes(z_conn, attributes) + ret = rpc.VL_ListAttributes(z_conn, attributes) blkentries = ret.blkentries if not quiet and "server" in params: diff --git a/suite/commands/vos/listvol.py b/kafs/commands/vos/listvol.py similarity index 92% rename from suite/commands/vos/listvol.py rename to kafs/commands/vos/listvol.py index 8fe5201..c59a05e 100644 --- a/suite/commands/vos/listvol.py +++ b/kafs/commands/vos/listvol.py @@ -21,11 +21,11 @@ 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 * -from afs.lib.partition import id2part -from afs.lib.voldisplay import * -import kafs +from kafs.argparse import * +from kafs.lib.output import * +from kafs.lib.partition import id2part +from kafs.lib.voldisplay import * +import kafs.rpc as rpc import sys help = "Display information from a volume header" @@ -74,10 +74,10 @@ writes_labels = [ "writes_same_net", "writes_same_net_auth", "writes_diff_net", "writes_diff_net_auth" ] def display_format_extended(params, vol): - if vol.status == kafs.VBUSY: + if vol.status == rpc.VBUSY: output("VOLUME_BUSY\t{:d}\n", vol.volid) return - elif vol.status != kafs.VOK: + elif vol.status != rpc.VOK: output("COULD_NOT_ATTACH_VOLUME\t{:d}\n", vol.volid) return @@ -102,9 +102,9 @@ def display_format_extended(params, vol): ############################################################################### def display_one_partition(params, vol_conn, partition): if "extended" in params: - ret = kafs.VOLSER_XListVolumes(vol_conn, partition, 1) + ret = rpc.VOLSER_XListVolumes(vol_conn, partition, 1) else: - ret = kafs.VOLSER_ListVolumes(vol_conn, partition, 1) + ret = rpc.VOLSER_ListVolumes(vol_conn, partition, 1) params["_partname"] = partname = id2part(partition) if "quiet" not in params: @@ -131,7 +131,7 @@ def display_one_partition(params, vol_conn, partition): for vol in volumes: if vol.inUse: n_online += 1 - if vol.status == kafs.VBUSY: + if vol.status == rpc.VBUSY: n_busy += 1 display_func(params, vol) @@ -158,10 +158,10 @@ def main(params): if "partition" in params: try: display_one_partition(params, vol_conn, params["partition"]) - except kafs.AbortVOLSERILLEGAL_PARTITION: + except rpc.AbortVOLSERILLEGAL_PARTITION: error("vos : partition ", params["raw.partition"][0], " does not exist on the server") else: - ret = kafs.VOLSER_XListPartitions(vol_conn) + ret = rpc.VOLSER_XListPartitions(vol_conn) for p in ret.ent: one_partition(params, vol_conn, p) diff --git a/suite/commands/vos/partinfo.py b/kafs/commands/vos/partinfo.py similarity index 88% rename from suite/commands/vos/partinfo.py rename to kafs/commands/vos/partinfo.py index c7f4427..4f0a504 100644 --- a/suite/commands/vos/partinfo.py +++ b/kafs/commands/vos/partinfo.py @@ -21,10 +21,10 @@ 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 afs.lib.partition as partition -import kafs +from kafs.argparse import * +from kafs.lib.output import * +import kafs.lib.partition as partition +import kafs.rpc as rpc help = "Report the available and total space on a partition" @@ -54,7 +54,7 @@ def main(params): vol_conn = cell.open_volume_server(params["server"], params) if "partition" not in params: - ret = kafs.VOLSER_ListPartitions(vol_conn) + ret = rpc.VOLSER_ListPartitions(vol_conn) partitions = ret.partIDs.partIds else: partitions = [ params["partition"] ] @@ -64,10 +64,10 @@ def main(params): partname = partition.id2part(i) try: - ret = kafs.VOLSER_PartitionInfo(vol_conn, partname) + ret = rpc.VOLSER_PartitionInfo(vol_conn, partname) part = ret.partition output("Free space on partition ", part.name, ": ", part.free, " K blocks out of total ", part.totalUsable, "\n") - except kafs.AbortVOLSERILLEGAL_PARTITION: + except rpc.AbortVOLSERILLEGAL_PARTITION: error("partition ", partname, " does not exist on the server\n") diff --git a/suite/commands/vos/status.py b/kafs/commands/vos/status.py similarity index 88% rename from suite/commands/vos/status.py rename to kafs/commands/vos/status.py index 463ba81..28c78f1 100644 --- a/suite/commands/vos/status.py +++ b/kafs/commands/vos/status.py @@ -21,11 +21,11 @@ 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 afs.lib.partition as partition -from afs.lib.time import * -import kafs +from kafs.argparse import * +from kafs.lib.output import * +import kafs.lib.partition as partition +from kafs.lib.time import * +import kafs.rpc as rpc help = "Report a volume server's status" @@ -52,7 +52,7 @@ def main(params): cell = params["cell"] vol_conn = cell.open_volume_server(params["server"], params) - ret = kafs.VOLSER_Monitor(vol_conn) + ret = rpc.VOLSER_Monitor(vol_conn) results = ret.result if len(results) == 0: output("No active transactions on", params["server"].name(), "\n") @@ -62,15 +62,15 @@ def main(params): for trans in results: outputf("transaction: {:d} created: {:s}\n", trans.tid, time2str(trans.creationTime)) output("lastActiveTime:", time2str(trans.time), "\n") - if iflag & kafs.ITOffline: + if iflag & rpc.ITOffline: attach_mode = "offline" - elif iflag & kafs.ITBusy: + elif iflag & rpc.ITBusy: attach_mode = "busy" - elif iflag & kafs.ITReadOnly: + elif iflag & rpc.ITReadOnly: attach_mode = "readonly" - elif iflag & kafs.ITCreate: + elif iflag & rpc.ITCreate: attach_mode = "create" - elif iflag & kafs.ITCreateVolID: + elif iflag & rpc.ITCreateVolID: attach_mode = "createvolid" else: attach_mode = "{:d}".format(trans.iflags) diff --git a/suite/exception.py b/kafs/exception.py similarity index 100% rename from suite/exception.py rename to kafs/exception.py diff --git a/suite/help.py b/kafs/help.py similarity index 96% rename from suite/help.py rename to kafs/help.py index 3c700c5..135ec0a 100644 --- a/suite/help.py +++ b/kafs/help.py @@ -21,9 +21,9 @@ 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.exception import AFSException -from afs.argparse import * -from afs.lib.output import * +from kafs.exception import AFSException +from kafs.argparse import * +from kafs.lib.output import * help = "Get help on commands" @@ -101,7 +101,7 @@ def display_help_on_topics(prog, cmdsetmod, commands, topics): continue if topic == "apropos": - command = __import__("afs.apropos", globals(), locals(), ['*']) + command = __import__("kafs.apropos", globals(), locals(), ['*']) output("bos apropos: ", command.help, "\n") display_command_arguments(command.command_arguments) continue diff --git a/kafs.c b/kafs/kafs.c similarity index 91% rename from kafs.c rename to kafs/kafs.c index ef3b3a5..919caf4 100644 --- a/kafs.c +++ b/kafs/kafs.c @@ -15,7 +15,7 @@ #include #include "structmember.h" #include "kafs.h" -#include "afs_py.h" +#include "rxgen_afs_py.h" #if 0 /* @@ -33,13 +33,14 @@ static PyMethodDef module_methods[] = { #endif /* - * Initialise the module. + * Initialise the module. This function must be named for the last component + * of the module path (ie. rpc from kafs.rpc). */ #ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ #define PyMODINIT_FUNC void #endif PyMODINIT_FUNC -PyInit_kafs(void) +PyInit_rpc(void) { PyObject *m; diff --git a/kafs.h b/kafs/kafs.h similarity index 100% rename from kafs.h rename to kafs/kafs.h diff --git a/kafs/lib/__init__.py b/kafs/lib/__init__.py new file mode 100644 index 0000000..34ec353 --- /dev/null +++ b/kafs/lib/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +__copyright__ = """ +Copyright (C) 2014 Red Hat, Inc. All Rights Reserved. +Written by David Howells (dhowells@redhat.com) + +Derived from StGIT: + +Copyright (C) 2005, Catalin Marinas +Copyright (C) 2008, Karl Hasselström + +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 +""" diff --git a/suite/lib/addrcache.py b/kafs/lib/addrcache.py similarity index 90% rename from suite/lib/addrcache.py rename to kafs/lib/addrcache.py index 05e3204..8a7f231 100644 --- a/suite/lib/addrcache.py +++ b/kafs/lib/addrcache.py @@ -21,7 +21,7 @@ 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 import exception +from kafs.exception import AFSNetAddressError from socket import gethostbyname_ex, gethostbyaddr, gaierror, herror import sys import ipaddress @@ -60,7 +60,7 @@ def name2addrs(name): try: addr = ipaddress.ip_address(name) if addr.version == 6: - raise exception.AFSNetAddressError("IPv6 is not currently supported") + raise AFSNetAddressError("IPv6 is not currently supported") return str(addr) except ValueError: pass @@ -72,7 +72,7 @@ def name2addrs(name): try: result = gethostbyname_ex(name) except gaierror as e: - raise exception.AFSNetAddressError("Couldn't resolve '" + name + "'") + raise AFSNetAddressError("Couldn't resolve '" + name + "'") add_ghb(name, None, result) return cache_n2a[name] @@ -86,10 +86,10 @@ def addr2addr(name): try: addr = ipaddress.ip_address(name) if addr.version == 6: - raise exception.AFSNetAddressError("IPv6 is not currently supported") + raise AFSNetAddressError("IPv6 is not currently supported") return addr except ValueError: - raise exception.AFSNetAddressError("Can't translate '" + name + "' to integer") + raise AFSNetAddressError("Can't translate '" + name + "' to integer") ############################################################################### # @@ -103,7 +103,7 @@ def name2addr(name): try: addr = ipaddress.ip_address(name) if addr.version == 6: - raise exception.AFSNetAddressError("IPv6 is not currently supported") + raise AFSNetAddressError("IPv6 is not currently supported") return addr except ValueError: pass @@ -168,5 +168,5 @@ def addr2addr(addr): if str(type(addr)) != "" and str(type(addr)) != "": addr = ipaddress.ip_address(addr) if addr.version == 6: - raise exception.AFSNetAddressError("IPv6 is not currently supported") + raise AFSNetAddressError("IPv6 is not currently supported") return addr diff --git a/suite/lib/bosserver.py b/kafs/lib/bosserver.py similarity index 92% rename from suite/lib/bosserver.py rename to kafs/lib/bosserver.py index 6b66391..82adfee 100644 --- a/suite/lib/bosserver.py +++ b/kafs/lib/bosserver.py @@ -21,9 +21,8 @@ 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 import exception -from afs.lib.output import * -from afs.lib.server import server +from kafs.lib.output import * +from kafs.lib.server import server class bosserver(server): """Represents an AFS BOS server. We hold the server address here.""" diff --git a/suite/lib/cell.py b/kafs/lib/cell.py similarity index 86% rename from suite/lib/cell.py rename to kafs/lib/cell.py index ada0d68..add842a 100644 --- a/suite/lib/cell.py +++ b/kafs/lib/cell.py @@ -21,16 +21,16 @@ 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 import exception -from afs.lib.vlserver import vlserver -from afs.lib.server import ServerError -from afs.lib.prcache import prcache -from afs.lib.output import * +from kafs.exception import AFSException +from kafs.lib.vlserver import vlserver +from kafs.lib.server import ServerError +from kafs.lib.prcache import prcache +from kafs.lib.output import * import dns.resolver import linecache -import kafs +import kafs.rpc as rpc -class CellError(exception.AFSException): +class CellError(AFSException): """Error raised by L{cell} objects.""" class cell: @@ -163,9 +163,9 @@ class cell: security = 0 key = None elif "encrypt" in params: - security = kafs.RXRPC_SECURITY_ENCRYPT + security = rpc.RXRPC_SECURITY_ENCRYPT else: - security = kafs.RXRPC_SECURITY_PLAIN + security = rpc.RXRPC_SECURITY_PLAIN return (key, security) # Open a VL Server connection @@ -178,10 +178,10 @@ class cell: for vladdr in self.query_vl_addrs(): verbose("Trying vlserver ", vladdr, "\n") - z_conn = kafs.rx_new_connection(str(vladdr), kafs.VL_PORT, kafs.VL_SERVICE, - key, security) + z_conn = rpc.rx_new_connection(str(vladdr), rpc.VL_PORT, rpc.VL_SERVICE, + key, security) try: - ret = kafs.VL_Probe(z_conn) + ret = rpc.VL_Probe(z_conn) self.__vlconn = z_conn break except ConnectionRefusedError: @@ -197,10 +197,10 @@ class cell: key, security = self.determine_security(params) verbose("Trying volserver ", server.addr(), "\n") - vol_conn = kafs.rx_new_connection(str(server.addr()), - kafs.VOLSERVICE_PORT, - kafs.VOLSERVICE_ID, - key, security) + vol_conn = rpc.rx_new_connection(str(server.addr()), + rpc.VOLSERVICE_PORT, + rpc.VOLSERVICE_ID, + key, security) return vol_conn # Open a BOS Server connection @@ -208,10 +208,10 @@ class cell: key, security = self.determine_security(params) verbose("Trying bosserver ", server.addr(), "\n") - bos_conn = kafs.rx_new_connection(str(server.addr()), - kafs.BOSSERVICE_PORT, - kafs.BOSSERVICE_ID, - key, security) + bos_conn = rpc.rx_new_connection(str(server.addr()), + rpc.BOSSERVICE_PORT, + rpc.BOSSERVICE_ID, + key, security) return bos_conn # Open a Protection Server connection @@ -228,10 +228,10 @@ class cell: verbose("Trying ptserver ", server, "\n") - pt_conn = kafs.rx_new_connection(str(server), - kafs.PR_PORT, - kafs.PR_SERVICE, - key, security) + pt_conn = rpc.rx_new_connection(str(server), + rpc.PR_PORT, + rpc.PR_SERVICE, + key, security) return pt_conn # Find and call out to a working protection server @@ -244,7 +244,7 @@ class cell: except ConnectionRefusedError: # Move on to the next server verbose("Connection refused\n"); - except kafs.AbortUNOTSYNC: + except rpc.AbortUNOTSYNC: verbose("Server is not synchronised\n"); except OSError as e: verbose(e, "\n"); diff --git a/suite/lib/fileserver.py b/kafs/lib/fileserver.py similarity index 92% rename from suite/lib/fileserver.py rename to kafs/lib/fileserver.py index 5ec9852..888b7be 100644 --- a/suite/lib/fileserver.py +++ b/kafs/lib/fileserver.py @@ -21,9 +21,8 @@ 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 import exception -from afs.lib.output import * -from afs.lib.server import server +from kafs.lib.output import * +from kafs.lib.server import server class fileserver(server): """Represents an AFS File server. We hold the server address here.""" diff --git a/suite/lib/output.py b/kafs/lib/output.py similarity index 100% rename from suite/lib/output.py rename to kafs/lib/output.py diff --git a/suite/lib/parse_setrestart_time.py b/kafs/lib/parse_setrestart_time.py similarity index 92% rename from suite/lib/parse_setrestart_time.py rename to kafs/lib/parse_setrestart_time.py index fec69f1..b3282cd 100644 --- a/suite/lib/parse_setrestart_time.py +++ b/kafs/lib/parse_setrestart_time.py @@ -21,8 +21,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from exception import AFSArgumentError -import kafs +from kafs.exception import AFSArgumentError +import kafs.rpc as rpc days = [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ] @@ -32,16 +32,16 @@ days = [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "satu # ############################################################################### def parse_restart_time(switch, params): - at = kafs.bozo_netKTime() + at = rpc.bozo_netKTime() time = params[0].strip().lower() if time == "": raise AFSArgumentError("Empty time string") if time == "never": - at.mask = kafs.KTIME_NEVER + at.mask = rpc.KTIME_NEVER return at if time == "now": - at.mask = kafs.KTIME_NOW + at.mask = rpc.KTIME_NOW return at if time.startswith("every "): @@ -60,7 +60,7 @@ def parse_restart_time(switch, params): for i in range(0, 7): if days[i].startswith(day): at.day = i - at.mask |= kafs.KTIME_DAY + at.mask |= rpc.KTIME_DAY break else: raise AFSArgumentError("Unrecognised day name") @@ -101,5 +101,5 @@ def parse_restart_time(switch, params): if at.min > 59: raise AFSArgumentError("Minute out of range in time") - at.mask |= kafs.KTIME_HOUR | kafs.KTIME_MIN + at.mask |= rpc.KTIME_HOUR | rpc.KTIME_MIN return at diff --git a/suite/lib/partition.py b/kafs/lib/partition.py similarity index 97% rename from suite/lib/partition.py rename to kafs/lib/partition.py index 4463c33..be74e9f 100644 --- a/suite/lib/partition.py +++ b/kafs/lib/partition.py @@ -21,7 +21,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from exception import AFSArgumentError +from kafs.exception import AFSArgumentError def part2id(name): """Convert a partition name or number string into a numeric ID""" diff --git a/suite/lib/prcache.py b/kafs/lib/prcache.py similarity index 96% rename from suite/lib/prcache.py rename to kafs/lib/prcache.py index 6a3b9cd..2d6a0a2 100644 --- a/suite/lib/prcache.py +++ b/kafs/lib/prcache.py @@ -21,9 +21,8 @@ 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 import exception -from afs.lib.output import * -import kafs +from kafs.lib.output import * +import kafs.rpc as rpc class AFS_PR_Entry: """Protection Database Name/ID mapping entry""" @@ -96,18 +95,18 @@ class prcache: name_arg_list = [] for i in names_to_lookup: verbose_cont(i, ",") - prname = kafs.prname() + prname = rpc.prname() prname.prname = i name_arg_list.append(prname) verbose_cont(")\n") - ret = self.__cell.call_pt_server(self.__params, kafs.PR_NameToID, name_arg_list) + ret = self.__cell.call_pt_server(self.__params, rpc.PR_NameToID, name_arg_list) for i in range(0, len(names_to_lookup)): name = names_to_lookup[i] ugid = ret.ilist[i] # Convert the name to an ID for message purposes - note that if the # entry does not exist, this will return the anonymous ID - if ugid == kafs.PR_ANONYMOUSID and name != "anonymous": + if ugid == rpc.PR_ANONYMOUSID and name != "anonymous": entry = AFS_PR_Entry(name, None) else: entry = AFS_PR_Entry(name, ugid) @@ -132,7 +131,7 @@ class prcache: verbose_cont(i, ",") verbose_cont(")\n") - ret = self.__cell.call_pt_server(self.__params, kafs.PR_IDToName, ids_to_lookup) + ret = self.__cell.call_pt_server(self.__params, rpc.PR_IDToName, ids_to_lookup) nlist = ret.nlist for i in range(0, len(ids_to_lookup)): ugid = ids_to_lookup[i] @@ -270,7 +269,7 @@ class prcache: def do_look_up_group(self, gid): verbose("Look up group ", gid, "\n") assert(gid < 0) - ret = self.__cell.call_pt_server(self.__params, kafs.PR_ListElements, gid) + ret = self.__cell.call_pt_server(self.__params, rpc.PR_ListElements, gid) entries = ret.elist self.__groups[gid] = pr_group(gid, entries) diff --git a/suite/lib/server.py b/kafs/lib/server.py similarity index 94% rename from suite/lib/server.py rename to kafs/lib/server.py index 4b43deb..fc71c5e 100644 --- a/suite/lib/server.py +++ b/kafs/lib/server.py @@ -21,11 +21,11 @@ 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 import exception -import afs.lib.addrcache as addrcache -from afs.lib.output import * +from kafs.exception import AFSException +import kafs.lib.addrcache as addrcache +from kafs.lib.output import * -class ServerError(exception.AFSException): +class ServerError(AFSException): """Error raised by L{volserver} objects.""" class server: diff --git a/suite/lib/time.py b/kafs/lib/time.py similarity index 100% rename from suite/lib/time.py rename to kafs/lib/time.py diff --git a/suite/lib/uuid.py b/kafs/lib/uuid.py similarity index 98% rename from suite/lib/uuid.py rename to kafs/lib/uuid.py index 82cf05f..68f9f46 100644 --- a/suite/lib/uuid.py +++ b/kafs/lib/uuid.py @@ -21,7 +21,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from exception import AFSArgumentError +from kafs.exception import AFSArgumentError def uuid2str(uuid): """Convert an afsUUID-class object into a UUID string""" diff --git a/suite/lib/vlserver.py b/kafs/lib/vlserver.py similarity index 92% rename from suite/lib/vlserver.py rename to kafs/lib/vlserver.py index d632a2f..bfcc7de 100644 --- a/suite/lib/vlserver.py +++ b/kafs/lib/vlserver.py @@ -21,9 +21,8 @@ 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 import exception -from afs.lib.output import * -from afs.lib.server import server +from kafs.lib.output import * +from kafs.lib.server import server class vlserver(server): """Represents an AFS Volume Location server. We hold the server address here.""" diff --git a/suite/lib/voldisplay.py b/kafs/lib/voldisplay.py similarity index 94% rename from suite/lib/voldisplay.py rename to kafs/lib/voldisplay.py index 741fd27..d42c30e 100644 --- a/suite/lib/voldisplay.py +++ b/kafs/lib/voldisplay.py @@ -21,11 +21,11 @@ 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.lib.output import * -import afs.lib.addrcache as addrcache -import afs.lib.partition as partition -from afs.lib.time import * -import kafs +from kafs.lib.output import * +import kafs.lib.addrcache as addrcache +import kafs.lib.partition as partition +from kafs.lib.time import * +import kafs.rpc as rpc statistics_time_ranges = [ "0-60 sec ", @@ -59,9 +59,9 @@ def vol_state(vol): return s def vol_status(vol): - if vol.status == kafs.VOK: + if vol.status == rpc.VOK: return "OK" - if vol.status == kafs.VBUSY: + if vol.status == rpc.VBUSY: return "BUSY" return "UNATTACHABLE" @@ -86,9 +86,9 @@ def display_vldb_site_list(params, vldb, indent=""): part = partition.id2part(vldb.serverPartition[i]) flags = vldb.serverFlags[i] - if flags & kafs.VLSF_ROVOL: + if flags & rpc.VLSF_ROVOL: ptype = "RO" - elif flags & kafs.VLSF_RWVOL: + elif flags & rpc.VLSF_RWVOL: ptype = "RW" else: ptype = "Back" @@ -96,21 +96,21 @@ def display_vldb_site_list(params, vldb, indent=""): outputf("{:s} server {:s} partition {:s} {:s} Site\n", indent, addr, part, ptype) - if vldb.flags & (kafs.VLOP_MOVE | - kafs.VLOP_RELEASE | - kafs.VLOP_BACKUP | - kafs.VLOP_DELETE | - kafs.VLOP_DUMP): + if vldb.flags & (rpc.VLOP_MOVE | + rpc.VLOP_RELEASE | + rpc.VLOP_BACKUP | + rpc.VLOP_DELETE | + rpc.VLOP_DUMP): output(indent, "Volume is currently LOCKED") - if vldb.flags & kafs.VLOP_MOVE: + if vldb.flags & rpc.VLOP_MOVE: output(indent, "Volume is locked for a move operation") - if vldb.flags & kafs.VLOP_RELEASE: + if vldb.flags & rpc.VLOP_RELEASE: output(indent, "Volume is locked for a release operation") - if vldb.flags & kafs.VLOP_BACKUP: + if vldb.flags & rpc.VLOP_BACKUP: output(indent, "Volume is locked for a backup operation") - if vldb.flags & kafs.VLOP_DELETE: + if vldb.flags & rpc.VLOP_DELETE: output(indent, "Volume is locked for a delete/misc operation") - if vldb.flags & kafs.VLOP_DUMP: + if vldb.flags & rpc.VLOP_DUMP: output(indent, "Volume is locked for a dump/restore operation") ############################################################################### diff --git a/suite/lib/volserver.py b/kafs/lib/volserver.py similarity index 92% rename from suite/lib/volserver.py rename to kafs/lib/volserver.py index 6c0559f..d3671f2 100644 --- a/suite/lib/volserver.py +++ b/kafs/lib/volserver.py @@ -21,9 +21,8 @@ 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 import exception -from afs.lib.output import * -from afs.lib.server import server +from kafs.lib.output import * +from kafs.lib.server import server class volserver(server): """Represents an AFS Volume server. We hold the server address here.""" diff --git a/suite/main.py b/kafs/main.py similarity index 89% rename from suite/main.py rename to kafs/main.py index c6fe79f..a490326 100644 --- a/suite/main.py +++ b/kafs/main.py @@ -27,9 +27,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import sys, os, traceback -import afs.commands -from afs.lib.output import * -from exception import AFSArgumentError, AFSHelpFlag +import kafs.commands +from kafs.lib.output import * +from kafs.exception import AFSArgumentError, AFSHelpFlag ############################################################################### # @@ -44,7 +44,7 @@ def _main(): prog = os.path.basename(sys.argv[0]) set_program_name(prog) - cmdsets = afs.commands.get_command_sets() + cmdsets = kafs.commands.get_command_sets() #print("CMDSETS:", cmdsets) if prog == "afs": @@ -68,7 +68,7 @@ def _main(): raise RuntimeError("Unsupported command set '" + cmdset + "'") if cmd in ['-v', '--version', 'version']: - from afs.version import version + from kafs.version import version print('AFS Toolkit %s' % version) print('Python version %s' % sys.version) sys.exit(0) @@ -78,7 +78,7 @@ def _main(): sys.exit(0) # Import the command set - cmdsetmod = afs.commands.import_command_set(cmdset) + cmdsetmod = kafs.commands.import_command_set(cmdset) commands = cmdsetmod.get_command_list() commands.append("help") commands.append("apropos") @@ -104,9 +104,9 @@ def _main(): sys.argv[0] += ' {:s}'.format(cmd) if cmd == "help": - command = __import__("afs.help", globals(), locals(), ['*']) + command = __import__("kafs.help", globals(), locals(), ['*']) elif cmd == "apropos": - command = __import__("afs.apropos", globals(), locals(), ['*']) + command = __import__("kafs.apropos", globals(), locals(), ['*']) else: command = cmdsetmod.get_command(cmd) # If it's an alias, then switch to the real module @@ -126,7 +126,7 @@ def _main(): # Parse the parameters try: - params = afs.argparse.parse_arguments(sys.argv[1:], + params = kafs.argparse.parse_arguments(sys.argv[1:], command.command_arguments, argument_size_limits, cant_combine_arguments) @@ -134,13 +134,13 @@ def _main(): print(prog + ":", e, file=sys.stderr) sys.exit(2) except AFSHelpFlag: - helper = __import__("afs.help", globals(), locals(), ['*']) + helper = __import__("kafs.help", globals(), locals(), ['*']) helper.helpflag(prog, cmdsetmod, cmd, command) sys.exit(0) # Stick in the default cell if there isn't one if "cell" not in params: - from afs.lib.cell import cell + from kafs.lib.cell import cell params["cell"] = cell() params["_prog"] = prog @@ -149,7 +149,7 @@ def _main(): # These modules are only used from this point onwards and do not # need to be imported earlier - from afs.exception import AFSException + from kafs.exception import AFSException try: set_debugging_level(int(os.environ.get('AFS_DEBUG_LEVEL', 0))) diff --git a/py_passwd.c b/kafs/py_passwd.c similarity index 100% rename from py_passwd.c rename to kafs/py_passwd.c diff --git a/py_rxconn.c b/kafs/py_rxconn.c similarity index 100% rename from py_rxconn.c rename to kafs/py_rxconn.c diff --git a/py_rxgen.c b/kafs/py_rxgen.c similarity index 99% rename from py_rxgen.c rename to kafs/py_rxgen.c index 85ed659..aecb830 100644 --- a/py_rxgen.c +++ b/kafs/py_rxgen.c @@ -13,7 +13,7 @@ #include "structmember.h" #include #include "py_rxgen.h" -#include "afs_py.h" +#include "rxgen_afs_py.h" #include "rxgen.h" #define debug(fmt, ...) do { if (0) printf(fmt, ## __VA_ARGS__); } while (0) diff --git a/py_rxgen.h b/kafs/py_rxgen.h similarity index 100% rename from py_rxgen.h rename to kafs/py_rxgen.h diff --git a/py_rxsplit.c b/kafs/py_rxsplit.c similarity index 99% rename from py_rxsplit.c rename to kafs/py_rxsplit.c index ddfe85f..ef225e1 100644 --- a/py_rxsplit.c +++ b/kafs/py_rxsplit.c @@ -15,7 +15,7 @@ #include #include #include "py_rxgen.h" -#include "afs_py.h" +#include "rxgen_afs_py.h" #include "rxgen.h" #define debug(fmt, ...) do { if (0) printf(fmt, ## __VA_ARGS__); } while (0) diff --git a/kafs/rpc-api/__init__.py b/kafs/rpc-api/__init__.py new file mode 100644 index 0000000..2bdc2f3 --- /dev/null +++ b/kafs/rpc-api/__init__.py @@ -0,0 +1,3 @@ +from rpc import * + +__all__ = ["rpc"] diff --git a/rpc-api/afsuuid.h b/kafs/rpc-api/afsuuid.h similarity index 100% rename from rpc-api/afsuuid.h rename to kafs/rpc-api/afsuuid.h diff --git a/rpc-api/bos.xg b/kafs/rpc-api/bos.xg similarity index 100% rename from rpc-api/bos.xg rename to kafs/rpc-api/bos.xg diff --git a/rpc-api/cb.xg b/kafs/rpc-api/cb.xg similarity index 100% rename from rpc-api/cb.xg rename to kafs/rpc-api/cb.xg diff --git a/rpc-api/common.h b/kafs/rpc-api/common.h similarity index 100% rename from rpc-api/common.h rename to kafs/rpc-api/common.h diff --git a/rpc-api/fs.xg b/kafs/rpc-api/fs.xg similarity index 100% rename from rpc-api/fs.xg rename to kafs/rpc-api/fs.xg diff --git a/rpc-api/ka.xg b/kafs/rpc-api/ka.xg similarity index 100% rename from rpc-api/ka.xg rename to kafs/rpc-api/ka.xg diff --git a/rpc-api/pts.xg b/kafs/rpc-api/pts.xg similarity index 100% rename from rpc-api/pts.xg rename to kafs/rpc-api/pts.xg diff --git a/rpc-api/rxgen.xg b/kafs/rpc-api/rxgen.xg similarity index 100% rename from rpc-api/rxgen.xg rename to kafs/rpc-api/rxgen.xg diff --git a/rpc-api/rxkad.xg b/kafs/rpc-api/rxkad.xg similarity index 100% rename from rpc-api/rxkad.xg rename to kafs/rpc-api/rxkad.xg diff --git a/rpc-api/ubik.xg b/kafs/rpc-api/ubik.xg similarity index 100% rename from rpc-api/ubik.xg rename to kafs/rpc-api/ubik.xg diff --git a/rpc-api/vldb.xg b/kafs/rpc-api/vldb.xg similarity index 100% rename from rpc-api/vldb.xg rename to kafs/rpc-api/vldb.xg diff --git a/rpc-api/volumeserver.xg b/kafs/rpc-api/volumeserver.xg similarity index 100% rename from rpc-api/volumeserver.xg rename to kafs/rpc-api/volumeserver.xg diff --git a/rxgen.h b/kafs/rxgen.h similarity index 100% rename from rxgen.h rename to kafs/rxgen.h diff --git a/rxgen/emit_c_struct.py b/rxgen/emit_c_struct.py index 0c6da82..1bb071b 100644 --- a/rxgen/emit_c_struct.py +++ b/rxgen/emit_c_struct.py @@ -21,7 +21,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from rxgen_bits import * +from rxgen.rxgen_bits import * ############################################################################### # diff --git a/rxgen/emit_c_sync_funcs.py b/rxgen/emit_c_sync_funcs.py index c3a14dc..b386bc9 100644 --- a/rxgen/emit_c_sync_funcs.py +++ b/rxgen/emit_c_sync_funcs.py @@ -21,7 +21,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from rxgen_bits import * +from rxgen.rxgen_bits import * ############################################################################### # diff --git a/rxgen/emit_py_module.py b/rxgen/emit_py_module.py index d2277cb..aa669b1 100644 --- a/rxgen/emit_py_module.py +++ b/rxgen/emit_py_module.py @@ -21,7 +21,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from rxgen_bits import * +from rxgen.rxgen_bits import * ############################################################################### # @@ -87,7 +87,7 @@ def emit_py_module(o): o.pysrc("static PyModuleDef kafs_module = {\n") o.pysrc("\t.m_base = PyModuleDef_HEAD_INIT,\n") - o.pysrc("\t.m_name = \"kafs\",\n") + o.pysrc("\t.m_name = \"rpc\",\n") o.pysrc("\t.m_doc = \"AFS stuff.\",\n") o.pysrc("\t.m_size = -1,\n") o.pysrc("\t.m_methods = module_methods,\n") @@ -133,7 +133,7 @@ def emit_py_module(o): # Emit a base remote abort class that all others can be subclassed off o.pysrc("\n") - o.pysrc("\tkafs_remote_abort = PyErr_NewException(\"kafs.RemoteAbort\", NULL, NULL);\n") + o.pysrc("\tkafs_remote_abort = PyErr_NewException(\"rpc.RemoteAbort\", NULL, NULL);\n") o.pysrc("\tif (!kafs_remote_abort)\n") o.pysrc("\t\treturn NULL;\n") o.pysrc("\tPy_INCREF(kafs_remote_abort);\n") diff --git a/rxgen/emit_py_sync_funcs.py b/rxgen/emit_py_sync_funcs.py index e5dc380..61a7244 100644 --- a/rxgen/emit_py_sync_funcs.py +++ b/rxgen/emit_py_sync_funcs.py @@ -21,7 +21,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from rxgen_bits import * +from rxgen.rxgen_bits import * class decode_phase: def __init__(self, form="flat", size=0, xdr_size=0, name=None): diff --git a/rxgen/emit_py_types.py b/rxgen/emit_py_types.py index b3ba142..e57c66e 100644 --- a/rxgen/emit_py_types.py +++ b/rxgen/emit_py_types.py @@ -19,7 +19,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -from rxgen_bits import * +from rxgen.rxgen_bits import * ############################################################################### # diff --git a/rxgen/rxgen.py b/rxgen/rxgen.py index 277fdc4..96065c9 100755 --- a/rxgen/rxgen.py +++ b/rxgen/rxgen.py @@ -37,12 +37,12 @@ import sys import keyword import time import os -from rxgen_bits import * -from emit_c_struct import * -from emit_c_sync_funcs import * -from emit_py_types import * -from emit_py_sync_funcs import * -from emit_py_module import * +from rxgen.rxgen_bits import * +from rxgen.emit_c_struct import * +from rxgen.emit_c_sync_funcs import * +from rxgen.emit_py_types import * +from rxgen.emit_py_sync_funcs import * +from rxgen.emit_py_module import * xdr = None # Current context @@ -614,7 +614,7 @@ def parse(infile, debug=False): xdr.source = infile xdr.lineno = 0 - f = open(infile) + f = open(infile, encoding="utf-8") data = f.read() f.close() @@ -633,25 +633,21 @@ def parse(infile, debug=False): # # Section: main # -if __name__ == "__main__": - if len(sys.argv) < 2: - print("Usage: {:s} *".format(sys.argv[0])) - sys.exit(1) - - for f in sys.argv[1:]: +def run(files, out_file_prefix): + for f in files: if not parse(f): break xdr.finished_parsing() - o = file_generator(xdr) + o = file_generator(xdr, out_file_prefix) o.rxhdr("/* AUTOGENERATED */\n") #o.rxhdr("#define _XOPEN_SOURCE\n"; o.rxhdr("#include \n") o.rxhdr("#include \"rxgen.h\"\n") o.rxsrc("/* AUTOGENERATED */\n") - o.rxsrc("#include \"afs_xg.h\"\n") + o.rxsrc("#include \"rxgen_afs_xg.h\"\n") o.rxsrc("#include \n") o.rxsrc("#include \n") o.rxsrc("#include \n") @@ -664,13 +660,13 @@ if __name__ == "__main__": o.pyhdr("/* AUTOGENERATED */\n") o.pyhdr("#include \n") - o.pyhdr("#include \"afs_xg.h\"\n") + o.pyhdr("#include \"rxgen_afs_xg.h\"\n") o.pyhdr("#include \"py_rxgen.h\"\n") o.pysrc("/* AUTOGENERATED */\n") o.pysrc("#include \n") o.pysrc("#include \"structmember.h\"\n") - o.pysrc("#include \"afs_py.h\"\n") + o.pysrc("#include \"rxgen_afs_py.h\"\n") o.pysrc("#include \n") o.pysrc("\n") @@ -742,3 +738,13 @@ if __name__ == "__main__": emit_py_func_simple_sync_call(o, f) emit_py_module(o); + +# +# Drive the program if executed as a standalone process +# +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Usage: {:s} *".format(sys.argv[0])) + sys.exit(1) + + run(sys.argv[1:], "") diff --git a/rxgen/rxgen_bits.py b/rxgen/rxgen_bits.py index 6074c2c..9e0f548 100644 --- a/rxgen/rxgen_bits.py +++ b/rxgen/rxgen_bits.py @@ -516,12 +516,12 @@ class xdr_proc(token_base): ############################################################################### class file_generator: """File generator class""" - def __init__(self, xdr): + def __init__(self, xdr, prefix): self.xdr = xdr - self._rxhdr = open("afs_xg.h", "w", encoding="utf-8") - self._rxsrc = open("afs_xg.c", "w", encoding="utf-8") - self._pyhdr = open("afs_py.h", "w", encoding="utf-8") - self._pysrc = open("afs_py.c", "w", encoding="utf-8") + self._rxhdr = open(prefix + "afs_xg.h", "w", encoding="utf-8") + self._rxsrc = open(prefix + "afs_xg.c", "w", encoding="utf-8") + self._pyhdr = open(prefix + "afs_py.h", "w", encoding="utf-8") + self._pysrc = open(prefix + "afs_py.c", "w", encoding="utf-8") def rxhdr(self, *va): for i in va: diff --git a/setup.py b/setup.py index da52937..e2439be 100644 --- a/setup.py +++ b/setup.py @@ -1,31 +1,73 @@ from distutils.core import setup, Extension +from distutils.command.build_py import build_py as _build_py +import os +from glob import glob +import rxgen.rxgen as rxgen # Example that has an rpcgen implementation that is run from setup.py # # http://git.linux-nfs.org/?p=iisaman/pynfs.git;a=tree;h=14b3085dcce30d941a7839241779639b80e6298b;hb=14b3085dcce30d941a7839241779639b80e6298b +class build_py(_build_py): + """Specialized Python source builder that scans for .xg files""" + def build_packages(self): + # A copy from _build_py, with a call to expand_xdr added + for package in self.packages: + print("PKG", package) + package_dir = self.get_package_dir(package) + self.check_package(package, package_dir) + if package == "kafs": + self.expand_xdr(os.path.join(package_dir, "rpc-api"), + package_dir) + modules = self.find_package_modules(package, package_dir) + for (package_, module, module_file) in modules: + assert package == package_ + self.build_module(module, module_file, package) + + def expand_xdr(self, src, dst): + print("SRC", os.getcwd()) + xdr_files = glob(os.path.join(src, "*.h")) + glob(os.path.join(src, "*.xg")) + print("Run rxgen", " ".join(xdr_files)) + assert(xdr_files) + rxgen.run(xdr_files, os.path.join(dst, "rxgen_")) + setup(name = "kafs", version = "0.1", + packages = [ "kafs", + "kafs.lib", + "kafs.commands", + "kafs.commands.bos", + "kafs.commands.pts", + "kafs.commands.vos", + ], + scripts = [ "afs" ], description = "AFS filesystem management scripting and commands", + cmdclass = { "build_py": build_py }, + ext_modules = [Extension("kafs.rpc", + sources = [ "kafs/kafs.c", + "kafs/rxgen_afs_xg.c", + "kafs/rxgen_afs_py.c", + "kafs/py_passwd.c", + "kafs/py_rxgen.c", + "kafs/py_rxconn.c", + "kafs/py_rxsplit.c", + "kafs/af_rxrpc.c" + ], + extra_compile_args = [ + "-O0", + "-Wp,-U_FORTIFY_SOURCE", + ], + include_dirs = [ + "." + ], + libraries = [ + "k5crypto", + "krb5" + ] + )], + author = "David Howells", author_email = "dhowells@redhat.com", license = "GPLv2", - ext_modules = [Extension("kafs", - sources = [ "afs_xg.c", - "kafs.c", - "afs_py.c", - "py_passwd.c", - "py_rxgen.c", - "py_rxconn.c", - "py_rxsplit.c", - "af_rxrpc.c" - ], - extra_compile_args = [ - "-O0", - "-Wp,-U_FORTIFY_SOURCE", - ], - libraries = [ - "k5crypto", - "krb5" - ] - )]) + url = "http://git.infradead.org/users/dhowells/kafs-utils.git", + ) diff --git a/vl-test.py b/vl-test.py index 3e32fd2..1556bff 100755 --- a/vl-test.py +++ b/vl-test.py @@ -14,7 +14,7 @@ import sys; import getopt; import dns.resolver; -import kafs; +import kafs.rpc as rpc; cell = "grand.central.org"; volumes = [ "root.cell" ]; @@ -58,10 +58,10 @@ print("-- Probe for live VLDB servers --"); for vlserver in vladdrs: print("Trying", vlserver); - z_conn = kafs.rx_new_connection(vlserver, kafs.VL_PORT, kafs.VL_SERVICE); + z_conn = rpc.rx_new_connection(vlserver, rpc.VL_PORT, rpc.VL_SERVICE); try: - ret = kafs.VL_Probe(z_conn); + ret = rpc.VL_Probe(z_conn); break; except ConnectionRefusedError: pass; @@ -73,7 +73,7 @@ if not z_conn: # Look up each of the volumes in the list print("-- Look up the named volumes --"); for vol in volumes: - ret = kafs.VL_GetEntryByName(z_conn, vol); + ret = rpc.VL_GetEntryByName(z_conn, vol); vldb = ret.entry; servers = set(); @@ -89,10 +89,10 @@ for vol in volumes: # Pick an arbitrary server serving that volume and find out what volumes # that server serves - attributes = kafs.VldbListByAttributes(); - attributes.Mask = kafs.VLLIST_SERVER; + attributes = rpc.VldbListByAttributes(); + attributes.Mask = rpc.VLLIST_SERVER; attributes.server = servers.pop(); - ret = kafs.VL_ListAttributes(z_conn, attributes) + ret = rpc.VL_ListAttributes(z_conn, attributes) blkentries = ret.blkentries; for i in blkentries: -- 2.50.1