curl/tests
Viktor Szakats c07a7f6bf8
runtests: detect bad libssh differently for test 1459 (fixing CircleCI libssh job)
test 1459 "SFTP with corrupted known_hosts" was seen failing in the past.
To fix it, the test was automatically disabled when detecting libssh
0.9.3 or older, as in the curl CircleCI job, running on Ubuntu 20.04.
This work for a long time, until bumping the CircleCI runner to Ubuntu
22.04 (to have OpenSSL 3), where the test was running again, and failing
with the isssue seen in the past.

- Test skipped with Ubuntu 20.04 (libssh 0.9.3):
  https://app.circleci.com/pipelines/github/curl/curl/16445/workflows/7f198763-e0b0-4037-9245-4c4b40ab8726/jobs/155164
- Failure seen with Ubuntu 22.04 (libssh 0.9.6):
  https://app.circleci.com/pipelines/github/curl/curl/16452/workflows/b817a808-0fd4-40b0-8eb0-d064926efe12/jobs/155206?invite=true#step-107-211709_45
- Failure seen with Ubuntu 24.04 (libssh 0.10.6):
  https://app.circleci.com/pipelines/github/curl/curl/16455/workflows/86c631f1-3c5f-4438-b398-3df2bdab5d20/jobs/155218

Turns out the issue issue isn't libssh 0.9.3 itself, but
a CircleCI-specific default configuration in `/etc/ssh/ssh_config`:
```
# BEGIN ANSIBLE MANAGED BLOCK
Host *
StrictHostKeyChecking no     <------ this particular line
HashKnownHosts no
SendEnv LANG LC_*
# END ANSIBLE MANAGED BLOCK
```

libssh will consult configuration files on hard-coded default system
locations and alter its behavior based on settings found in them.

This libssh behavior is present in all supported versions:
5a2abd34ce
https://gitlab.com/libssh/libssh-mirror/-/tags/libssh-0.9.0

It means the existing disable logic based on libssh version worked by
coincidence, and what needs to be checked is these configurations
to decide if it's safe to run the test. Another, simpler option is
to also accept the result code 67, though in that case the test
wouldn't actually test what we want, but would pass anyway.

With the old `oldlibssh` workaround deleted, and the problematic setting
manually overridden (`StrictHostKeyChecking yes`):
- CircleCI Ubuntu 20.04 passes with 1459 enabled:
  https://app.circleci.com/pipelines/github/curl/curl/16483/workflows/87a9f389-76a2-4a32-acde-c0b411a4c842/jobs/155302
- CircleCI Ubuntu 22.04 does too:
  https://app.circleci.com/pipelines/github/curl/curl/16483/workflows/87a9f389-76a2-4a32-acde-c0b411a4c842/jobs/155303

To fix, replace the `runtests` `oldlibssh` detection logic to parse
libssh config files (instead of checking for libssh version) and disable
test 1459 based on that. Notice the detection is making a light attempt
to parse these files, and does not implement most config file features
(such as includes, quoted values and `=` operator.)

The new runtests workaround tests OK with the:
- default CircleCI configuration, disabling 1459 automatically.
- a sudoless configuration fix, with 1459 run successfully.
  Also keep setting this option in CircleCI jobs.
- a sudo configuration fix, with 1459 run successfully.
Ref: https://app.circleci.com/pipelines/github/curl/curl/16492/workflows/56f39335-97ba-412c-9a9b-3d662694375a

GHA jobs are not affected and they work fine, with 1459 running successfully
before and after this patch.

It's possible the libssh API offers ways to control config file use
and/or set the strict host checking option programatically. Maybe
to enable in debug mode (albeit CircleCI job are not debug-enabled),
or offer an option for them. It may be something for a future patch.

Follow-up to 23540923e1 #8622
Follow-up to 4b01a57c95 #8548
Follow-up to bdc664a640 #8490
Follow-up to 7c140f6b2d #8444

Ref: 6d9c5c91b9 #19549

