summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2012-05-30 11:09:56 -0400
committerSimo Sorce <simo@redhat.com>2012-07-26 16:27:44 -0400
commit8e4fa81d3261bf65baff0e86e8ef0c65f81f347b (patch)
tree57eb81ecf1950fca079acb3636b8a37b2f0b2946
parentd9cf94921760c84a799491f929e2ffd2649dfb65 (diff)
downloadgss-proxy-8e4fa81d3261bf65baff0e86e8ef0c65f81f347b.tar.gz
gss-proxy-8e4fa81d3261bf65baff0e86e8ef0c65f81f347b.tar.xz
gss-proxy-8e4fa81d3261bf65baff0e86e8ef0c65f81f347b.zip
Fix segfaults when NULL buffer is passed in.
-rw-r--r--proxy/src/gp_rpc_init_sec_context.c8
-rw-r--r--proxy/src/mechglue/gpm_init_sec_context.c8
2 files changed, 11 insertions, 5 deletions
diff --git a/proxy/src/gp_rpc_init_sec_context.c b/proxy/src/gp_rpc_init_sec_context.c
index 474ace0..075dcbb 100644
--- a/proxy/src/gp_rpc_init_sec_context.c
+++ b/proxy/src/gp_rpc_init_sec_context.c
@@ -41,6 +41,7 @@ int gp_init_sec_context(struct gssproxy_ctx *gpctx,
struct gss_channel_bindings_struct cbs;
gss_channel_bindings_t pcbs;
gss_buffer_desc ibuf;
+ gss_buffer_t pibuf;
gss_OID actual_mech_type = GSS_C_NO_OID;
gss_buffer_desc obuf = GSS_C_EMPTY_BUFFER;
uint32_t ret_maj;
@@ -97,7 +98,10 @@ int gp_init_sec_context(struct gssproxy_ctx *gpctx,
pcbs = GSS_C_NO_CHANNEL_BINDINGS;
}
- gp_conv_gssx_to_buffer(isca->input_token, &ibuf);
+ if (isca->input_token) {
+ gp_conv_gssx_to_buffer(isca->input_token, &ibuf);
+ pibuf = &ibuf;
+ }
ret_maj = gss_init_sec_context(&ret_min,
ich,
@@ -107,7 +111,7 @@ int gp_init_sec_context(struct gssproxy_ctx *gpctx,
req_flags,
time_req,
pcbs,
- &ibuf,
+ pibuf,
&actual_mech_type,
&obuf,
NULL,
diff --git a/proxy/src/mechglue/gpm_init_sec_context.c b/proxy/src/mechglue/gpm_init_sec_context.c
index 2e4c171..4a8c557 100644
--- a/proxy/src/mechglue/gpm_init_sec_context.c
+++ b/proxy/src/mechglue/gpm_init_sec_context.c
@@ -79,9 +79,11 @@ OM_uint32 gpm_init_sec_context(OM_uint32 *minor_status,
}
}
- ret = gp_conv_buffer_to_gssx_alloc(input_token, &arg->input_token);
- if (ret) {
- goto done;
+ if (input_token != GSS_C_NO_BUFFER) {
+ ret = gp_conv_buffer_to_gssx_alloc(input_token, &arg->input_token);
+ if (ret) {
+ goto done;
+ }
}
/* execute proxy request */