diff options
author | Greg Hudson <ghudson@mit.edu> | 2012-09-13 12:27:04 -0400 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2012-09-13 12:27:16 -0400 |
commit | d81d68ebd8ade84e240f7d95edf0a562f6931ea2 (patch) | |
tree | 81d13948ae392081571fa97f60d001cc9cf5a598 /src/tests/gssapi/t_ccselect.c | |
parent | d9af383d069b571457849dea77dbef01ccb55370 (diff) | |
download | krb5-d81d68ebd8ade84e240f7d95edf0a562f6931ea2.tar.gz krb5-d81d68ebd8ade84e240f7d95edf0a562f6931ea2.tar.xz krb5-d81d68ebd8ade84e240f7d95edf0a562f6931ea2.zip |
Tidy up GSSAPI test programs
Factor out some common functions used by multiple test programs. Use
a common argument format for importing names (p:princname,
h:hostbasedname, or u:username) and adjust the Python tests to match
it. Use more consistent conventions in test programs and fix some
coding style issues. Normalize how the test programs are built.
Diffstat (limited to 'src/tests/gssapi/t_ccselect.c')
-rw-r--r-- | src/tests/gssapi/t_ccselect.c | 79 |
1 files changed, 10 insertions, 69 deletions
diff --git a/src/tests/gssapi/t_ccselect.c b/src/tests/gssapi/t_ccselect.c index 620ce1c4b..05b0a844a 100644 --- a/src/tests/gssapi/t_ccselect.c +++ b/src/tests/gssapi/t_ccselect.c @@ -28,7 +28,7 @@ #include <stdlib.h> #include <string.h> -#include <gssapi/gssapi_krb5.h> +#include "common.h" /* * Test program for client credential selection, intended to be run from a @@ -43,40 +43,11 @@ * Usage: ./t_ccselect [targetprinc|gss:service@host] [initiatorprinc|-] */ -static void -display_status_1(const 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 -gsserr(const char *msg, OM_uint32 maj_stat, OM_uint32 min_stat) -{ - display_status_1(msg, maj_stat, GSS_C_GSS_CODE); - display_status_1(msg, min_stat, GSS_C_MECH_CODE); - exit(1); -} - int main(int argc, char *argv[]) { OM_uint32 minor, major; gss_cred_id_t initiator_cred = GSS_C_NO_CREDENTIAL; - gss_buffer_desc buf; gss_name_t target_name, initiator_name = GSS_C_NO_NAME; gss_name_t real_initiator_name; gss_buffer_desc token, tmp, namebuf; @@ -84,47 +55,20 @@ main(int argc, char *argv[]) gss_ctx_id_t acceptor_context = GSS_C_NO_CONTEXT; if (argc < 2 || argc > 3) { - fprintf(stderr, "Usage: %s targetprinc [initiatorprinc|-]\n", argv[0]); + fprintf(stderr, "Usage: %s targetname [initiatorname|-]\n", argv[0]); return 1; } - /* Import the target name. */ - if (strncmp(argv[1], "gss:", 4) == 0) { - /* Import as host-based service. */ - buf.value = argv[1] + 4; - buf.length = strlen((char *)buf.value); - major = gss_import_name(&minor, &buf, - (gss_OID)GSS_C_NT_HOSTBASED_SERVICE, - &target_name); - } else { - /* Import as krb5 principal name. */ - buf.value = argv[1]; - buf.length = strlen((char *)buf.value); - major = gss_import_name(&minor, &buf, - (gss_OID)GSS_KRB5_NT_PRINCIPAL_NAME, - &target_name); - } - if (GSS_ERROR(major)) - gsserr("gss_import_name(target_name)", major, minor); + target_name = import_name(argv[1]); - /* Import the initiator name as a krb5 principal and get creds, maybe. */ if (argc >= 3) { - if (strcmp(argv[2], "-") != 0) { - buf.value = argv[2]; - buf.length = strlen((char *)buf.value); - major = gss_import_name(&minor, &buf, - (gss_OID)GSS_KRB5_NT_PRINCIPAL_NAME, - &initiator_name); - if (GSS_ERROR(major)) - gsserr("gss_import_name(initiator_name)", major, minor); - } - - /* Get acceptor cred. */ + /* Get initiator cred. */ + if (strcmp(argv[2], "-") != 0) + initiator_name = import_name(argv[2]); major = gss_acquire_cred(&minor, initiator_name, GSS_C_INDEFINITE, GSS_C_NO_OID_SET, GSS_C_INITIATE, &initiator_cred, NULL, NULL); - if (GSS_ERROR(major)) - gsserr("gss_acquire_cred", major, minor); + check_gsserr("gss_acquire_cred", major, minor); } @@ -136,8 +80,7 @@ main(int argc, char *argv[]) GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG, GSS_C_INDEFINITE, GSS_C_NO_CHANNEL_BINDINGS, GSS_C_NO_BUFFER, NULL, &token, NULL, NULL); - if (GSS_ERROR(major)) - gsserr("gss_init_sec_context", major, minor); + check_gsserr("gss_init_sec_context", major, minor); /* Pass the token to gss_accept_sec_context. */ tmp.value = NULL; @@ -147,14 +90,12 @@ main(int argc, char *argv[]) GSS_C_NO_CHANNEL_BINDINGS, &real_initiator_name, NULL, &tmp, NULL, NULL, NULL); - if (major != GSS_S_COMPLETE) - gsserr("gss_accept_sec_context", major, minor); + check_gsserr("gss_accept_sec_context", major, minor); namebuf.value = NULL; namebuf.length = 0; major = gss_display_name(&minor, real_initiator_name, &namebuf, NULL); - if (GSS_ERROR(major)) - gsserr("gss_display_name(initiator)", major, minor); + check_gsserr("gss_display_name(initiator)", major, minor); printf("%.*s\n", (int)namebuf.length, (char *)namebuf.value); (void)gss_release_name(&minor, &target_name); |