HTTP HTTP GET HTTP Digest auth HTTP NTLM auth # Server-side HTTP/1.1 401 Need Digest or NTLM auth Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 27 WWW-Authenticate: NTLM WWW-Authenticate: Digest realm="testrealm", nonce="1" This is not the real page! HTTP/1.1 401 Sorry wrong password Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 29 WWW-Authenticate: Digest realm="testrealm", nonce="2" WWW-Authenticate: NTLM This is a bad password page! HTTP/1.1 401 Need Digest or NTLM auth (2) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 27 WWW-Authenticate: NTLM WWW-Authenticate: Digest realm="testrealm", nonce="3" This is not the real page! HTTP/1.1 401 NTLM intermediate Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 33 WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg= This is still not the real page! HTTP/1.1 200 Things are fine in server land Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 32 Finally, this is the real page! HTTP/1.1 401 Need Digest or NTLM auth (3) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 27 WWW-Authenticate: Digest realm="testrealm", nonce="4" WWW-Authenticate: NTLM This is not the real page! HTTP/1.1 401 Sorry wrong password (2) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 29 WWW-Authenticate: NTLM WWW-Authenticate: Digest realm="testrealm", nonce="5" This is a bad password page! HTTP/1.1 401 Need Digest or NTLM auth (4) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 27 WWW-Authenticate: Digest realm="testrealm", nonce="6" WWW-Authenticate: NTLM This is not the real page! HTTP/1.1 401 NTLM intermediate (2) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 33 WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg= This is still not the real page! HTTP/1.1 401 Sorry wrong password (3) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 29 WWW-Authenticate: NTLM WWW-Authenticate: Digest realm="testrealm", nonce="7" This is a bad password page! HTTP/1.1 401 Need Digest or NTLM auth (5) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 27 WWW-Authenticate: Digest realm="testrealm", nonce="8" WWW-Authenticate: NTLM This is not the real page! HTTP/1.1 401 NTLM intermediate (3) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 33 WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg= This is still not the real page! HTTP/1.1 200 Things are fine in server land (2) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 32 Finally, this is the real page! HTTP/1.1 401 Need Digest or NTLM auth Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 27 WWW-Authenticate: NTLM WWW-Authenticate: Digest realm="testrealm", nonce="1" HTTP/1.1 401 Sorry wrong password Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 29 WWW-Authenticate: Digest realm="testrealm", nonce="2" WWW-Authenticate: NTLM This is a bad password page! HTTP/1.1 401 NTLM intermediate Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 33 WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg= HTTP/1.1 200 Things are fine in server land Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 32 Finally, this is the real page! HTTP/1.1 401 Need Digest or NTLM auth (3) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 27 WWW-Authenticate: Digest realm="testrealm", nonce="4" WWW-Authenticate: NTLM HTTP/1.1 401 Sorry wrong password (2) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 29 WWW-Authenticate: NTLM WWW-Authenticate: Digest realm="testrealm", nonce="5" This is a bad password page! HTTP/1.1 401 NTLM intermediate (2) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 33 WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg= HTTP/1.1 401 Sorry wrong password (3) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 29 WWW-Authenticate: NTLM WWW-Authenticate: Digest realm="testrealm", nonce="7" This is a bad password page! HTTP/1.1 401 NTLM intermediate (3) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 33 WWW-Authenticate: NTLM TlRMTVNTUAACAAAACAAIADAAAAAGggEAq6U1NAWaJCIAAAAAAAAAAAAAAAA4AAAATlRMTUF1dGg= HTTP/1.1 200 Things are fine in server land (2) Server: Microsoft-IIS/5.0 Content-Type: text/html; charset=iso-8859-1 Content-Length: 32 Finally, this is the real page! # Client-side NTLM http libauthretry HTTP authorization retry (Digest switching to NTLM) # we force our own host name, in order to make the test machine independent CURL_GETHOSTNAME=curlhost # we try to use the LD_PRELOAD hack, if not a debug build LD_PRELOAD=%PWD/libtest/.libs/libhostname.so http://%HOSTIP:%HTTPPORT/2028 digest ntlm chkhostname curlhost # Verify data after the test has been "shot" ^User-Agent:.* GET /20280100 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Accept: */* GET /20280100 HTTP/1.1 Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20280100", response="53c80666f5e3a4a55f92a66aaf0078bb" Host: %HOSTIP:%HTTPPORT Accept: */* GET /20280200 HTTP/1.1 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA= Host: %HOSTIP:%HTTPPORT Accept: */* GET /20280200 HTTP/1.1 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q= Host: %HOSTIP:%HTTPPORT Accept: */* GET /20280300 HTTP/1.1 Host: %HOSTIP:%HTTPPORT Accept: */* GET /20280300 HTTP/1.1 Authorization: Digest username="testuser", realm="testrealm", nonce="4", uri="/20280300", response="1aa5d90da9803ca12d04b24e0f19476e" Host: %HOSTIP:%HTTPPORT Accept: */* GET /20280400 HTTP/1.1 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA= Host: %HOSTIP:%HTTPPORT Accept: */* GET /20280400 HTTP/1.1 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q= Host: %HOSTIP:%HTTPPORT Accept: */* GET /20280500 HTTP/1.1 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA= Host: %HOSTIP:%HTTPPORT Accept: */* GET /20280500 HTTP/1.1 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q= Host: %HOSTIP:%HTTPPORT Accept: */*