This is an automated email from the git hooks/post-receive script.
rharwood pushed a commit to branch master
in repository gssproxy.
commit dedcd443d2b1d67181a155e440e75eaae529bf46
Author: Simo Sorce <simo(a)redhat.com>
Date: Tue Feb 28 12:09:52 2017 -0500
Add a helper function to pack options
Signed-off-by: Simo Sorce <simo(a)redhat.com>
Reviewed-by: Robbie Harwood <rharwood(a)redhat.com>
---
proxy/src/client/gpm_acquire_cred.c | 27 ++++++-----------------
proxy/src/gp_common.h | 4 ++++
proxy/src/gp_util.c | 43 +++++++++++++++++++++++++++++++++++++
3 files changed, 54 insertions(+), 20 deletions(-)
diff --git a/proxy/src/client/gpm_acquire_cred.c b/proxy/src/client/gpm_acquire_cred.c
index a2ac068..632973d 100644
--- a/proxy/src/client/gpm_acquire_cred.c
+++ b/proxy/src/client/gpm_acquire_cred.c
@@ -90,29 +90,16 @@ OM_uint32 gpm_acquire_cred(OM_uint32 *minor_status,
/* impersonate calls use input cred and a special option */
if (impersonate) {
- gssx_option *opt;
- arg->options.options_val = calloc(1, sizeof(gssx_option));
- if (!arg->options.options_val) {
+ ret_min = gp_add_option(&arg->options.options_val,
+ &arg->options.options_len,
+ ACQUIRE_TYPE_OPTION,
+ sizeof(ACQUIRE_TYPE_OPTION),
+ ACQUIRE_IMPERSONATE_NAME,
+ sizeof(ACQUIRE_IMPERSONATE_NAME));
+ if (ret_min) {
ret_maj = GSS_S_FAILURE;
- ret_min = ENOMEM;
goto done;
}
- arg->options.options_len = 1;
- opt = &arg->options.options_val[0];
- opt->option.octet_string_val = strdup(ACQUIRE_TYPE_OPTION);
- if (!opt->option.octet_string_val) {
- ret_maj = GSS_S_FAILURE;
- ret_min = ENOMEM;
- goto done;
- }
- opt->option.octet_string_len = sizeof(ACQUIRE_TYPE_OPTION);
- opt->value.octet_string_val = strdup(ACQUIRE_IMPERSONATE_NAME);
- if (!opt->value.octet_string_val) {
- ret_maj = GSS_S_FAILURE;
- ret_min = ENOMEM;
- goto done;
- }
- opt->value.octet_string_len = sizeof(ACQUIRE_IMPERSONATE_NAME);
}
/* execute proxy request */
diff --git a/proxy/src/gp_common.h b/proxy/src/gp_common.h
index 5b9b9b2..9f23f3e 100644
--- a/proxy/src/gp_common.h
+++ b/proxy/src/gp_common.h
@@ -117,4 +117,8 @@ do { \
#define ACQUIRE_TYPE_OPTION "acquire_type"
#define ACQUIRE_IMPERSONATE_NAME "impersonate_name"
+uint32_t gp_add_option(gssx_option **options_val, u_int *options_len,
+ const void *option, size_t option_len,
+ const void *value, size_t value_len);
+
#endif /* _GP_COMMON_H_ */
diff --git a/proxy/src/gp_util.c b/proxy/src/gp_util.c
index ff1cfed..a91f392 100644
--- a/proxy/src/gp_util.c
+++ b/proxy/src/gp_util.c
@@ -143,3 +143,46 @@ ssize_t gp_safe_write(int fd, const void *buf, size_t count)
return len;
}
+
+uint32_t gp_add_option(gssx_option **options_val, u_int *options_len,
+ const void *option, size_t option_len,
+ const void *value, size_t value_len)
+{
+ gssx_option opt = { 0 };
+ gssx_option *out;
+ uint32_t ret;
+
+ opt.option.octet_string_val = malloc(option_len);
+ if (!opt.option.octet_string_val) {
+ ret = ENOMEM;
+ goto done;
+ }
+ memcpy(opt.option.octet_string_val, option, option_len);
+ opt.option.octet_string_len = option_len;
+
+ opt.value.octet_string_val = malloc(value_len);
+ if (!opt.value.octet_string_val) {
+ ret = ENOMEM;
+ goto done;
+ }
+ memcpy(opt.value.octet_string_val, value, value_len);
+ opt.value.octet_string_len = value_len;
+
+ out = realloc(*options_val, (*options_len + 1) * sizeof(gssx_option));
+ if (!out) {
+ ret = ENOMEM;
+ goto done;
+ }
+
+ out[*options_len] = opt;
+ *options_val = out;
+ (*options_len)++;
+
+ ret = 0;
+
+done:
+ if (ret) {
+ xdr_free((xdrproc_t)xdr_gssx_option, (char *)&opt);
+ }
+ return ret;
+}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.