mirror of
https://github.com/curl/curl.git
synced 2026-08-06 22:16:13 +03:00
New authentication code added, particularly noticable when doing POST or PUT
with Digest or NTLM. libcurl will now use HEAD to negotiate the authentication and when done perform the requested POST.
This commit is contained in:
parent
f617c1131a
commit
8ed44e8dfb
13 changed files with 459 additions and 47 deletions
90
tests/data/test154
Normal file
90
tests/data/test154
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
# Server-side
|
||||
<reply>
|
||||
<servercmd>
|
||||
auth_required
|
||||
</servercmd>
|
||||
<data>
|
||||
HTTP/1.1 401 Authorization Required swsclose
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
|
||||
WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
|
||||
WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
|
||||
This is not the real page
|
||||
</data>
|
||||
|
||||
# This is supposed to be returned when the server gets a
|
||||
# Authorization: Digest line passed-in from the client
|
||||
<data1000>
|
||||
HTTP/1.1 200 OK swsclose
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
Content-Length: 23
|
||||
|
||||
This IS the real page!
|
||||
</data1000>
|
||||
|
||||
<datacheck>
|
||||
HTTP/1.1 401 Authorization Required swsclose
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
|
||||
WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
|
||||
WWW-Authenticate: Digest realm="gimme all yer s3cr3ts", nonce="11223344"
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
|
||||
HTTP/1.1 200 OK swsclose
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
Content-Length: 23
|
||||
|
||||
This IS the real page!
|
||||
</datacheck>
|
||||
|
||||
</reply>
|
||||
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
HTTP PUT with --anyauth authorization (picking Digest)
|
||||
</name>
|
||||
<command>
|
||||
http://%HOSTIP:%HOSTPORT/154 -T log/put154 -u testuser:testpass --anyauth
|
||||
</command>
|
||||
<file name="log/put154">
|
||||
This is data we upload with PUT
|
||||
a second line
|
||||
line three
|
||||
four is the number of lines
|
||||
</file>
|
||||
</client>
|
||||
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<strip>
|
||||
^User-Agent:.*
|
||||
</strip>
|
||||
<protocol>
|
||||
HEAD /154 HTTP/1.1
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: */*
|
||||
|
||||
PUT /154 HTTP/1.1
|
||||
Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/154", response="b71551e12d1c456e47d8388ecb2edeca"
|
||||
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: */*
|
||||
Content-Length: 85
|
||||
Expect: 100-continue
|
||||
|
||||
This is data we upload with PUT
|
||||
a second line
|
||||
line three
|
||||
four is the number of lines
|
||||
</protocol>
|
||||
</verify>
|
||||
114
tests/data/test155
Normal file
114
tests/data/test155
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
# Server-side
|
||||
<reply>
|
||||
<servercmd>
|
||||
auth_required
|
||||
</servercmd>
|
||||
<data>
|
||||
HTTP/1.1 401 NTLM Authorization Required swsclose
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
|
||||
WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
|
||||
WWW-Authenticate: NTLM
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
Connection: close
|
||||
|
||||
moo
|
||||
</data>
|
||||
|
||||
# This is supposed to be returned when the server gets a first
|
||||
# Authorization: NTLM line passed-in from the client
|
||||
<data1001>
|
||||
HTTP/1.1 401 Type-1 received, send back type-2
|
||||
Server: Microsoft-IIS/5.0
|
||||
Content-Length: 34
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
|
||||
|
||||
This is not the real page either!
|
||||
</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 Type-3 Recevied and all Things are fine swsclose
|
||||
Server: Microsoft-IIS/5.0
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
|
||||
Finally, this is the real page!
|
||||
</data1002>
|
||||
|
||||
<datacheck>
|
||||
HTTP/1.1 401 NTLM Authorization Required swsclose
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
|
||||
WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
|
||||
WWW-Authenticate: NTLM
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
Connection: close
|
||||
|
||||
HTTP/1.1 401 Type-1 received, send back type-2
|
||||
Server: Microsoft-IIS/5.0
|
||||
Content-Length: 34
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
|
||||
|
||||
HTTP/1.1 200 Type-3 Recevied and all Things are fine swsclose
|
||||
Server: Microsoft-IIS/5.0
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
|
||||
Finally, this is the real page!
|
||||
</datacheck>
|
||||
|
||||
</reply>
|
||||
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
HTTP PUT with --anyauth authorization (picking NTLM)
|
||||
</name>
|
||||
<command>
|
||||
http://%HOSTIP:%HOSTPORT/155 -T log/put155 -u testuser:testpass --anyauth
|
||||
</command>
|
||||
<file name="log/put155">
|
||||
This is data we upload with PUT
|
||||
a second line
|
||||
line three
|
||||
four is the number of lines
|
||||
</file>
|
||||
</client>
|
||||
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<strip>
|
||||
^User-Agent:.*
|
||||
</strip>
|
||||
<protocol>
|
||||
HEAD /155 HTTP/1.1
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: */*
|
||||
|
||||
HEAD /155 HTTP/1.1
|
||||
Authorization: NTLM TlRMTVNTUAABAAAAAgIAAAAAAAAgAAAAAAAAACAAAAA=
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: */*
|
||||
|
||||
PUT /155 HTTP/1.1
|
||||
Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEgAAAAYABgAYAAAAAAAAABAAAAACAAIAEAAAAAAAAAASAAAAAAAAAB4AAAAAYIAAHRlc3R1c2VyWmRDApEJkUyGOPS3DjvASModEeW/N/FBqYVyF4y6/y/7F6qmEQ7lXjXFF3tH1145
|
||||
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: */*
|
||||
Content-Length: 85
|
||||
Expect: 100-continue
|
||||
|
||||
This is data we upload with PUT
|
||||
a second line
|
||||
line three
|
||||
four is the number of lines
|
||||
</protocol>
|
||||
</verify>
|
||||
79
tests/data/test156
Normal file
79
tests/data/test156
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
# Server-side
|
||||
<reply>
|
||||
<data>
|
||||
HTTP/1.1 200 No Authorization Required swsclose swsbounce
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
Connection: close
|
||||
|
||||
</data>
|
||||
|
||||
<data1>
|
||||
HTTP/1.1 200 No Authorization Required swsclose
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
Connection: close
|
||||
|
||||
PUT received fine. Thank you very much
|
||||
</data1>
|
||||
|
||||
<datacheck>
|
||||
HTTP/1.1 200 No Authorization Required swsclose swsbounce
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
Connection: close
|
||||
|
||||
HTTP/1.1 200 No Authorization Required swsclose
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
Connection: close
|
||||
|
||||
PUT received fine. Thank you very much
|
||||
</datacheck>
|
||||
|
||||
</reply>
|
||||
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
HTTP PUT with --anyauth (when the server requires none)
|
||||
</name>
|
||||
<command>
|
||||
http://%HOSTIP:%HOSTPORT/156 -T log/put156 -u testuser:testpass --anyauth
|
||||
</command>
|
||||
<file name="log/put156">
|
||||
This is data we upload with PUT
|
||||
a second line
|
||||
line three
|
||||
four is the number of lines
|
||||
</file>
|
||||
</client>
|
||||
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<strip>
|
||||
^User-Agent:.*
|
||||
</strip>
|
||||
<protocol>
|
||||
HEAD /156 HTTP/1.1
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: */*
|
||||
|
||||
PUT /156 HTTP/1.1
|
||||
User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: */*
|
||||
Content-Length: 85
|
||||
Expect: 100-continue
|
||||
|
||||
This is data we upload with PUT
|
||||
a second line
|
||||
line three
|
||||
four is the number of lines
|
||||
</protocol>
|
||||
</verify>
|
||||
38
tests/data/test157
Normal file
38
tests/data/test157
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Server-side
|
||||
<reply>
|
||||
<data>
|
||||
HTTP/1.1 200 No Authorization Required swsclose
|
||||
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
|
||||
Content-Type: text/html; charset=iso-8859-1
|
||||
Connection: close
|
||||
|
||||
GET received and served just fine. Thank you very much
|
||||
</data>
|
||||
</reply>
|
||||
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
HTTP GET with --anyauth (when the server requires none)
|
||||
</name>
|
||||
<command>
|
||||
http://%HOSTIP:%HOSTPORT/157 -u testuser:testpass --anyauth
|
||||
</command>
|
||||
</client>
|
||||
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<strip>
|
||||
^User-Agent:.*
|
||||
</strip>
|
||||
<protocol>
|
||||
GET /157 HTTP/1.1
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: */*
|
||||
|
||||
</protocol>
|
||||
</verify>
|
||||
|
|
@ -62,12 +62,10 @@ four is the number of lines
|
|||
^User-Agent:.*
|
||||
</strip>
|
||||
<protocol>
|
||||
PUT /88 HTTP/1.1
|
||||
HEAD /88 HTTP/1.1
|
||||
Host: 127.0.0.1:8999
|
||||
Pragma: no-cache
|
||||
Accept: */*
|
||||
Content-Length: 85
|
||||
Expect: 100-continue
|
||||
|
||||
PUT /88 HTTP/1.1
|
||||
Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/88", response="78a49fa53d0c228778297687d4168e71"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue