Add k5test.py helpers for running kadmin
authorGreg Hudson <ghudson@mit.edu>
Thu, 26 Apr 2012 04:34:15 +0000 (04:34 +0000)
committerGreg Hudson <ghudson@mit.edu>
Thu, 26 Apr 2012 04:34:15 +0000 (04:34 +0000)
Add K5Realm.prep_kadmin() to create a ccache and K5Realm.run_kadmin()
to run a kadmin query using it.  Modify t_stringattr.py to use these
helpers instead of its own.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25826 dc483132-0cff-0310-8789-dd5450dbe970

src/tests/t_stringattr.py
src/util/k5test.py

index 3f5c506df83cde392e5920b9009bece8aa33be37..459151fa9acd01e14acd80924a7c0c71fa4b6861 100644 (file)
 #!/usr/bin/python
 from k5test import *
 
-def run_kadmin(query):
-    global realm
-    return realm.run_as_master([kadmin, '-c', realm.ccache, '-q', query])
-
 realm = K5Realm(start_kadmind=True, create_host=False, get_creds=False)
 
-realm.kinit(realm.admin_princ, password('admin'), flags=['-S', 'kadmin/admin'])
+realm.prep_kadmin()
 
-output = run_kadmin('getstrs user')
+output = realm.run_kadmin('getstrs user')
 if '(No string attributes.)' not in output:
     fail('Empty attribute query')
 
-output = run_kadmin('setstr user attr1 value1')
+output = realm.run_kadmin('setstr user attr1 value1')
 if 'Attribute set for principal' not in output:
     fail('Setting attr1')
-output = run_kadmin('setstr user attr2 value2')
+output = realm.run_kadmin('setstr user attr2 value2')
 if 'Attribute set for principal' not in output:
     fail('Setting attr2')
-output = run_kadmin('delstr user attr1')
+output = realm.run_kadmin('delstr user attr1')
 if 'Attribute removed from principal' not in output:
     fail('Deleting attr1')
-output = run_kadmin('setstr user attr3 value3')
+output = realm.run_kadmin('setstr user attr3 value3')
 if 'Attribute set for principal' not in output:
     fail('Setting attr3')
 
-output = run_kadmin('getstrs user')
+output = realm.run_kadmin('getstrs user')
 if 'attr2: value2' not in output or 'attr3: value3' not in output or \
         'attr1:' in output:
     fail('Final attribute query')
index 0d040529090613dbf2c63602028c53504193b637..6097c9be9644dcafa487eba37c6eb04296e04356 100644 (file)
@@ -279,6 +279,15 @@ Scripts may use the following realm methods and attributes:
 
 * realm.run_kadminl(query): Run the specified query in kadmin.local.
 
+* realm.prep_kadmin(princname=None, password=None, flags=[]): Populate
+  realm.kadmin_ccache with a ticket which can be used to run kadmin.
+  If princname is not specified, realm.admin_princ and its default
+  password will be used.
+
+* realm.run_kadmin(query, **keywords): Run the specified query in
+  kadmin, using realm.kadmin_ccache to authenticate.  Accepts the same
+  keyword arguments as run_as_client.
+
 * realm.realm: The realm's name.
 
 * realm.testdir: The realm's storage directory (absolute path).
@@ -301,6 +310,9 @@ Scripts may use the following realm methods and attributes:
   credentials for user unless disabled by the realm construction
   options.
 
+* realm.kadmin_ccache: The ccache file initialized by prep_kadmin and
+  used by run_kadmin.
+
 * Attributes for the client, server, master, and slave environments.
   These environments are extensions of os.environ.
   - realm.env_client
@@ -689,6 +701,7 @@ class K5Realm(object):
         self.krbtgt_princ = 'krbtgt/%s@%s' % (self.realm, self.realm)
         self.keytab = os.path.join(self.testdir, 'keytab')
         self.ccache = os.path.join(self.testdir, 'ccache')
+        self.kadmin_ccache = os.path.join(self.testdir, 'kadmin_ccache')
         self._krb5_conf = _cfg_merge(_default_krb5_conf, krb5_conf)
         self._kdc_conf = _cfg_merge(_default_kdc_conf, kdc_conf)
         self._kdc_proc = None
@@ -917,6 +930,18 @@ class K5Realm(object):
         global kadmin_local
         return self.run_as_master([kadmin_local, '-q', query])
 
+    def prep_kadmin(self, princname=None, pw=None, flags=[]):
+        if princname is None:
+            princname = self.admin_princ
+            pw = password('admin')
+        return self.kinit(princname, pw,
+                          flags=['-S', 'kadmin/admin',
+                                 '-c', self.kadmin_ccache] + flags)
+
+    def run_kadmin(self, query, **keywords):
+        return self.run_as_client([kadmin, '-c', self.kadmin_ccache,
+                                   '-q', query], **keywords)
+
 
 def multipass_realms(**keywords):
     global _current_pass, _passes, testpass