url: detect proxy changes read from environment

When a proxy is set from an environment variable, detect if that proxy
is not the same as previously and flush state.

Verified by test1647: verify changing proxy with env variables and make
sure Digest state is flushed in the second use

Closes #21666
This commit is contained in:
Daniel Stenberg 2026-05-18 23:47:11 +02:00
parent d99dcfb04a
commit 5c225384b8
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
6 changed files with 239 additions and 5 deletions

View file

@ -214,11 +214,9 @@ test1596 test1597 test1598 test1599 test1600 test1601 test1602 test1603 \
test1604 test1605 test1606 test1607 test1608 test1609 test1610 test1611 \
test1612 test1613 test1614 test1615 test1616 test1617 test1618 test1619 \
test1620 test1621 test1622 test1623 test1624 test1625 test1626 test1627 \
test1628 test1629 \
\
test1630 test1631 test1632 test1633 test1634 test1635 test1636 test1637 \
test1638 test1639 test1640 test1641 test1642 test1643 test1644 test1645 \
test1646 \
test1628 test1629 test1630 test1631 test1632 test1633 test1634 test1635 \
test1636 test1637 test1638 test1639 test1640 test1641 test1642 test1643 \
test1644 test1645 test1646 test1647 \
\
test1650 test1651 test1652 test1653 test1654 test1655 test1656 test1657 \
test1658 test1659 test1660 test1661 test1662 test1663 test1664 test1665 \

103
tests/data/test1647 Normal file
View file

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="US-ASCII"?>
<testcase>
<info>
<keywords>
HTTP
HTTP GET
HTTP proxy
HTTP proxy Digest auth
multi
</keywords>
</info>
# Server-side
<reply>
# this is returned first since we get no proxy-auth
<data crlf="headers" nocheck="yes">
HTTP/1.1 407 Authorization Required to proxy me my dear
Proxy-Authenticate: Digest realm="weirdorealm", nonce="12345"
Content-Length: 33
And you should ignore this data.
</data>
# then this is returned when we get proxy-auth
<data1000 crlf="headers">
HTTP/1.1 200 OK
Content-Length: 21
Server: no
Nice proxy auth sir!
</data1000>
<connect crlf="headers">
HTTP/1.1 401 OK
Content-Length: 21
Server: no
Denied access. Leave
</connect>
</reply>
# Client-side
<client>
<server>
http
https-proxy
https
</server>
# tool is what to use instead of 'curl'
<tool>
lib%TESTNUMBER
</tool>
<features>
!SSPI
crypto
proxy
digest
Debug
</features>
<setenv>
http_proxy=%HOSTIP:%HTTPPORT
https_proxy=https://%HOSTIP:%HTTPSPROXYPORT
CURL_ENTROPY=99376
</setenv>
<name>
HTTP proxy auth Digest, then change proxy with env var and do it again
</name>
<command>
http://test.remote.example.com/path/%TESTNUMBER https://another.example.com:%HTTPSPORT/ daniel:monkey123 another:bump456
</command>
</client>
# Verify data after the test has been "shot"
<verify>
<protocol crlf="headers">
GET http://test.remote.example.com/path/%TESTNUMBER HTTP/1.1
Host: test.remote.example.com
Accept: */*
Proxy-Connection: Keep-Alive
GET http://test.remote.example.com/path/%TESTNUMBER HTTP/1.1
Host: test.remote.example.com
Proxy-Authorization: Digest username="daniel", realm="weirdorealm", nonce="12345", uri="/path/%TESTNUMBER", response="7a1672891aff03248887b1a6674b8096"
Accept: */*
Proxy-Connection: Keep-Alive
</protocol>
<proxy crlf="headers">
CONNECT another.example.com:%HTTPSPORT HTTP/1.1
Host: another.example.com:%HTTPSPORT
Proxy-Connection: Keep-Alive
</proxy>
# CONNECT fails
<errorcode>
7
</errorcode>
</verify>
</testcase>