summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845>2010-09-28 11:57:26 +0000
committerjoe <joe@61a7d7f5-40b7-0310-9c16-bb0ea8cb1845>2010-09-28 11:57:26 +0000
commita2490fe173a6d6236e96047076ad8703ec687744 (patch)
tree0e3a91beb7d2c693037b7a77ad645fa40e222ff6
parentbf002d6265c86dece01996e16ec89a872ed4a11f (diff)
downloadneon-a2490fe173a6d6236e96047076ad8703ec687744.tar.gz
Merge r1809 from trunk:
* src/ne_request.c (open_connection): If SOCKS proxy fails, set return value to NE_ERROR. * test/request.c (socks_fail): Add test case. git-svn-id: http://svn.webdav.org/repos/projects/neon/branches/0.29.x@1812 61a7d7f5-40b7-0310-9c16-bb0ea8cb1845
-rw-r--r--src/ne_request.c1
-rw-r--r--test/request.c34
2 files changed, 35 insertions, 0 deletions
diff --git a/src/ne_request.c b/src/ne_request.c
index ea43f3a..ae075c2 100644
--- a/src/ne_request.c
+++ b/src/ne_request.c
@@ -1624,6 +1624,7 @@ static int open_connection(ne_session *sess)
sess->nexthop->port,
ne_sock_error(sess->socket));
ne_close_connection(sess);
+ ret = NE_ERROR;
}
}
}
diff --git a/test/request.c b/test/request.c
index 0cb4c8b..ad1a62a 100644
--- a/test/request.c
+++ b/test/request.c
@@ -2296,6 +2296,39 @@ static int send_length(void)
return await_server();
}
+/* Test for error code for a SOCKS proxy failure, bug in <= 0.29.3. */
+static int socks_fail(void)
+{
+ ne_session *sess;
+ struct socks_server srv = {0};
+ int ret;
+
+ srv.version = NE_SOCK_SOCKSV5;
+ srv.failure = fail_init_vers;
+ srv.expect_port = 4242;
+ srv.expect_addr = ne_iaddr_parse("127.0.0.1", ne_iaddr_ipv4);
+ srv.expect_fqdn = "localhost";
+ srv.username = "bloggs";
+ srv.password = "guessme";
+
+ CALL(socks_session(&sess, &srv, srv.expect_fqdn, srv.expect_port,
+ single_serve_string, EMPTY_RESP));
+
+ ret = any_request(sess, "/blee");
+ ONV(ret != NE_ERROR,
+ ("request failed with %d not NE_ERROR", ret));
+ ONV(strstr(ne_get_error(sess),
+ "Could not establish connection from SOCKS proxy") == NULL
+ || strstr(ne_get_error(sess),
+ "Invalid version in proxy response") == NULL,
+ ("unexpected error string: %s", ne_get_error(sess)));
+
+ ne_iaddr_free(srv.expect_addr);
+
+ ne_session_destroy(sess);
+ return await_server();
+}
+
/* TODO: test that ne_set_notifier(, NULL, NULL) DTRT too. */
ne_test tests[] = {
@@ -2388,5 +2421,6 @@ ne_test tests[] = {
T(socks_proxy),
T(socks_v4_proxy),
T(send_length),
+ T(socks_fail),
T(NULL)
};