Commit 4e4f33a2 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

added test548 which uses the lib547 source file, preparing for test547 which

is supposed to repeat the bug report "NTLM proxy authentication with
CURLOPT_READDATA seems broken." posted on the curl-library mailing list on dec
3 2007.
parent 8fa59921
Loading
Loading
Loading
Loading

tests/data/test548

0 → 100644
+131 −0
Original line number Diff line number Diff line
<testcase>
<info>
<keywords>
HTTP
HTTP POST
--proxy-anyauth
HTTP proxy NTLM auth
</keywords>
</info>
# Server-side
<reply>

<data>
HTTP/1.1 407 Authorization Required swsclose
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
Proxy-Authenticate: NTLM
Content-Type: text/html; charset=iso-8859-1
Connection: close

This is not the real page
</data>

# this is returned first since we get no proxy-auth
<data1001>
HTTP/1.1 407 Authorization Required to proxy me my dear
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
Content-Length: 34

Hey you, authenticate or go away!
</data1001>

# This is supposed to be returned when the server gets the second
# Authorization: NTLM line passed-in from the client
<data1002>
HTTP/1.1 200 Things are fine in proxy land swsclose
Server: Microsoft-IIS/5.0
Content-Type: text/html; charset=iso-8859-1
Content-Length: 42

Contents of that page you requested, sir.
</data1002>

<datacheck>
HTTP/1.1 407 Authorization Required swsclose
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
Proxy-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
Proxy-Authenticate: Basic realm="gimme all yer s3cr3ts"
Proxy-Authenticate: NTLM
Content-Type: text/html; charset=iso-8859-1
Connection: close

HTTP/1.1 407 Authorization Required to proxy me my dear
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
Content-Length: 34

HTTP/1.1 200 Things are fine in proxy land swsclose
Server: Microsoft-IIS/5.0
Content-Type: text/html; charset=iso-8859-1
Content-Length: 42

Contents of that page you requested, sir.
</datacheck>
</reply>

# Client-side
<client>
<server>
http
</server>
# tool to use
<tool>
lib548
</tool>
<features>
NTLM
</features>
 <name>
HTTP proxy auth NTLM with POST data from CURLOPT_POSTFIELDS
 </name>
 <command>
http://test.remote.server.com/path/548 http://%HOSTIP:%HTTPPORT s1lly:pers0n
</command>
</client>

# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent: curl/.*
</strip>
# We strip off a large chunk of the type-2 NTLM message since it depends on
# the local host name and thus differs on different machines!
<strippart>
s/^(Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAA).*/$1/
</strippart>
<protocol>
POST http://test.remote.server.com/path/548 HTTP/1.1
User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
Host: test.remote.server.com
Pragma: no-cache
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 36
Content-Type: application/x-www-form-urlencoded

this is the blurb we want to upload
POST http://test.remote.server.com/path/548 HTTP/1.1
Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
Host: test.remote.server.com
Pragma: no-cache
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

POST http://test.remote.server.com/path/548 HTTP/1.1
Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAABQAFAHAAAAA
User-Agent: curl/7.13.2-CVS (i686-pc-linux-gnu) libcurl/7.13.2-CVS OpenSSL/0.9.7e zlib/1.2.2 libidn/0.5.13
Host: test.remote.server.com
Pragma: no-cache
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 36
Content-Type: application/x-www-form-urlencoded

this is the blurb we want to upload
</protocol>
</verify>
</testcase>
+6 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 \
  lib507 lib508 lib509 lib510 lib511 lib512 lib513 lib514 lib515 lib516	\
  lib517 lib518 lib519 lib520 lib521 lib523 lib524 lib525 lib526 lib527	\
  lib529 lib530 lib532 lib533 lib536 lib537 lib540 lib541 lib542 lib543 \
  lib544 lib545
  lib544 lib545 lib547 lib548

# Dependencies (may need to be overriden)
LDADD = $(LIBDIR)/libcurl.la
@@ -138,3 +138,8 @@ lib544_SOURCES = lib544.c $(SUPPORTFILES)

lib545_SOURCES = lib544.c $(SUPPORTFILES)
lib545_CFLAGS = -DLIB545

lib547_SOURCES = lib547.c $(SUPPORTFILES)

lib548_SOURCES = lib547.c $(SUPPORTFILES)
lib548_CFLAGS = -DLIB548

tests/libtest/lib547.c

0 → 100644
+70 −0
Original line number Diff line number Diff line
/*****************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * $Id$
 *
 * argv1 = URL
 * argv2 = proxy
 * argv3 = proxyuser:password
 */

#include "test.h"

#define UPLOADTHIS "this is the blurb we want to upload\n"

static size_t readcallback(void  *ptr,
                           size_t size,
                           size_t nmemb,
                           void *stream)
{
  (void)stream; /* unused */
  if(size * nmemb > strlen(UPLOADTHIS)) {
    strcpy(ptr, UPLOADTHIS);
    return strlen(UPLOADTHIS);
  }
  return 0;
}

int test(char *URL)
{
  CURLcode res;
  CURL *curl;

  if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
    fprintf(stderr, "curl_global_init() failed\n");
    return TEST_ERR_MAJOR_BAD;
  }

  if ((curl = curl_easy_init()) == NULL) {
    fprintf(stderr, "curl_easy_init() failed\n");
    curl_global_cleanup();
    return TEST_ERR_MAJOR_BAD;
  }

  curl_easy_setopt(curl, CURLOPT_URL, URL);
  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
  curl_easy_setopt(curl, CURLOPT_HEADER, TRUE);
#ifdef LIB548
  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, UPLOADTHIS);
#else
  /* 547 style */
  curl_easy_setopt(curl, CURLOPT_READFUNCTION, readcallback);
#endif
  curl_easy_setopt(curl, CURLOPT_POST, 1);
  curl_easy_setopt(curl, CURLOPT_PROXY, libtest_arg2);
  curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, libtest_arg3);
  curl_easy_setopt(curl, CURLOPT_PROXYAUTH,
                   CURLAUTH_NTLM | CURLAUTH_DIGEST | CURLAUTH_BASIC );

  res = curl_easy_perform(curl);

  curl_easy_cleanup(curl);
  curl_global_cleanup();

  return (int)res;
}