From aabe9f0f4a1c64cdcafe4ae7eba418b81783a620 Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Thu, 22 Sep 2011 16:10:06 +0200 Subject: [PATCH] let client do unwrap, handle keytab for gss --- appl/test/common.c | 2 +- appl/test/gssapi_client.c | 16 ++++++++++++++++ appl/test/gssapi_server.c | 22 ++++++++++++++++++++++ appl/test/test_locl.h | 1 + 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/appl/test/common.c b/appl/test/common.c index dcb785efd..e0cf264af 100644 --- a/appl/test/common.c +++ b/appl/test/common.c @@ -38,7 +38,7 @@ RCSID("$Id$"); static int help_flag; static int version_flag; static char *port_str; -static char *keytab_str; +char *keytab_str; krb5_keytab keytab; char *service = SERVICE; char *mech = "krb5"; diff --git a/appl/test/gssapi_client.c b/appl/test/gssapi_client.c index 5fc564cea..ae54b9851 100644 --- a/appl/test/gssapi_client.c +++ b/appl/test/gssapi_client.c @@ -45,6 +45,7 @@ do_trans (int sock, gss_ctx_id_t context_hdl) gss_buffer_desc real_input_token, real_output_token; gss_buffer_t input_token = &real_input_token, output_token = &real_output_token; + int conf_flag; /* get_mic */ @@ -91,6 +92,21 @@ do_trans (int sock, gss_ctx_id_t context_hdl) write_token (sock, output_token); + read_token (sock, input_token); + + maj_stat = gss_unwrap (&min_stat, + context_hdl, + input_token, + output_token, + &conf_flag, + NULL); + if(GSS_ERROR(maj_stat)) + gss_err (1, min_stat, "gss_unwrap"); + + write_token (sock, output_token); + + gss_release_buffer(&min_stat, output_token); + return 0; } diff --git a/appl/test/gssapi_server.c b/appl/test/gssapi_server.c index 3c6654f57..6b3262ed7 100644 --- a/appl/test/gssapi_server.c +++ b/appl/test/gssapi_server.c @@ -128,6 +128,25 @@ process_it(int sock, gss_release_buffer (&min_stat, input_token); gss_release_buffer (&min_stat, output_token); + input_token->value = "hejhej"; + input_token->length = 6; + + maj_stat = gss_wrap (&min_stat, + context_hdl, + 1, + GSS_C_QOP_DEFAULT, + input_token, + NULL, + output_token); + + write_token (sock, output_token); + gss_release_buffer (&min_stat, output_token); + + read_token (sock, input_token); + + if (input_token->length != 6 && memcmp(input_token->value, "hejhej", 6) != 0) + errx(1, "invalid reply"); + return 0; } @@ -302,6 +321,9 @@ doit (int port, const char *service) int one = 1; int ret; + if (keytab_str) + gsskrb5_register_acceptor_identity(keytab_str); + sock = socket (AF_INET, SOCK_STREAM, 0); if (sock < 0) err (1, "socket"); diff --git a/appl/test/test_locl.h b/appl/test/test_locl.h index a2135c4fb..dba2bba1b 100644 --- a/appl/test/test_locl.h +++ b/appl/test/test_locl.h @@ -80,6 +80,7 @@ extern char *service; extern char *mech; +extern char *keytab_str; extern krb5_keytab keytab; extern int fork_flag; int server_setup(krb5_context*, int, char**);