From c6c9c26c11eb99790d0c1a59ec0a56a524158a41 Mon Sep 17 00:00:00 2001 From: Sam Hartman Date: Wed, 29 Sep 2010 21:29:20 +0000 Subject: [PATCH] Automated tests for kadm5_hook plugin 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 | 1 + src/plugins/kadm5_hook/test/Makefile.in | 37 ++++++ src/plugins/kadm5_hook/test/deps | 0 .../kadm5_hook/test/kadm5_hook_test.exports | 1 + src/plugins/kadm5_hook/test/main.c | 105 ++++++++++++++++++ src/tests/Makefile.in | 2 + src/tests/t_kadm5_hook.py | 23 ++++ 7 files changed, 169 insertions(+) create mode 100644 src/plugins/kadm5_hook/test/Makefile.in create mode 100644 src/plugins/kadm5_hook/test/deps create mode 100644 src/plugins/kadm5_hook/test/kadm5_hook_test.exports create mode 100644 src/plugins/kadm5_hook/test/main.c create mode 100644 src/tests/t_kadm5_hook.py diff --git a/src/configure.in b/src/configure.in index ec5672def..a5ec65cf8 100644 --- a/src/configure.in +++ b/src/configure.in @@ -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 index 000000000..883cd14e2 --- /dev/null +++ b/src/plugins/kadm5_hook/test/Makefile.in @@ -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 index 000000000..e69de29bb 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 index 000000000..99d435994 --- /dev/null +++ b/src/plugins/kadm5_hook/test/kadm5_hook_test.exports @@ -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 index 000000000..e09e3c1de --- /dev/null +++ b/src/plugins/kadm5_hook/test/main.c @@ -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 +#include +#include +#include + +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; +} diff --git a/src/tests/Makefile.in b/src/tests/Makefile.in index 1cf25f19a..924de2dbf 100644 --- a/src/tests/Makefile.in +++ b/src/tests/Makefile.in @@ -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 index 000000000..50f9a33f3 --- /dev/null +++ b/src/tests/t_kadm5_hook.py @@ -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') -- 2.26.2