[ZODB-Dev] zeopasswd.py fixups
Christian Reis
kiko at async.com.br
Mon Jul 28 18:12:16 EDT 2003
The current zeopasswd.py requires using a ZConfig object, and doesn't
support realms. It has an import problem, and one or two checks it could
do that it doesn't. The following patch fixes the current problems, adds
realm support, and provides options for setting manually the data you
require (no backwards-incompatible changes).
I've tested it lightly, seems to create correct databases for digest.
Jeremy, does it look good to go?
Index: ZEO/zeopasswd.py
===================================================================
RCS file: /cvs-repository/ZODB3/ZEO/zeopasswd.py,v
retrieving revision 1.2
diff -u -r1.2 zeopasswd.py
--- ZEO/zeopasswd.py 30 May 2003 19:20:57 -0000 1.2
+++ ZEO/zeopasswd.py 28 Jul 2003 20:11:21 -0000
@@ -17,12 +17,16 @@
usage: python zeopasswd.py [options] username [password]
-C/--configuration URL -- configuration file or URL
+-p/--protocol -- authentication protocol name
+-f/--filename -- authentication database filename
+-r/--realm -- authentication database realm
-d/--delete -- delete user instead of updating password
"""
import getopt
import getpass
import sys
+import os
import ZConfig
import ZEO
@@ -35,22 +39,41 @@
def options(args):
"""Password-specific options loaded from regular ZEO config file."""
- schema = ZConfig.loadSchema(os.path.join(os.path.dirname(ZEO.__file__),
- "schema.xml"))
-
try:
- options, args = getopt.getopt(args, "C:", ["configure="])
+ options, args = getopt.getopt(args, "dr:p:f:C:", ["configure=",
+ "protocol=",
+ "filename=",
+ "realm"])
except getopt.error, msg:
usage(msg)
config = None
- delete = False
+ delete = 0
+ auth_protocol = None
+ auth_db = ""
+ auth_realm = None
for k, v in options:
if k == '-C' or k == '--configure':
+ schemafile = os.path.join(os.path.dirname(ZEO.__file__),
+ "schema.xml")
+ schema = ZConfig.loadSchema(schemafile)
config, nil = ZConfig.loadConfig(schema, v)
if k == '-d' or k == '--delete':
- delete = True
- if config is None:
- usage("Must specifiy configuration file")
+ delete = 1
+ if k == '-p' or k == '--protocol':
+ auth_protocol = v
+ if k == '-f' or k == '--filename':
+ auth_db = v
+ if k == '-r' or k == '--realm':
+ auth_realm = v
+
+ if config is not None:
+ if auth_protocol or auth_db:
+ usage("Conflicting options; use either -C *or* -p and -f")
+ auth_protocol = config.zeo.authentication_protocol
+ auth_db = config.zeo.authentication_database
+ auth_realm = config.zeo.authentication_realm
+ elif not (auth_protocol and auth_db):
+ usage("Must specifiy configuration file or protocol and database")
password = None
if delete:
@@ -69,20 +92,21 @@
else:
username, password = args
- return config.zeo, delete, username, password
+ return auth_protocol, auth_db, auth_realm, delete, username, password
def main(args=None):
- options, delete, username, password = options(args)
- p = options.authentication_protocol
+ p, auth_db, auth_realm, delete, username, password = options(args)
if p is None:
usage("ZEO configuration does not specify authentication-protocol")
if p == "digest":
from ZEO.auth.auth_digest import DigestDatabase as Database
elif p == "srp":
from ZEO.auth.auth_srp import SRPDatabase as Database
- if options.authentication_database is None:
+ else:
+ raise ValueError, "Unknown database type %r" % p
+ if auth_db is None:
usage("ZEO configuration does not specify authentication-database")
- db = Database(options.authentication_database)
+ db = Database(auth_db, auth_realm)
if delete:
db.del_user(username)
else:
@@ -92,4 +116,5 @@
db.save()
if __name__ == "__main__":
- main(sys.argv)
+ main(sys.argv[1:])
+
Take care,
--
Christian Reis, Senior Engineer, Async Open Source, Brazil.
http://async.com.br/~kiko/ | [+55 16] 261 2331 | NMFL
More information about the ZODB-Dev
mailing list