aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2011-06-29 12:26:23 +0200
committerDaniel Stenberg <daniel@haxx.se>2011-06-29 12:27:37 +0200
commit2e2e5f247abeabc1965350f66503d35e9c07fe07 (patch)
tree93506c969b1cfb84d8f84bb8d95fa496720acdb8 /lib
parentac28971aa61d28e5dd54888e34e958d1c742b461 (diff)
get_gss_name: proxy auth without proxy set equals error
Previously it would access a NULL pointer and die. Bug: http://curl.haxx.se/mail/lib-2011-06/0170.html Reported by: Christian Hagele
Diffstat (limited to 'lib')
-rw-r--r--lib/http_negotiate_sspi.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/http_negotiate_sspi.c b/lib/http_negotiate_sspi.c
index 809870168..0f40bb584 100644
--- a/lib/http_negotiate_sspi.c
+++ b/lib/http_negotiate_sspi.c
@@ -45,13 +45,16 @@
#include "memdebug.h"
static int
-get_gss_name(struct connectdata *conn, bool proxy, char *server)
+get_gss_name(struct connectdata *conn, bool proxy,
+ struct negotiatedata *neg_ctx)
{
- struct negotiatedata *neg_ctx = proxy?&conn->data->state.proxyneg:
- &conn->data->state.negotiate;
const char* service;
size_t length;
+ if(proxy && !conn->proxy.name)
+ /* proxy auth requested but no given proxy name, error out! */
+ return -1;
+
/* GSSAPI implementation by Globus (known as GSI) requires the name to be
of form "<service>/<fqdn>" instead of <service>@<fqdn> (ie. slash instead
of at-sign). Also GSI servers are often identified as 'host' not 'khttp'.
@@ -71,7 +74,7 @@ get_gss_name(struct connectdata *conn, bool proxy, char *server)
if(length + 1 > sizeof(neg_ctx->server_name))
return EMSGSIZE;
- snprintf(server, sizeof(neg_ctx->server_name), "%s/%s",
+ snprintf(neg_ctx->server_name, sizeof(neg_ctx->server_name), "%s/%s",
service, proxy ? conn->proxy.name : conn->host.name);
return 0;
@@ -130,7 +133,7 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
}
if(strlen(neg_ctx->server_name) == 0 &&
- (ret = get_gss_name(conn, proxy, neg_ctx->server_name)))
+ (ret = get_gss_name(conn, proxy, neg_ctx)))
return ret;
if(!neg_ctx->output_token) {