Closes #19557
2025-11-16 23:28:44 +01:00
..
certs configure: if no perl, disable unity and shell completion, related tidy ups 2025-08-04 14:55:10 +02:00
cmake lib: stop overriding system printf symbols 2025-10-06 20:57:59 +02:00
data runtests: detect bad libssh differently for test 1459 (fixing CircleCI libssh job) 2025-11-16 23:28:44 +01:00
http test07_22: fix flakiness 2025-11-14 17:06:23 +01:00
libtest build: drop Windows CE / CeGCC support 2025-11-15 15:35:23 +01:00
server build: drop Windows CE / CeGCC support 2025-11-15 15:35:23 +01:00
tunit lib: stop overriding system printf symbols 2025-10-06 20:57:59 +02:00
unit tidy-up: result code variable names in tests and examples 2025-11-14 01:47:12 +01:00
.gitignore tidy-up: .gitignore lines mostly 2025-01-27 20:59:46 +01:00
allversions.pm scripts: enable strict warnings in Perl where missing, fix fallouts 2025-07-27 22:35:18 +02:00
appveyor.pm tidy-up: whitespace (more in Perl) 2025-07-12 08:59:44 +02:00
azure.pm runtests: fix quoting in Appveyor and Azure test integration 2023-04-22 11:50:03 -07:00
CMakeLists.txt tests: replace remaining CR bytes with the new macro %CR 2025-11-06 20:45:45 +01:00
config.in copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
configurehelp.pm.in build: use configurehelp.pm.in with autotools and cmake 2024-09-21 12:21:14 +02:00
devtest.pl tests/data: support using native newlines on disk, drop .gitattributes 2025-11-10 14:21:34 +01:00
dictserver.py tidy-up: align MSYS2/Cygwin codepaths, follow Cygwin MAX_PID bump 2025-02-21 11:58:05 +01:00
directories.pm scripts: fix perl indentation, whitespace, semicolons 2025-04-29 19:35:55 +02:00
ech_combos.py tidy-up: whitespace [ci skip] 2024-04-16 09:53:39 +02:00
ech_tests.sh badwords: re-sync with curl-www, fix issues found 2025-11-12 00:53:44 +01:00
ftpserver.pl tests: remove trailing spaces in server responses 2025-11-05 15:17:29 +01:00
getpart.pm runtests: add missing Perl semicolon 2025-11-13 11:41:12 +01:00
globalconfig.pm tests: replace remaining CR bytes with the new macro %CR 2025-11-06 20:45:45 +01:00
http-server.pl runtests: support multi-target cmake, drop workarounds from CI 2025-02-24 21:00:30 +01:00
http2-server.pl tests: fix perl warnings in http2-server, http3-server 2025-07-30 14:21:17 +02:00
http3-server.pl tests: fix perl warnings in http2-server, http3-server 2025-07-30 14:21:17 +02:00
Makefile.am tests: replace remaining CR bytes with the new macro %CR 2025-11-06 20:45:45 +01:00
memanalyze.pl memanalyze: fix warnings 2025-07-28 12:43:02 +02:00
negtelnetserver.py tidy-up: align MSYS2/Cygwin codepaths, follow Cygwin MAX_PID bump 2025-02-21 11:58:05 +01:00
nghttpx.conf copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
pathhelp.pm perlcheck: add script, run in CI, fix fallouts 2025-09-26 14:47:33 +02:00
processhelp.pm processhelp.pm: log taskkill pid info, add debug envs, enable in CI 2025-11-10 02:00:17 +01:00
requirements.txt GHA: bump the pip-dependencies group across 2 directories with 3 updates 2025-11-02 17:10:39 +01:00
rtspserver.pl runtests: support multi-target cmake, drop workarounds from CI 2025-02-24 21:00:30 +01:00
runner.pm runtests: allow client/command to span multiple lines, and use it 2025-11-13 01:05:01 +01:00
runtests.pl runtests: detect bad libssh differently for test 1459 (fixing CircleCI libssh job) 2025-11-16 23:28:44 +01:00
secureserver.pl tests: Add https-mtls server to force client auth 2025-04-07 08:46:56 +02:00
serverhelp.pm runtests: assume Time::HiRes, drop Perl Win32 dependency 2025-08-14 16:34:06 +02:00
servers.pm perlcheck: add script, run in CI, fix fallouts 2025-09-26 14:47:33 +02:00
smbserver.py runtests: drop Python 2 support remains 2025-11-16 00:52:41 +01:00
sshhelp.pm runtests: fix test key format for libssh2 WinCNG (and others) 2025-03-23 20:26:26 +01:00
sshserver.pl tidy-up: whitespace 2025-07-11 13:32:54 +02:00
test745.pl perlcheck: add script, run in CI, fix fallouts 2025-09-26 14:47:33 +02:00
test971.pl scripts: enable strict warnings in Perl where missing, fix fallouts 2025-07-27 22:35:18 +02:00
test1119.pl docs: add CURLOPT type change history, drop casts where present 2025-08-02 00:05:33 +02:00
test1132.pl tests: rename tests scripts to the test number 2023-12-08 12:53:17 +01:00
test1135.pl tidy-up: whitespace (more in Perl) 2025-07-12 08:59:44 +02:00
test1139.pl badwords: re-sync with curl-www, fix issues found 2025-11-12 00:53:44 +01:00
test1140.pl badwords: re-sync with curl-www, fix issues found 2025-11-12 00:53:44 +01:00
test1165.pl tidy-up: whitespace (more in Perl) 2025-07-12 08:59:44 +02:00
test1167.pl tidy-up: whitespace (more in Perl) 2025-07-12 08:59:44 +02:00
test1173.pl badwords: re-sync with curl-www, fix issues found 2025-11-12 00:53:44 +01:00
test1175.pl scripts: enable strict warnings in Perl where missing, fix fallouts 2025-07-27 22:35:18 +02:00
test1177.pl NTLM_WB: drop support 2024-04-08 13:58:58 +02:00
test1222.pl badwords: re-sync with curl-www, fix issues found 2025-11-12 00:53:44 +01:00
test1275.pl scripts: enable strict warnings in Perl where missing, fix fallouts 2025-07-27 22:35:18 +02:00
test1276.pl scripts: enable strict warnings in Perl where missing, fix fallouts 2025-07-27 22:35:18 +02:00
test1477.pl badwords: re-sync with curl-www, fix issues found 2025-11-12 00:53:44 +01:00
test1486.pl writeout: add %time{} 2025-08-04 23:45:48 +02:00
test1488.pl scripts: enable strict warnings in Perl where missing, fix fallouts 2025-07-27 22:35:18 +02:00
test1544.pl scripts: fix perl indentation, whitespace, semicolons 2025-04-29 19:35:55 +02:00
test1707.pl scripts: enable strict warnings in Perl where missing, fix fallouts 2025-07-27 22:35:18 +02:00
testcurl.pl perlcheck: add script, run in CI, fix fallouts 2025-09-26 14:47:33 +02:00
testutil.pm tests/data: add %includetext, dedupe XML payloads into external file 2025-11-13 12:24:50 +01:00
tftpserver.pl tests: Remove unused variables 2025-03-22 11:12:29 -07:00
util.py runtests: drop Python 2 support remains 2025-11-16 00:52:41 +01:00
valgrind.pm tests/valgrind.pm: fix warnings with no valgrind report to show 2024-09-20 15:40:07 +02:00
valgrind.supp hyper: drop support 2024-12-21 11:33:05 +01:00