1 <testcase> 2 <info> 3 <keywords> 4 HTTP 5 HTTP GET 6 HTTP Basic auth 7 HTTP Digest auth 8 </keywords> 9 </info> 10 # Server-side 11 <reply> 12 13 <!-- Alternate the order that Basic and Digest headers appear in responses to 14 ensure that the order doesn't matter. --> 15 16 <!-- First request has Basic auth, wrong password --> 17 <data100> 18 HTTP/1.1 401 Sorry wrong password 19 Server: Microsoft-IIS/5.0 20 Content-Type: text/html; charset=iso-8859-1 21 Content-Length: 29 22 WWW-Authenticate: Digest realm="testrealm", nonce="1" 23 WWW-Authenticate: Basic realm="testrealm" 24 25 This is a bad password page! 26 </data100> 27 28 <!-- Second request has Digest auth, right password --> 29 <data1200> 30 HTTP/1.1 200 Things are fine in server land 31 Server: Microsoft-IIS/5.0 32 Content-Type: text/html; charset=iso-8859-1 33 Content-Length: 32 34 35 Finally, this is the real page! 36 </data1200> 37 38 <!-- Third request has Basic auth, wrong password --> 39 <data300> 40 HTTP/1.1 401 Sorry wrong password (2) 41 Server: Microsoft-IIS/5.0 42 Content-Type: text/html; charset=iso-8859-1 43 Content-Length: 29 44 WWW-Authenticate: Digest realm="testrealm", nonce="2" 45 WWW-Authenticate: Basic realm="testrealm" 46 47 This is a bad password page! 48 </data300> 49 50 <!-- Fourth request has Digest auth, wrong password --> 51 <data1400> 52 HTTP/1.1 401 Sorry wrong password (3) 53 Server: Microsoft-IIS/5.0 54 Content-Type: text/html; charset=iso-8859-1 55 Content-Length: 29 56 WWW-Authenticate: Digest realm="testrealm", nonce="3" 57 WWW-Authenticate: Basic realm="testrealm" 58 59 This is a bad password page! 60 </data1400> 61 62 <!-- Fifth request has Digest auth, right password --> 63 <data1500> 64 HTTP/1.1 200 Things are fine in server land (2) 65 Server: Microsoft-IIS/5.0 66 Content-Type: text/html; charset=iso-8859-1 67 Content-Length: 32 68 69 Finally, this is the real page! 70 </data1500> 71 72 <datacheck> 73 HTTP/1.1 401 Sorry wrong password 74 Server: Microsoft-IIS/5.0 75 Content-Type: text/html; charset=iso-8859-1 76 Content-Length: 29 77 WWW-Authenticate: Digest realm="testrealm", nonce="1" 78 WWW-Authenticate: Basic realm="testrealm" 79 80 This is a bad password page! 81 HTTP/1.1 200 Things are fine in server land 82 Server: Microsoft-IIS/5.0 83 Content-Type: text/html; charset=iso-8859-1 84 Content-Length: 32 85 86 Finally, this is the real page! 87 HTTP/1.1 401 Sorry wrong password (2) 88 Server: Microsoft-IIS/5.0 89 Content-Type: text/html; charset=iso-8859-1 90 Content-Length: 29 91 WWW-Authenticate: Digest realm="testrealm", nonce="2" 92 WWW-Authenticate: Basic realm="testrealm" 93 94 This is a bad password page! 95 HTTP/1.1 401 Sorry wrong password (3) 96 Server: Microsoft-IIS/5.0 97 Content-Type: text/html; charset=iso-8859-1 98 Content-Length: 29 99 WWW-Authenticate: Digest realm="testrealm", nonce="3" 100 WWW-Authenticate: Basic realm="testrealm" 101 102 This is a bad password page! 103 HTTP/1.1 200 Things are fine in server land (2) 104 Server: Microsoft-IIS/5.0 105 Content-Type: text/html; charset=iso-8859-1 106 Content-Length: 32 107 108 Finally, this is the real page! 109 </datacheck> 110 111 </reply> 112 113 # Client-side 114 <client> 115 <server> 116 http 117 </server> 118 <features> 119 !SSPI 120 crypto 121 </features> 122 <tool> 123 libauthretry 124 </tool> 125 126 <name> 127 HTTP authorization retry (Basic switching to Digest) 128 </name> 129 <setenv> 130 # we force our own host name, in order to make the test machine independent 131 CURL_GETHOSTNAME=curlhost 132 # we try to use the LD_PRELOAD hack, if not a debug build 133 LD_PRELOAD=%PWD/libtest/.libs/libhostname.so 134 </setenv> 135 <command> 136 http://%HOSTIP:%HTTPPORT/2024 basic digest 137 </command> 138 <precheck> 139 chkhostname curlhost 140 </precheck> 141 </client> 142 143 # Verify data after the test has been "shot" 144 <verify> 145 <strip> 146 ^User-Agent:.* 147 </strip> 148 <protocol> 149 GET /20240100 HTTP/1.1 150 Host: %HOSTIP:%HTTPPORT 151 Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz 152 Accept: */* 153 154 GET /20240200 HTTP/1.1 155 Host: %HOSTIP:%HTTPPORT 156 Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20240200", response="ed646c565f79e2dd9fa37cb5a621213c" 157 Accept: */* 158 159 GET /20240300 HTTP/1.1 160 Host: %HOSTIP:%HTTPPORT 161 Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz 162 Accept: */* 163 164 GET /20240400 HTTP/1.1 165 Host: %HOSTIP:%HTTPPORT 166 Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/20240400", response="9741ced8caacc6124770187b36f007c5" 167 Accept: */* 168 169 GET /20240500 HTTP/1.1 170 Host: %HOSTIP:%HTTPPORT 171 Authorization: Digest username="testuser", realm="testrealm", nonce="3", uri="/20240500", response="5bc77ec8c2d443b27a1b55f1fd8fbb13" 172 Accept: */* 173 174 </protocol> 175 </verify> 176 </testcase> 177