summaryrefslogtreecommitdiff
path: root/tests/libtest
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2007-12-05 21:20:14 +0000
committerDaniel Stenberg <daniel@haxx.se>2007-12-05 21:20:14 +0000
commit7d3ea12b625fd07d9d41a68e7cc2cd5322247584 (patch)
tree7e8a964e4e70c54fd847390a0ad280524afb2c76 /tests/libtest
parent59dc9085d15fc069798eef92e41e4c72838ed990 (diff)
downloadcurl-7d3ea12b625fd07d9d41a68e7cc2cd5322247584.tar.gz
Spacen Jasset reported a problem with doing POST (with data read with a
callback) over a proxy when NTLM is used as auth with the proxy. The bug also concerned Digest and was limited to using callback only. Spacen worked with us to provide a useful patch. I added the test case 547 and 548 to verify two variations of POST over proxy with NTLM.
Diffstat (limited to 'tests/libtest')
-rw-r--r--tests/libtest/lib547.c42
1 files changed, 39 insertions, 3 deletions
diff --git a/tests/libtest/lib547.c b/tests/libtest/lib547.c
index 0513911d6..2d4011213 100644
--- a/tests/libtest/lib547.c
+++ b/tests/libtest/lib547.c
@@ -20,21 +20,49 @@
static size_t readcallback(void *ptr,
size_t size,
size_t nmemb,
- void *stream)
+ void *clientp)
{
- (void)stream; /* unused */
+ int *counter = (int *)clientp;
+
+ if(*counter) {
+ /* only do this once and then require a clearing of this */
+ fprintf(stderr, "READ ALREADY DONE!\n");
+ return 0;
+ }
+ (*counter)++; /* bump */
+
if(size * nmemb > strlen(UPLOADTHIS)) {
+ fprintf(stderr, "READ!\n");
strcpy(ptr, UPLOADTHIS);
return strlen(UPLOADTHIS);
}
+ fprintf(stderr, "READ NOT FINE!\n");
return 0;
}
+static curlioerr ioctlcallback(CURL *handle,
+ int cmd,
+ void *clientp)
+{
+ int *counter = (int *)clientp;
+ (void)handle; /* unused */
+ if(cmd == CURLIOCMD_RESTARTREAD) {
+ fprintf(stderr, "REWIND!\n");
+ *counter = 0; /* clear counter to make the read callback restart */
+ }
+ return CURLIOE_OK;
+}
+
+
+
#endif
int test(char *URL)
{
CURLcode res;
CURL *curl;
+#ifndef LIB548
+ int counter=0;
+#endif
if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
fprintf(stderr, "curl_global_init() failed\n");
@@ -51,10 +79,18 @@ int test(char *URL)
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_HEADER, TRUE);
#ifdef LIB548
+ /* set the data to POST with a mere pointer to a zero-terminated string */
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, UPLOADTHIS);
#else
- /* 547 style */
+ /* 547 style, which means reading the POST data from a callback */
+ curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctlcallback);
+ curl_easy_setopt(curl, CURLOPT_IOCTLDATA, &counter);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, readcallback);
+ curl_easy_setopt(curl, CURLOPT_READDATA, &counter);
+ /* TODO: We should be able to do the POST fine without setting the size
+ and we should do a test to verify that but until we do that we set
+ the size of the request-body */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(UPLOADTHIS));
#endif
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_PROXY, libtest_arg2);