Automated tests for kadm5_hook plugin
authorSam Hartman <hartmans@mit.edu>
Wed, 29 Sep 2010 21:29:20 +0000 (21:29 +0000)
committerSam Hartman <hartmans@mit.edu>
Wed, 29 Sep 2010 21:29:20 +0000 (21:29 +0000)
Include a k5test Python test and test plugin for the kadm5_hook interface.

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

src/configure.in
src/plugins/kadm5_hook/test/Makefile.in [new file with mode: 0644]
src/plugins/kadm5_hook/test/deps [new file with mode: 0644]
src/plugins/kadm5_hook/test/kadm5_hook_test.exports [new file with mode: 0644]
src/plugins/kadm5_hook/test/main.c [new file with mode: 0644]
src/tests/Makefile.in
src/tests/t_kadm5_hook.py [new file with mode: 0644]

index ec5672def7cf31c37be92f761ae4b8474e859e40..a5ec65cf8706302ca2f8f05ca48fa4a2d345dc9a 100644 (file)
@@ -1105,6 +1105,7 @@ dnl       ccapi ccapi/lib ccapi/lib/unix ccapi/server ccapi/server/unix ccapi/test
        kdc slave config-files gen-manpages include
 
        plugins/locate/python
+       plugins/kadm5_hook/test
        plugins/kdb/db2
        plugins/kdb/db2/libdb2
        plugins/kdb/db2/libdb2/hash
