diff options
author | Simo Sorce <simo@redhat.com> | 2013-03-28 15:22:10 -0400 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2013-04-05 09:47:18 -0400 |
commit | bad4c85cde0c44366e3809677283bee61ef98f54 (patch) | |
tree | 5553d89dc74af0c93c1cf7d14e355cc455c0e720 | |
parent | 1cfac1ea9bd9c1f33283679df41ae9fb627448f7 (diff) | |
download | gss-proxy-tests.tar.gz gss-proxy-tests.tar.xz gss-proxy-tests.zip |
WIP: Use running user creds fo client side testingtests
-rw-r--r-- | proxy/tests/interposetest.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/proxy/tests/interposetest.c b/proxy/tests/interposetest.c index bb08536..7aea468 100644 --- a/proxy/tests/interposetest.c +++ b/proxy/tests/interposetest.c @@ -223,13 +223,19 @@ void run_client(struct aproc *data) uint32_t ret_min; char buffer[MAX_RPC_SIZE]; uint32_t buflen; + uid_t uid; gss_buffer_desc target_buf; gss_buffer_desc in_token = GSS_C_EMPTY_BUFFER; gss_buffer_desc out_token = GSS_C_EMPTY_BUFFER; + gss_name_t cli_name = GSS_C_NO_NAME; gss_name_t name = GSS_C_NO_NAME; gss_ctx_id_t ctx = GSS_C_NO_CONTEXT; gss_cred_id_t cred_handle = GSS_C_NO_CREDENTIAL; gss_buffer_desc msg_buf = GSS_C_EMPTY_BUFFER; + gss_buffer_desc out_name_buf = GSS_C_EMPTY_BUFFER; + gss_OID out_name_type = GSS_C_NO_OID; + gss_key_value_element_desc cs_cli_keytab = { "client_keytab", "client.keytab" }; + gss_key_value_set_desc cred_store = { 1, &cs_cli_keytab }; char *message = "SECRET"; int ret = -1; gss_iov_buffer_desc iov[2] = { { 0, { 0, NULL } }, { 0, { 0, NULL } } }; @@ -243,6 +249,47 @@ void run_client(struct aproc *data) DEBUG("%s behavior: %s\n", actor, getenv(GSSPROXY_BEHAVIOR_ENV)); + uid = getuid(); + ret = asprintf((char **)&target_buf.value, "%ld", (long)uid); + if (ret == -1) { + DEBUG("asprintf failed\n"); + goto done; + } + target_buf.length = ret + 1; + + ret_maj = gss_import_name(&ret_min, &target_buf, + GSS_C_NT_STRING_UID_NAME, &cli_name); + if (ret_maj) { + DEBUG("gss_import_name failed\n"); + goto done; + } + free(target_buf.value); + + ret_maj = gss_display_name(&ret_min, cli_name, + &out_name_buf, &out_name_type); + if (ret_maj) { + DEBUG("gssproxy returned an error: %d\n", ret_maj); + gp_log_failure(GSS_C_NO_OID, ret_maj, ret_min); + goto done; + } + fprintf(stdout, "Acquiring for: %s\n", (char *)out_name_buf.value); + + ret_maj = gss_acquire_cred_from(&ret_min, + cli_name, + GSS_C_INDEFINITE, + GSS_C_NULL_OID_SET, + GSS_C_INITIATE, + &cred_store, + &cred_handle, + NULL, + NULL); + if (ret_maj) { + DEBUG("gss acquire cred returned: %d\n", ret_maj); + gp_log_failure(GSS_C_NO_OID, ret_maj, ret_min); + goto done; + } + + target_buf.value = (void *)data->target; target_buf.length = strlen(data->target) + 1; |