| <testcase> | 
 | <info> | 
 | <keywords> | 
 | HTTP | 
 | HTTP GET | 
 | HTTP Basic auth | 
 | HTTP Digest auth | 
 | </keywords> | 
 | </info> | 
 | # Server-side | 
 | <reply> | 
 |  | 
 | <!-- Alternate the order that Basic and Digest headers appear in responses to | 
 | ensure that the order doesn't matter. --> | 
 |  | 
 | <!-- First request has Basic auth, wrong password --> | 
 | <data100> | 
 | 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="1"
 | 
 | WWW-Authenticate: Basic realm="testrealm"
 | 
 | 
 | 
 | This is a bad password page! | 
 | </data100> | 
 |  | 
 | <!-- Second request has Digest auth, right password --> | 
 | <data1200> | 
 | 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! | 
 | </data1200> | 
 |  | 
 | <!-- Third request has Basic auth, wrong password --> | 
 | <data300> | 
 | 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: Digest realm="testrealm", nonce="2"
 | 
 | WWW-Authenticate: Basic realm="testrealm"
 | 
 | 
 | 
 | This is a bad password page! | 
 | </data300> | 
 |  | 
 | <!-- Fourth request has Digest auth, wrong password --> | 
 | <data1400> | 
 | 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: Digest realm="testrealm", nonce="3"
 | 
 | WWW-Authenticate: Basic realm="testrealm"
 | 
 | 
 | 
 | This is a bad password page! | 
 | </data1400> | 
 |  | 
 | <!-- Fifth request has Digest auth, right password --> | 
 | <data1500> | 
 | 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! | 
 | </data1500> | 
 |  | 
 | <datacheck> | 
 | 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="1"
 | 
 | WWW-Authenticate: Basic realm="testrealm"
 | 
 | 
 | 
 | This is a bad password 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 Sorry wrong password (2)
 | 
 | 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: Basic realm="testrealm"
 | 
 | 
 | 
 | This is a bad password 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: Digest realm="testrealm", nonce="3"
 | 
 | WWW-Authenticate: Basic realm="testrealm"
 | 
 | 
 | 
 | This is a bad password 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! | 
 | </datacheck> | 
 |  | 
 | </reply> | 
 |  | 
 | # Client-side | 
 | <client> | 
 | <server> | 
 | http | 
 | </server> | 
 | <features> | 
 | !SSPI | 
 | crypto | 
 | </features> | 
 | <tool> | 
 | libauthretry | 
 | </tool> | 
 |  | 
 |  <name> | 
 | HTTP authorization retry (Basic switching to Digest) | 
 |  </name> | 
 |  <setenv> | 
 | # 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 | 
 |  </setenv> | 
 |  <command> | 
 | http://%HOSTIP:%HTTPPORT/%TESTNUMBER basic digest | 
 | </command> | 
 | <precheck> | 
 | chkhostname curlhost | 
 | </precheck> | 
 | </client> | 
 |  | 
 | # Verify data after the test has been "shot" | 
 | <verify> | 
 | <protocol> | 
 | GET /%TESTNUMBER0100 HTTP/1.1
 | 
 | Host: %HOSTIP:%HTTPPORT
 | 
 | Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
 | 
 | Accept: */*
 | 
 | 
 | 
 | GET /%TESTNUMBER0200 HTTP/1.1
 | 
 | Host: %HOSTIP:%HTTPPORT
 | 
 | Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/%TESTNUMBER0200", response="ed646c565f79e2dd9fa37cb5a621213c"
 | 
 | Accept: */*
 | 
 | 
 | 
 | GET /%TESTNUMBER0300 HTTP/1.1
 | 
 | Host: %HOSTIP:%HTTPPORT
 | 
 | Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz
 | 
 | Accept: */*
 | 
 | 
 | 
 | GET /%TESTNUMBER0400 HTTP/1.1
 | 
 | Host: %HOSTIP:%HTTPPORT
 | 
 | Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/%TESTNUMBER0400", response="9741ced8caacc6124770187b36f007c5"
 | 
 | Accept: */*
 | 
 | 
 | 
 | GET /%TESTNUMBER0500 HTTP/1.1
 | 
 | Host: %HOSTIP:%HTTPPORT
 | 
 | Authorization: Digest username="testuser", realm="testrealm", nonce="3", uri="/%TESTNUMBER0500", response="5bc77ec8c2d443b27a1b55f1fd8fbb13"
 | 
 | Accept: */*
 | 
 | 
 | 
 | </protocol> | 
 | </verify> | 
 | </testcase> |