diff --git a/src/plugins/kadm5_hook/test/Makefile.in b/src/plugins/kadm5_hook/test/Makefile.in
new file mode 100644 (file)
index 0000000..883cd14
--- /dev/null
@@ -0,0 +1,37 @@
+mydir=plugins/kadm5_hook/test
+BUILDTOP=$(REL)..$(S)..$(S)..
+KRB5_RUN_ENV = @KRB5_RUN_ENV@
+KRB5_CONFIG_SETUP = KRB5_CONFIG=$(top_srcdir)/config-files/krb5.conf ; export KRB5_CONFIG ;
+PROG_LIBPATH=-L$(TOPLIBD)
+PROG_RPATH=$(KRB5_LIBDIR)
+DEFS=@DEFS@
+
+LOCALINCLUDES = -I../../../include/krb5 -I.
+
+LIBBASE=kadm5_hook_test
+LIBMAJOR=0
+LIBMINOR=0
+SO_EXT=.so
+RELDIR=../plugins/kadm5_hook/test
+# Depends on libk5crypto and libkrb5
+SHLIB_EXPDEPS = \
+       $(TOPLIBD)/libk5crypto$(SHLIBEXT) \
+       $(TOPLIBD)/libkrb5$(SHLIBEXT)
+SHLIB_EXPLIBS= -lkrb5 -lcom_err -lk5crypto $(SUPPORT_LIB) $(LIBS)
+
+SHLIB_DIRS=-L$(TOPLIBD)
+SHLIB_RDIRS=$(KRB5_LIBDIR)
+STOBJLISTS=OBJS.ST
+STLIBOBJS=main.o
+
+SRCS= $(srcdir)/main.c
+
+all-unix:: all-liblinks
+install-unix::
+clean-unix:: clean-libs clean-libobjs
+
+clean::
+       $(RM) lib$(LIBBASE)$(SO_EXT)
+
+@libnover_frag@
+@libobj_frag@
diff --git a/src/plugins/kadm5_hook/test/deps b/src/plugins/kadm5_hook/test/deps
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/plugins/kadm5_hook/test/kadm5_hook_test.exports b/src/plugins/kadm5_hook/test/kadm5_hook_test.exports
new file mode 100644 (file)
index 0000000..99d4359
--- /dev/null
@@ -0,0 +1 @@
+kadm5_hook_test_initvt
diff --git a/src/plugins/kadm5_hook/test/main.c b/src/plugins/kadm5_hook/test/main.c
new file mode 100644 (file)
index 0000000..e09e3c1
--- /dev/null
@@ -0,0 +1,105 @@
+/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/*
+ * plugins/kadm5_hook/test/main.c
+ *
+ * Copyright (C) 2010 by the Massachusetts Institute of Technology.
+ * All rights reserved.
+ *
+ * Export of this software from the United States of America may
+ *   require a specific license from the United States Government.
+ *   It is the responsibility of any person or organization contemplating
+ *   export to obtain such a license before exporting.
+ *
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ * distribute this software and its documentation for any purpose and
+ * without fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation, and that
+ * the name of M.I.T. not be used in advertising or publicity pertaining
+ * to distribution of the software without specific, written prior
+ * permission.  Furthermore if you modify this software you must label
+ * your software as modified software and not distribute it in such a
+ * fashion that it might be confused with the original M.I.T. software.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose.  It is provided "as is" without express
+ * or implied warranty.
+ *
+ */
+
+
+/**
+ * @file plugins/kadm5_hook/test/main.c
+ *
+ * This is a test kadm5_hook plugin. If enabled, it will print when kadm5_hook
+ * calls are made.
+ */
+
+#include <krb5/krb5.h>
+#include <krb5/kadm5_hook_plugin.h>
+#include <stdio.h>
+#include <assert.h>
+
+static void
+log_call(krb5_context context,
+         const char * function,
+         int stage,
+         krb5_principal princ)
+{
+    char *unparsed = NULL;
+    krb5_error_code ret;
+    ret = krb5_unparse_name(context, princ, &unparsed);
+    assert(ret == 0);
+    printf("%s: stage %s principal %s\n",
+           function,
+           (stage == KADM5_HOOK_STAGE_PRECOMMIT)? "precommit"
+           :"postcommit",
+           unparsed);
+    if (unparsed)
+        krb5_free_unparsed_name(context, unparsed);
+}
+
+static     kadm5_ret_t
+chpass(krb5_context context,
+       kadm5_hook_modinfo *modinfo,
+       int stage,
+       krb5_principal princ, krb5_boolean keepold,
+       int n_ks_tuple,
+       krb5_key_salt_tuple *ks_tuple,
+       const char *newpass)
+{
+    log_call(context, "chpass", stage, princ);
+    return 0;
+}
+
+
+static     kadm5_ret_t
+create(krb5_context context,
+       kadm5_hook_modinfo *modinfo,
+       int stage,
+       kadm5_principal_ent_t princ, long mask,
+       int n_ks_tuple,
+       krb5_key_salt_tuple *ks_tuple,
+       const char *newpass)
+{
+    log_call(context, "create", stage, princ->principal);
+    return 0;
+}
+
+
+krb5_error_code
+kadm5_hook_test_initvt(krb5_context context, int maj_ver, int min_ver,
+                       krb5_plugin_vtable vtable);
+
+krb5_error_code
+kadm5_hook_test_initvt(krb5_context context, int maj_ver, int min_ver,
+                       krb5_plugin_vtable vtable)
+{
+    kadm5_hook_vftable_1 *vt = (kadm5_hook_vftable_1 *) vtable;
+    if (maj_ver != 1)
+        return KRB5_PLUGIN_VER_NOTSUPP;
+
+    vt->name = "test";
+    vt->chpass = chpass;
+    vt->create = create;
+    return 0;
+}
index 1cf25f19a6fdc9837565690560e14e7958e061e7..924de2dbff9f969b9a7ad339adf29ccee68b67e0 100644 (file)
@@ -64,6 +64,8 @@ check-pytests::
        $(RUNPYTEST) $(srcdir)/t_general.py $(PYTESTFLAGS)
        $(RUNPYTEST) $(srcdir)/t_anonpkinit.py $(PYTESTFLAGS)
        $(RUNPYTEST) $(srcdir)/t_lockout.py $(PYTESTFLAGS)
+               $(RUNPYTEST) $(srcdir)/t_kadm5_hook.py $(PYTESTFLAGS)
+
 
 clean::
        $(RM) kdc.conf
diff --git a/src/tests/t_kadm5_hook.py b/src/tests/t_kadm5_hook.py
new file mode 100644 (file)
index 0000000..50f9a33
--- /dev/null
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+from k5test import *
+plugin = os.path.join(buildtop, "plugins", "kadm5_hook", "test", "kadm5_hook_test.so")
+
+hook_krb5_conf = {
+    'all' : {
+        "plugins" : {
+            "kadm5_hook": {
+                "module": "test:"+plugin
+                }
+            }
+        }
+    }
+
+realm = K5Realm(krb5_conf=hook_krb5_conf, create_user=False,
+                create_host=False)
+output = realm.run_kadminl ('addprinc -randkey test')
+if "create: stage precommit" not in output:
+    fail('kadm5_hook test output not found')
+
+
+
+success('kadm5_hook')