diff options
| author | Greg Hudson <ghudson@mit.edu> | 2010-10-06 18:25:04 +0000 |
|---|---|---|
| committer | Greg Hudson <ghudson@mit.edu> | 2010-10-06 18:25:04 +0000 |
| commit | 014f8057c5328b3e39b5d8660a1ea1a98409006f (patch) | |
| tree | da9796d82a6d65d055f4762c411fbf395bb52f37 /src/tests | |
| parent | 5f2826f6d598a4dd45a55e111a07c0086fe1e38a (diff) | |
| download | krb5-014f8057c5328b3e39b5d8660a1ea1a98409006f.tar.gz krb5-014f8057c5328b3e39b5d8660a1ea1a98409006f.tar.xz krb5-014f8057c5328b3e39b5d8660a1ea1a98409006f.zip | |
Merge users/lhoward/sasl-gs2 to trunk
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@24436 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/gssapi/Makefile.in | 10 | ||||
| -rw-r--r-- | src/tests/gssapi/t_saslname.c | 188 |
2 files changed, 194 insertions, 4 deletions
diff --git a/src/tests/gssapi/Makefile.in b/src/tests/gssapi/Makefile.in index 2ba81de61..4002d001e 100644 --- a/src/tests/gssapi/Makefile.in +++ b/src/tests/gssapi/Makefile.in @@ -4,11 +4,11 @@ DEFINES = -DUSE_AUTOCONF_H PROG_LIBPATH=-L$(TOPLIBD) PROG_RPATH=$(KRB5_LIBDIR) -SRCS= $(srcdir)/t_imp_name.c $(srcdir)/t_s4u.c $(srcdir)/t_namingexts.c $(srcdir)/t_gssexts.c +SRCS= $(srcdir)/t_imp_name.c $(srcdir)/t_s4u.c $(srcdir)/t_namingexts.c $(srcdir)/t_gssexts.c $(srcdir)/t_saslname.c -OBJS= t_imp_name.o t_s4u.o t_namingexts.o t_gssexts.o t_spnego.o +OBJS= t_imp_name.o t_s4u.o t_namingexts.o t_gssexts.o t_spnego.o t_saslname.o -all:: t_imp_name t_s4u t_namingexts t_gssexts t_spnego +all:: t_imp_name t_s4u t_namingexts t_gssexts t_spnego t_saslname check-pytests:: t_spnego $(RUNPYTEST) $(srcdir)/t_gssapi.py $(PYTESTFLAGS) @@ -23,7 +23,9 @@ t_gssexts: t_gssexts.o $(GSS_DEPLIBS) $(KRB5_BASE_DEPLIBS) $(CC_LINK) -o t_gssexts t_gssexts.o $(GSS_LIBS) $(KRB5_BASE_LIBS) t_spnego: t_spnego.o $(GSS_DEPLIBS) $(KRB5_BASE_DEPLIBS) $(CC_LINK) -o t_spnego t_spnego.o $(GSS_LIBS) $(KRB5_BASE_LIBS) +t_saslname: t_saslname.o $(GSS_DEPLIBS) $(KRB5_BASE_DEPLIBS) + $(CC_LINK) -o t_saslname t_saslname.o $(GSS_LIBS) $(KRB5_BASE_LIBS) clean:: - $(RM) t_imp_name t_s4u t_namingexts t_gssexts t_spnego + $(RM) t_imp_name t_s4u t_namingexts t_gssexts t_spnego t_saslname diff --git a/src/tests/gssapi/t_saslname.c b/src/tests/gssapi/t_saslname.c new file mode 100644 index 000000000..40384f7dc --- /dev/null +++ b/src/tests/gssapi/t_saslname.c @@ -0,0 +1,188 @@ +/* -*- mode: c; indent-tabs-mode: nil -*- */ +/* + * Copyright 2009 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. + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <gssapi/gssapi.h> +#include <gssapi/gssapi_ext.h> + +static void +displayStatus_1(char *m, OM_uint32 code, int type) +{ + OM_uint32 maj_stat, min_stat; + gss_buffer_desc msg; + OM_uint32 msg_ctx; + + msg_ctx = 0; + while (1) { + maj_stat = gss_display_status(&min_stat, code, + type, GSS_C_NULL_OID, + &msg_ctx, &msg); + fprintf(stderr, "%s: %s\n", m, (char *)msg.value); + (void) gss_release_buffer(&min_stat, &msg); + + if (!msg_ctx) + break; + } +} + +static void +displayStatus(char *msg, OM_uint32 maj_stat, OM_uint32 min_stat) +{ + displayStatus_1(msg, maj_stat, GSS_C_GSS_CODE); + displayStatus_1(msg, min_stat, GSS_C_MECH_CODE); +} + +static +OM_uint32 dumpMechAttrs(OM_uint32 *minor, gss_OID mech) +{ + OM_uint32 major, tmpMinor; + gss_OID_set mech_attrs = GSS_C_NO_OID_SET; + gss_OID_set known_attrs = GSS_C_NO_OID_SET; + size_t i; + + major = gss_inquire_attrs_for_mech(minor, mech, &mech_attrs, &known_attrs); + if (GSS_ERROR(major)) { + displayStatus("gss_inquire_attrs_for_mech", major, *minor); + return major; + } + + printf("Mech attrs: "); + + for (i = 0; i < mech_attrs->count; i++) { + gss_buffer_desc name = GSS_C_EMPTY_BUFFER; + gss_buffer_desc short_desc = GSS_C_EMPTY_BUFFER; + gss_buffer_desc long_desc = GSS_C_EMPTY_BUFFER; + + major = gss_display_mech_attr(minor, &mech_attrs->elements[i], + &name, &short_desc, &long_desc); + if (GSS_ERROR(major)) { + displayStatus("gss_display_mech_attr", major, *minor); + continue; + } + printf("%.*s ", (int)name.length, (char *)name.value); + gss_release_buffer(minor, &name); + gss_release_buffer(minor, &short_desc); + gss_release_buffer(minor, &long_desc); + } + printf("\n"); + + printf("Known attrs: "); + + for (i = 0; i < known_attrs->count; i++) { + gss_buffer_desc name = GSS_C_EMPTY_BUFFER; + gss_buffer_desc short_desc = GSS_C_EMPTY_BUFFER; + gss_buffer_desc long_desc = GSS_C_EMPTY_BUFFER; + + major = gss_display_mech_attr(minor, &known_attrs->elements[i], + &name, &short_desc, &long_desc); + if (GSS_ERROR(major)) { + displayStatus("gss_display_mech_attr", major, *minor); + continue; + } + printf("%.*s ", (int)name.length, (char *)name.value); + gss_release_buffer(minor, &name); + gss_release_buffer(minor, &short_desc); + gss_release_buffer(minor, &long_desc); + } + printf("\n"); + + gss_release_oid_set(&tmpMinor, &mech_attrs); + gss_release_oid_set(&tmpMinor, &known_attrs); + + return GSS_S_COMPLETE; +} + +int main(int argc, char *argv[]) +{ + gss_OID_set mechs; + OM_uint32 major, minor; + size_t i; + + major = gss_indicate_mechs(&minor, &mechs); + if (GSS_ERROR(major)) { + displayStatus("gss_indicate_mechs", major, minor); + return major; + } + + for (i = 0; i < mechs->count; i++) { + gss_buffer_desc oidstr = GSS_C_EMPTY_BUFFER; + gss_buffer_desc sasl_mech_name = GSS_C_EMPTY_BUFFER; + gss_buffer_desc mech_name = GSS_C_EMPTY_BUFFER; + gss_buffer_desc mech_description = GSS_C_EMPTY_BUFFER; + gss_OID oid = GSS_C_NO_OID; + + major = gss_oid_to_str(&minor, &mechs->elements[i], &oidstr); + if (GSS_ERROR(major)) + continue; + + major = gss_inquire_saslname_for_mech(&minor, &mechs->elements[i], + &sasl_mech_name, &mech_name, + &mech_description); + if (GSS_ERROR(major)) { + gss_release_buffer(&minor, &oidstr); + continue; + } + + printf("-------------------------------------------------------------" + "-----------------\n"); + printf("OID : %.*s\n", (int)oidstr.length, + (char *)oidstr.value); + printf("SASL mech : %.*s\n", (int)sasl_mech_name.length, + (char *)sasl_mech_name.value); + printf("Mech name : %.*s\n", (int)mech_name.length, + (char *)mech_name.value); + printf("Mech desc : %.*s\n", (int)mech_description.length, + (char *)mech_description.value); + dumpMechAttrs(&minor, &mechs->elements[i]); + printf("-------------------------------------------------------------" + "-----------------\n"); + + if (GSS_ERROR(gss_inquire_mech_for_saslname(&minor, &sasl_mech_name, + &oid))) { + displayStatus("gss_inquire_mech_for_saslname", major, minor); + } else if (oid == GSS_C_NO_OID || + (oid->length != mechs->elements[i].length && + memcmp(oid->elements, mechs->elements[i].elements, + oid->length) != 0)) { + gss_release_buffer(&minor, &oidstr); + (void) gss_oid_to_str(&minor, oid, &oidstr); + fprintf(stderr, "Got different OID %.*s for mechanism %.*s\n", + (int)oidstr.length, (char *)oidstr.value, + (int)sasl_mech_name.length, (char *)sasl_mech_name.value); + } + gss_release_buffer(&minor, &oidstr); + gss_release_buffer(&minor, &sasl_mech_name); + gss_release_buffer(&minor, &mech_name); + gss_release_buffer(&minor, &mech_description); + } + + gss_release_oid_set(&minor, &mechs); + + return GSS_ERROR(major) ? 1 : 0; +} |
