summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2012-01-30 14:52:44 -0500
committerSimo Sorce <simo@redhat.com>2012-02-01 17:56:34 -0500
commitb4db78e617380e5816767dfc269224431cdaf0f5 (patch)
tree10d479e2953ffb8db05866f973453d55e5d27320
parent6b02375bc7189acb11517063fc5acec3c1214ec8 (diff)
downloadgss-proxy-b4db78e617380e5816767dfc269224431cdaf0f5.tar.gz
gss-proxy-b4db78e617380e5816767dfc269224431cdaf0f5.tar.xz
gss-proxy-b4db78e617380e5816767dfc269224431cdaf0f5.zip
Add gp_memdup helper
-rw-r--r--proxy/src/gp_conv.c32
-rw-r--r--proxy/src/gp_conv.h1
2 files changed, 24 insertions, 9 deletions
diff --git a/proxy/src/gp_conv.c b/proxy/src/gp_conv.c
index f79000d..c0c7c70 100644
--- a/proxy/src/gp_conv.c
+++ b/proxy/src/gp_conv.c
@@ -29,13 +29,26 @@
#include <errno.h>
#include "gp_conv.h"
+void *gp_memdup(void *in, size_t len)
+{
+ void *out;
+
+ out = malloc(len);
+ if (!out) {
+ return NULL;
+ }
+
+ memcpy(out, in, len);
+
+ return out;
+}
+
int gp_conv_octet_string(size_t length, void *value, octet_string *out)
{
- out->octet_string_val = malloc(length);
+ out->octet_string_val = gp_memdup(value, length);
if (!out->octet_string_val) {
return ENOMEM;
}
- memcpy(out->octet_string_val, value, length);
out->octet_string_len = length;
return 0;
}
@@ -75,13 +88,13 @@ int gp_conv_gssx_to_oid_alloc(gssx_OID *in, gss_OID *out)
if (!o) {
return ENOMEM;
}
- o->length = in->octet_string_len;
- o->elements = malloc(o->length);
+ o->elements = gp_memdup(in->octet_string_val,
+ in->octet_string_len);
if (!o->elements) {
free(o);
return ENOMEM;
}
- memcpy(o->elements, in->octet_string_val, o->length);
+ o->length = in->octet_string_len;
return 0;
}
@@ -110,13 +123,13 @@ int gp_conv_gssx_to_buffer_alloc(gssx_buffer *in, gss_buffer_t *out)
return ENOMEM;
}
- o->length = in->octet_string_len;
- o->value = malloc(o->length);
+ o->value = gp_memdup(in->octet_string_val,
+ in->octet_string_len);
if (!o->value) {
free(o);
return ENOMEM;
}
- memcpy(o->value, in->octet_string_val, o->length);
+ o->length = in->octet_string_len;
*out = o;
return 0;
@@ -450,7 +463,8 @@ done:
int gp_copy_utf8string(utf8string *in, utf8string *out)
{
- out->utf8string_val = strdup(in->utf8string_val);
+ out->utf8string_val = gp_memdup(in->utf8string_val,
+ in->utf8string_len);
if (!out->utf8string_val) {
return ENOMEM;
}
diff --git a/proxy/src/gp_conv.h b/proxy/src/gp_conv.h
index fddeddd..343710d 100644
--- a/proxy/src/gp_conv.h
+++ b/proxy/src/gp_conv.h
@@ -29,6 +29,7 @@
#include <gssapi/gssapi.h>
#include "rpcgen/gss_proxy.h"
+void *gp_memdup(void *in, size_t len);
int gp_conv_octet_string(size_t length, void *value, octet_string *out);
int gp_conv_octet_string_alloc(size_t length, void *value,
octet_string **out);