summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGünther Deschner <gdeschner@redhat.com>2012-08-21 12:35:30 +0200
committerSimo Sorce <simo@redhat.com>2012-08-28 08:25:49 +0200
commitf8ee5e1c9a587ce44d5cf56990540a66b9a707a6 (patch)
treeb9653c126b5e13d5b2be46fd894662b2fd723741
parentb856e3501d1c25f48db69826ba09c996445d75d0 (diff)
downloadgss-proxy-f8ee5e1c9a587ce44d5cf56990540a66b9a707a6.tar.gz
gss-proxy-f8ee5e1c9a587ce44d5cf56990540a66b9a707a6.tar.xz
gss-proxy-f8ee5e1c9a587ce44d5cf56990540a66b9a707a6.zip
Add test code for gpm_(get|verify)_mic.
-rw-r--r--proxy/tests/cli_srv_comm.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/proxy/tests/cli_srv_comm.c b/proxy/tests/cli_srv_comm.c
index a866e8a..d0b7f4a 100644
--- a/proxy/tests/cli_srv_comm.c
+++ b/proxy/tests/cli_srv_comm.c
@@ -192,6 +192,8 @@ struct athread {
char *target;
};
+#define CLI_MSG "I am the buffer"
+
void *client_thread(void *pvt)
{
struct athread *data;
@@ -206,6 +208,7 @@ void *client_thread(void *pvt)
gss_ctx_id_t ctx = GSS_C_NO_CONTEXT;
gss_cred_id_t cred_handle = GSS_C_NO_CREDENTIAL;
int ret = 0;
+ gss_buffer_desc msg_buf = GSS_C_EMPTY_BUFFER;
data = (struct athread *)pvt;
@@ -266,6 +269,33 @@ void *client_thread(void *pvt)
} while (ret_maj == GSS_S_CONTINUE_NEEDED);
+ memcpy(buffer, CLI_MSG, sizeof(CLI_MSG));
+ msg_buf.value = (void *)buffer;
+ msg_buf.length = sizeof(CLI_MSG);
+
+ ret_maj = gpm_get_mic(&ret_min, ctx,
+ GSS_C_QOP_DEFAULT,
+ &msg_buf, &out_token);
+ if (ret_maj) {
+ fprintf(stderr, "gpm_get_mic failed: %d\n", ret_maj);
+ gp_log_failure(GSS_C_NO_OID, ret_maj, ret_min);
+ goto done;
+ }
+
+ /* send msg to server */
+ ret = gp_send_buffer(data->srv_pipe[1],
+ msg_buf.value, msg_buf.length);
+ if (ret) {
+ goto done;
+ }
+
+ /* send signature to server */
+ ret = gp_send_buffer(data->srv_pipe[1],
+ out_token.value, out_token.length);
+ if (ret) {
+ goto done;
+ }
+
fprintf(stdout, "client: Success!\n");
done:
@@ -306,6 +336,7 @@ void *server_thread(void *pvt)
gss_name_t canon_name = GSS_C_NO_NAME;
gss_buffer_desc out_name_buf = GSS_C_EMPTY_BUFFER;
gss_OID out_name_type = GSS_C_NO_OID;
+ gss_buffer_desc msg_token = GSS_C_EMPTY_BUFFER;
int ret;
data = (struct athread *)pvt;
@@ -446,6 +477,35 @@ void *server_thread(void *pvt)
}
}
+ /* receive message from client */
+ ret = gp_recv_buffer(data->srv_pipe[0], buffer, &buflen);
+ if (ret) {
+ fprintf(stdout, "Failed to get data from client!\n");
+ goto done;
+ }
+ in_token.value = buffer;
+ in_token.length = buflen;
+
+ /* receive signature from client */
+ ret = gp_recv_buffer(data->srv_pipe[0],
+ &buffer[in_token.length], &buflen);
+ if (ret) {
+ fprintf(stdout, "Failed to get data from client!\n");
+ goto done;
+ }
+ msg_token.value = &buffer[in_token.length];
+ msg_token.length = buflen;
+
+ ret_maj = gpm_verify_mic(&ret_min, context_handle,
+ &in_token, &msg_token, NULL);
+ if (ret_maj) {
+ fprintf(stderr, "gpm_verify_mic failed: %d\n", ret_maj);
+ gp_log_failure(GSS_C_NO_OID, ret_maj, ret_min);
+ goto done;
+ }
+
+ fprintf(stdout, "Received valid msg from client: [%s]\n", buffer);
+
done:
gpm_release_name(&ret_min, &src_name);
gpm_release_buffer(&ret_min, &out_token);