[Zodb-checkins] CVS: ZODB3/ZEO - zeopasswd.py:1.3

Christian Reis kiko at async.com.br
Wed Jul 30 17:40:01 EDT 2003


Update of /cvs-repository/ZODB3/ZEO
In directory cvs.zope.org:/tmp/cvs-serv29033/ZEO

Modified Files:
	zeopasswd.py 
Log Message:
Assorted fixes to zeopasswd.py: support realms, support ZConfig-free
usage, python2.1 fixes, and fix one or two bugs (missing import, lacking
check for invalid database type, etc)


=== ZODB3/ZEO/zeopasswd.py 1.2 => 1.3 ===
--- ZODB3/ZEO/zeopasswd.py:1.2	Fri May 30 15:20:57 2003
+++ ZODB3/ZEO/zeopasswd.py	Wed Jul 30 16:39:54 2003
@@ -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:])
+




More information about the Zodb-checkins mailing list