summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2013-03-28 15:22:10 -0400
committerSimo Sorce <simo@redhat.com>2013-04-05 09:47:18 -0400
commitbad4c85cde0c44366e3809677283bee61ef98f54 (patch)
tree5553d89dc74af0c93c1cf7d14e355cc455c0e720
parent1cfac1ea9bd9c1f33283679df41ae9fb627448f7 (diff)
downloadgss-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.c47
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;