1
0
mirror of https://github.com/libssh2/libssh2.git synced 2026-10-28 17:01:54 +03:00
Commit Graph

119 Commits

Author SHA1 Message Date
Viktor Szakats
2ded2f95c5 tidy-up: prefer term 'container' over 'docker'
To reflect the support for multiple container engines, and to make
terminology more consistent and implementation-agnostic.

Also:
- add FIXME for `docker-machine ip` command that has been dropped
  upstream.

Follow-up to 9bd1f16dc2 #2605

Closes #2609
2026-09-13 11:54:32 +02:00
Viktor Szakats
9a0b40af73 tidy-up: version-related comments and messages
If it improves consistency across builds and sources, prefer 'greater'
or newer/later/+, prefer no 'v'/'version` prefix.

Closes #1866
2026-08-27 03:25:32 +02:00
Viktor Szakats
8563c38383 build: assume POSIX gettimeofday() in fallback codepath, stop detecting it
The codebase no longer relies on `gettimeofday()`. It still serves as an
unconditional fallback in `ssh2_now()` on non-Windows, if no modern
alternative exists. Let us know if this causes an issue.

To simplify, make configure fast, and avoid the detection discrepancy
between autotools and cmake.

Follow-up to 0d998d16c0 #2494
Follow-up to 694d38e33e #2493
Follow-up to a43dc6d504 #2490
Follow-up to 04665fedff #2491
Follow-up to c97959e9b6 #2489
Follow-up to 9c421761bc #2341

Closes #2485
2026-08-03 03:54:47 +02:00
Viktor Szakats
a78e2c0ca9 build: assume sys/socket.h on non-Windows
Drop feature detection for it at configure time.

To simplify, improve configure performance, make examples build better
standalone, and sync with curl.

Closes #2467
2026-08-01 11:33:12 +02:00
Viktor Szakats
24d4014194 build: assume sys/time.h on non-Windows and mingw-w64
Drop feature detection for it at configure time.

To simplify, improve configure performance, make examples build better
standalone, and sync with curl.

Closes #2466
2026-08-01 10:59:20 +02:00
Viktor Szakats
f7cdcd728c build: assume POSIX select() is available
`select()` was used unconditionally in internal function
`ssh2_wait_socket()`, when `poll()` is not available, since
9d55db6501 (2007-02-02, release 0.15)

It means the build was broken without `select()` in such case. There
were also no reports about this being an issue. Therefore detecting it
at configure time is superfluous.

Drop feature detections, and drop `libssh2_poll()` implementation
fallback logic dealing with an impossible no-poll-no-select build.

Follow-up to 9d55db6501

Closes #2464
2026-08-01 00:32:27 +02:00
Viktor Szakats
fcc86f847e autotools: assume select() on Windows
Save a slow detection, `select()` is present in all supported Windows
versions.

Closes #2461
2026-07-31 22:15:32 +02:00
Viktor Szakats
4834015071 autotools: fix memset_s() detection
To also check for the prototype, avoiding mis-detection e.g. in C89
(non-GNU) mode with Apple targets, and syncing this detection with
CMake.

Also: test C89 macOS builds in CI with both autotools and cmake.

Follow-up to 833b48519c #2456
Ref: 6f0dcc3e66 #2455

Closes #2457
2026-07-31 21:58:23 +02:00
Viktor Szakats
833b48519c src: replace banned strto*() number parsing with local function
Copy `curlx_str_number()` from curl, reduced to libssh2 needs by
dropping hex support and to have only one API entry, and reindented.

To replace `strtol()`, `strtoll()`, `stroi64()`. The new solution is
portable, no longer requires elaborate build-time detection, does
provide error handline, supports values limits and is const-friendly.

The new function does not skip leading spaces compared to the
replaced ones.

This should also fix C89 macOS builds where autotools configure
misdetected `strtoll()` and break the build, before this patch.

Refs:
d5c738c608
https://github.com/curl/curl/pull/15692

Credits-to: Daniel Stenberg

Closes #2456
2026-07-31 21:23:06 +02:00
Viktor Szakats
6f0dcc3e66 build: improve/extend clear memory API detection
- detect `explicit_bzero()` and `explicit_memset()` in-source, in favor of
  detection via autotools/cmake configure.

- detect and use `memset_explicit()`, if `memset_s()` is unavailable.

- reorder detection to prioritize standard functions.

`memset_s()` remains detected using `AC_CHECK_FUNCS()`, which is not
equivalent to the method used with CMake, and which is not accurate in
certain cases, e.g. when building for Apple using `--std=c89`, where the
detection succeeds, but compilation fails due to prototype missing. I
leave it at this because this combination is already broken due to
`strtoll()` suffering from the same issue. They could be fixed by using
more comprehensive (also slower) detection in autotools, but since it
was never reported, I assume it's not affecting many users.

If this is causing an issue, work around by setting envs
`ac_cv_func_memset_s=0`, `ac_cv_func_strtoll=0`, or by using CMake.

Refs:
066478f634
https://github.com/curl/curl/pull/21598
982e2e8c75
https://github.com/curl/curl/pull/21989

Closes #2455
2026-07-31 14:13:13 +02:00
Viktor Szakats
5b74ac4b0d build: drop CLEAR_MEMORY=NO and --disable-clear-memory options
Drop autotools option `--disable-clear-memory`, CMake option
`-DCLEAR_MEMORY=NO`.

Keep this option always enabled. If there is not API support, use the
local fallback.

Introduce a temporary CPPFLAG to disable system memory clearing
functions, in case they cause a build issue.

Follow-up to a0e424a51c #810

Closes #2454
2026-07-30 17:36:20 +02:00
Viktor Szakats
be18d596c0 build: assume standard snprintf()
Stop detecting standard `snprintf()`, and expect it to be available.

Except for the only known platform where it's missing: Visual Studio
2013 and older, where we keep using the existing local implementation.

`snprintf()` was already required to build examples and tests.

Closes #2326
2026-07-16 03:55:53 +02:00
Viktor Szakats
49738e7e09 build: add option to enable Unicode mode (Windows)
autotools: `--enable-windows-unicode`.
cmake: `-DENABLE_UNICODE=ON`.

Also:
- automatically enable in UWP builds.
- test in CI, with both autotools and cmake and both mingw-w64 and MSVC.

Closes #2321
2026-07-15 16:39:30 +02:00
Viktor Szakats
787e9bfec2 session: drop alloca() use from libssh2_poll()
Use fixed stack buffer when requested 256 sockets or less. Allocate from
heap otherwise.

There is no other `alloca()` user, so drop detecting it via autotools
(CMake never got support for this). Also re-enable a warning option that
was incompatible with autotools's `AC_FUNC_ALLOCA` code.

This patch may reduce performance when polling 257+ sockets (due to
calloc/free), and comes with higher stack use ('256 * sizeof(struct
pollfd)') than before this patch, when using `poll()` (typically on Unix
platforms except Darwin and Interix).

Note: `libssh2_poll()` is deprecated since v1.2.0 (2009-08-10).

Follow-up to 209d06d6c9

Closes #2041
2026-06-12 11:36:57 +02:00
Viktor Szakats
b90a38c1c9 tidy-up: miscellaneous
- configure: use `dnl`-style comments consistently (where possible).
- configure: drop stray spaces.
- wincng: replace Windows-specific type in `memcpy()` casts.
- drop FIXME added incorrectly in a recent commit.
  Follow-up to ecf39b3634 #1984
  Follow-up to ff50682c23 #1679
- replace more synonyms with 'null-terminated'.
- unfold strings, comments and code lines.
- reflow lines, fix indent.

Closes #1995
2026-06-07 17:55:08 +02:00
Viktor Szakats
04ecdb22fe build: update picky warning options, fix fallouts
- sync picky compiler warning options with curl:
  - update version mappings for latest Apple clang.
  - replace `-pedantic` with `-Wpedantic` on newer toolchains.
  - adjust warning cutoff versions.
  - enable new picky warnings.
  - unlock picky warnings for most recent MSVC.
- GHA: bump some MSVC jobs to to VS2026.

Fix fallouts:
- configure: replace `-I` with `-isystem` for dependency headers.
  Notably it silences picky warnings otherwise found in 3rd-party
  headers, e.g. `-Wreserved-identifier` in `gpg-error.h`,
  `openssl/lhash.h`, `wolfssl/wolfcrypt/hmac.h`, or
  `-Wcast-function-type-strict` in `openssl/rsa.h`.
  It also aligns autotools builds with CMake (and curl builds).
  Logic copied from curl.
- example/x11: fix to not use reserved symbols.
- include, src/libssh2_priv.h: silence `-Wreserved-identifier` locally.
  May be fixed for real in a future patch.
- avoid using reserved C++ keyword `public`.
- openssl: silence `-Wcast-function-type-strict` locally for
  non-OpenSSL3 builds.
- mbedtls, openssl: fix potentially uninitialized variable warnings.
  (extend to all compilers from MSVC in openssl)
- fix `LIBSSH2_SOCKET_MASK` signedness on Windows.
- wincng: apply casts from `int` to `enum` to silence
  `-Wimplicit-int-enum-cast`.
- configure: disable `-Wleading-whitespace=spaces` to due
  incompatibility with `AC_FUNC_ALLOCA`.
- packet: fix to pass `int` as mask length.
- fix `-Wformat-signedness`.
- src/libssh2_priv.h: silence `-Wreserved-macro-identifier` locally for
  mingw-w64 builds.
- GHA: add workaround for missing NSIS on windows-2025 runner images.

Closes #1972
2026-06-07 15:19:19 +02:00
Viktor Szakats
e6625c5440 build: improve in-source inline detection, drop from ./configure
To make it work better and work the same for both build systems.

Also: replace redefining system symbol by using local macro
`SSH2_INLINE`.

Credits-to: Evgeny Grin (Karlson2k)

Ref: cbe41d151d
Ref: https://github.com/curl/curl/pull/12897

Closes #1990
2026-06-07 11:54:58 +02:00
Viktor Szakats
a1665da67d configure: drop unused feature checks
Also drop an unused macro from `os400/libssh2_config.h`.

Closes #1989
2026-06-05 18:12:37 +02:00
Viktor Szakats
9538c99fc4 badwords: add checker script, fix issues found
Checker script and wordlist comes from curl.

Also:
- checksrc.pl: sync up with curl.
- unfold an IETF URL.
- update all IETF URLs where missing.

Closes #1959
2026-06-01 13:22:40 +02:00
Viktor Szakats
226835760f build: fix two issues when generating libssh2.pc
- cmake: fix potential non-lib option prefixed with `-l`, resulting in
  e.g. `-l-pthread`.
  Ref: https://github.com/curl/curl/pull/21654

- omit zlib pkg-config reference for Android.
  Android does not offer a `zlib.pc` pkg-config file.
  Refs:
  7bde6cb9fc
  https://github.com/curl/curl/pull/21648

Closes #1946
2026-05-17 22:47:08 +02:00
Viktor Szakats
9f4a270857 configure: drop old, vendored, ld detection code, merge and rename rest
Keep `lib-link.m4`, rename to `libssh2-link.m4`, namespace its content
to `LIBSSH2_`. Also copy 3 lower-level functions from another `.m4`.
Drop using vendored `AC_LIB_PROG_LD`, which served the purpose of
detecting `LD` and `with_gnu_ld`.

To reduce amount of old, complex vendored code and also to avoid
autoreconf auto-updating these in-repo files locally.

Follow-up to 0443145a75 #1920
Follow-up to bcc9292aab #1921

Closes #1916
2026-05-11 14:27:13 +02:00
Viktor Szakats
bcc9292aab configure: drop using m4_set to simplify
Cherry-picked from #1916

Closes #1921
2026-05-11 11:45:49 +02:00
Viktor Szakats
3d4ff6b240 tidy-up: miscellaneous
- configure: fix indent, whitespace, drop empty comments.
- .gitignore: drop `.DS_Store` (again)
  Keep this list for files created by libssh2. For other files, the
  per-machine global Git ignore file is a better place, and it fixes
  this for all repos, not just libssh2.

Closes #1842
2026-04-10 18:39:11 +02:00
Viktor Szakats
6e56a8bdca tidy-up: drop duplicate newlines, fix non-ASCII chars, other formatting, check in CI
Closes #1766
2025-12-25 22:24:13 +01:00
Viktor Szakats
b889b39945 docs: convert man page sources to "curldown" format
To render in Git webviews as-is, to make it easier to edit, verify,
and to sync up with curl.

- add options to not build the `.3` man pages:
  - autotools: `--disable-docs`
  - cmake: `LIBSSH2_BUILD_DOCS=OFF`
- building `.3` man pages requires Perl after this patch.
- drop `mansyntax` and the shell / `grep` / GNU `man` tool requirements with it.
- scripts and most logic were copied from curl.
- add `cd2nroff` from curl, with edits to relax curl-specific checks.
- used `nroff2cd` (from curl) to convert from `.3` to `.md`. Then
  manually fixed copyrights, inline function references and a couple
  of other things.

Credits-to: Daniel Stenberg

Ref: eefcc1bda4
Ref: https://github.com/curl/curl/pull/12730
Ref: https://github.com/libssh2/www/issues/25#issuecomment-3289431671

Closes #1660
2025-10-09 04:05:38 +02:00
Viktor Szakats
2677d3b087 build: stop detecting sys/param.h header
This header is no longer used.

Follow-up to 12427f4fb8 #1415
Closes #1418
2024-07-04 01:59:58 +02:00
Viktor Szakats
790b1178eb autotools: delete bogus square bracket from help text [ci skip]
Follow-up to 3f98bfb090 #1368
2024-04-25 17:33:27 +02:00
Viktor Szakats
3f98bfb090 wincng: add to ci/GHA, add ./configure option --enable-ecdsa-wincng
- add `./configure` option `--enable-ecdsa-wincng`

- add WinCNG autotools jobs to GHA.

- enable WinCNG ECDSA in some GHA jobs (both CMake and autotools).

Follow-up to 3e72343737 #1315
Closes #1368
2024-04-14 02:44:38 +00:00
Viktor Szakats
3ec53f3ea2 build: enable -pedantic-errors
According to the manual, this isn't the same as `-Werror -pedantic`.
Enable it together with `-Werror`.

https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-pedantic-errors-1

This option results in autotools feature detection going into crazies.
To avoid this, we add it to `CFLAGS` late. Idea copied from curl.

This option has an effect only with gcc 5.0 and newer as of this commit.
Let's enable it for clang and older versions too for simplicity. Ref:
d5c0351055
https://github.com/curl/curl/pull/2747

Closes #1286
2023-12-17 15:15:34 +00:00
Viktor Szakats
e051ae343a autotools: delete --disable-tests option, fix CI tests
Originally added to improve build performance by skipping building
tests. But, there seems to be no point in this, because autotools
doesn't build tests by default, unless explicitly invoking
`make check`.

Delete this option from Cygwin and FreeBSD CI tests, where it caused
`make check` to do nothing. Tests are built now, and runtime tests are
too, where supported.

Also disable Docker-based tests for these, and add a missing `make -j3`
for FreeBSD.

Reverts 7483edfada #715

Closes #1271
2023-12-06 00:55:15 +00:00
ren mingshuai
b1414503f5 build: add LIBSSH2_NO_DEPRECATED option (#1266)
The following APIs have been deprecated for over 10 years and
use `LIBSSH2_NO_DEPRECATED` to mark them as deprecated:

libssh2_session_startup()
libssh2_banner_set()
libssh2_channel_receive_window_adjust()
libssh2_channel_handle_extended_data()
libssh2_scp_recv()

Add these options to disable them:
- autotools: `--disable-deprecated`
- cmake: `-DLIBSSH2_NO_DEPRECATED=ON`
- `CPPFLAGS`: `-DLIBSSH2_NO_DEPRECATED`

Fixes #1259
Replaces #1260
Co-authored-by: Viktor Szakats
Closes #1267
2023-12-06 00:14:53 +01:00
Viktor Szakats
a3f5594a96 autotools: show the default for hidden-symbols option
Closes #1269
2023-12-05 02:14:23 +00:00
Viktor Szakats
e9017b1046 acinclude.m4: revert accidental edit [ci skip]
Follow-up to 8c320a93a4
2023-11-20 01:48:33 +00:00
Viktor Szakats
8c320a93a4 acinclude.m4: re-sync with curl [ci skip] 2023-11-18 16:04:53 +00:00
Viktor Szakats
00a3b88c51 autotools: fix selecting wincng in cross-builds (and more)
- Fix explicitly selecting WinCNG in autotools cross-builds by moving
  `windows.h` header check before the WinCNG availability check.
  Follow-up to d43b8d9b0b

  Reported-by: Jack L
  Fixes #1186

- Add Linux -> mingw-w64 cross-builds for autotools and CMake. This
  doesn't detect #1186, because that happened when explicitly specifying
  WinCNG via `--with-crypto=wincng`, but not when falling back to WinCNG
  by default.

- autotools: fix to strip suffix from gcc version

  Before this patch we expected `n.n` `-dumpversion` output, but Ubuntu
  may return `n-win32` (also with `-dumpfullversion`). Causing these
  errors and failing to enable picky warnings:
  ```
  ../configure: line 23845: test: : integer expression expected
  ```
  Ref: https://github.com/libssh2/libssh2/actions/runs/6263453828/job/17007893718#step:5:143

  Fix that by stripping any dash-suffix.

  gcc version detection is still half broken because we translate '10'
  to '10.10' because `cut -d. -f2` returns the first word if the
  delimiter missing.

  More possible `-dumpversion` output: `10-posix`, `10-win32`,
  `9.3-posix`, `9.3-win32`, `6`, `9.3.0`, `11`, `11.2`, `11.2.0`
  Ref: https://github.com/mamedev/mame/pull/9767

Closes #1187
2023-09-21 15:21:15 +00:00
Viktor Szakats
d43b8d9b0b ci: add MSYS builds (autotools and cmake)
Use existing MSYS2 section and extend it with builds for the MSYS
environment with both autotools and cmake.

MSYS builds resemble Cygwin ones: The env is Unixy, where Windows
headers are all available but we don't use them.

Also:

- extend existing autotools logic for Cygwin to skip detecting
  `windows.h` for MSYS targets too.

- require `windows.h` for the WinCNG backend in autotools. Before this
  patch, autotools allowed selecting WinCNG on the Cygwin and MSYS
  platforms, but the builds then fell apart due to the resulting mixed
  Unixy + Windowsy environment. The general expectation for Cygwin/MSYS
  builds is not to use the Windows API directly in them.

- stop manually selecting the `MSYS Makefiles` CMake generator for
  MSYS2-based GHA CI builds. mingw-w64 builds work fine without it, but
  it broke MSYS build which use `Unix Makefiles`. Deleting this setting
  fixes all build flavours.

Closes #1162
2023-08-14 23:10:15 +00:00
Viktor Szakats
5720dd9fe0 build: tidy-up libssh2.pc.in variable names
- prefix with `LIBSSH2_PC_`

- match with the names of `pkg-config` values.

- use the same names in autotools and CMake scripts.

- use `LIBSSH2_VERSION` for the version number in autotools scripts,
  to match the name used in CMake.

Closes #1125
2023-07-18 20:45:14 +00:00
Viktor Szakats
624abe275f libssh2.pc: re-add & extend support for static-only libssh2 builds
Adapted for libssh2 from the curl commit message by James Le Cuirot:

"A project built entirely statically will call `pkg-config` with
`--static`, which utilises the `Libs.private:` field. Conversely it will
not use `--static` when not being built entirely statically, even if
there is only a static build of libssh2 available. This will most
likely cause the build to fail due to underlinking unless we merge the
`Libs:` fields.

Consider that this is what the Meson build system does when it generates
`pkg-config` files."

This patch extends the above to `Requires:`, to mirror `Libs:` with
`pkg-config` package names.

Follow-up to 1209c16d93 #1114

Ref: https://github.com/libssh2/libssh2/pull/1114#issuecomment-1634334809
Ref: 98e5904165
Ref: https://github.com/curl/curl/pull/5373
Closes #1119
2023-07-18 15:18:50 +00:00
Viktor Szakats
7f83de14a0 autotools: use comma separator in Requires.private of libssh2.pc
In `Requires*:`, the documented name separator is comma. We already used
it in the CMake-generated `libssh2.pc`. Adjust the autotools-generated
one to use it too, instead of spaces.

Ref: https://linux.die.net/man/1/pkg-config
Ref: d97db4fae4/pkg-config.1

Closes #1124
2023-07-14 21:08:44 +00:00
Daniel Stenberg
f6aa31f48f provide SPDX identifiers
- All files have prominent copyright and SPDX identifier
- If not embedded in the file, in the .reuse/dep5 file
- All used licenses are in LICENSES/ (not shipped in tarballs)
- A new REUSE CI job verify that all files are OK

Assisted-by: Viktor Szakats

Closes #1084
2023-06-07 08:18:55 +02:00
Daniel Stenberg
f4f52ccc4d configure.ac: remove AB_INIT
Not used. Remove m4/autobuild.m4 as well
2023-06-05 19:33:09 +02:00
Viktor Szakats
003fb454c3 tidy-up: avoid exclamations, prefer single quotes, in outputs
Closes #1079
2023-06-03 12:51:56 +00:00
Viktor Szakats
c89174a78b autotools: improve libz position
We repositioned crypto libs in 4f0f4bff5a
via #941 and subsequently in d4f58f0343
from d93ccf4901 via #1013.

This patch moves libz accordingly, to unbreak certain build scenarios.

Reported-by: Kenneth Davidson
Regression from 4f0f4bff5a #941
Fixes #1075
Closes #1077
2023-06-01 09:17:40 +00:00
Xi Ruoyao
572c57c9d8 autotools: skip tests requiring static lib if --disable-static (#1072)
Co-authored-by: Viktor Szakats
Regression from 83853f8aea #663
Fixes #1056
2023-05-31 15:03:11 +02:00
Viktor Szakats
62178a367a tests: add cmake/autotools options to disable running tests
autotools:
- `--disable-docker-tests`
- `--disable-sshd-tests`

cmake:
- `RUN_DOCKER_TESTS`
- `RUN_SSHD_TESTS`

Update automake and ci to use this new flag and delete former logic
of relying on Windows detection and `HOST_WINDOWS`. Also fix honoring
this when running `test_read_algos.test`.

This allows to disable these individually and on per-CI/local-job basis.
To run as much tests as the env allows.

Cherry-picked from #1017
2023-05-03 15:01:53 +00:00
Viktor Szakats
7aab5bd6f9 build: fix autoreconf warnings
- update `AC_HELP_STRING' to 'AS_HELP_STRING`:
  ```
  configure.ac:[...]: warning: The macro `AC_HELP_STRING' is obsolete.
  ```
  "AC_HELP_STRING is deprecated in 2.70+ and I believe AS_HELP_STRING works
  already since 2.59 so bump the minimum required version to that."

  Ref: a59f046116

- simplify to avoid:
  ```
  src/Makefile.inc:48: warning: variable 'EXTRA_DIST_SOURCES' is defined but no program or
  src/Makefile.inc:48: library has 'DIST' as canonical name (possible typo)
  ```
  Regression from 2c18b6fc8d

- `AC_TRY_LINK`/`AC_TRY_COMPILE`:
  ```
  configure.ac:335: warning: The macro `AC_TRY_COMPILE' is obsolete.
  configure.ac:335: warning: The macro `AC_TRY_LINK' is obsolete.
  ```

- `libtool`-related ones:
  ```
  configure.ac:70: warning: The macro `AC_LIBTOOL_WIN32_DLL' is obsolete.
  configure.ac:70: warning: AC_LIBTOOL_WIN32_DLL: Remove this warning and the call to _LT_SET_OPTION when you
  configure.ac:70: put the 'win32-dll' option into LT_INIT's first parameter.
  configure.ac:71: warning: The macro `AC_PROG_LIBTOOL' is obsolete.
  ```
  Using code copied from curl:
  9ce7eee070/m4/xc-lt-iface.m4 (L157-L163)

- delete commented and obsolete `AC_HEADER_STDC`.

- formatting.

Most cherry-picked from `autoupdate` updates.

Cherry-picked from #1017
Closes #1021
2023-05-03 01:09:15 +00:00
Viktor Szakats
d93ccf4901 ci: add macOS CI jobs + fix issues revealed
Add macOS CI jobs, both cmake and autotools for all supported crypto
backends (except BoringSSL), with debug, zlib enabled. Without running
tests. It also introduces OpenSSL 1.1 into the CI with a non-MSVC
compiler.

Credits to curl's `macos.yml`, that I used as a base.

Fix these issues uncovered by the new tests:

- openssl: fix warning when built with wolfSSL, or OpenSSL 1.1 and
  earlier. CI missed it because apparently the only OpenSSL 1.1 test
  we had used MSVC, which did not complain.

  ```
  ../src/openssl.c:3852:19: error: variable 'sslError' set but not used [-Werror,-Wunused-but-set-variable]
      unsigned long sslError;
                    ^
  ```

  Regression from 097c8f0dae

- pem: add hack to build without MD5 crypto-backend support.

  The Homebrew wolfSSL build comes with MD5 support disabled. We can
  expect this becoming the norm. FIPS also requires MD5 disabled.

  We deleted the same hack from `hostkey.c` a month ago:
  ad6aae302a

  A better fix would be to guard the MD5 logic with our `LIBSSH2_MD5`
  macro.

  ```
  pem.c:214:32: error: use of undeclared identifier 'MD5_DIGEST_LENGTH'; did you mean 'SHA_DIGEST_LENGTH'?
          unsigned char secret[2*MD5_DIGEST_LENGTH];
                                 ^~~~~~~~~~~~~~~~~
                                 SHA_DIGEST_LENGTH
  ```

  Regression from 386e012292

- `configure.ac`: add crypto libs late.

  Fix it by adding crypto libs to `LIBS` at the end of the configuration
  process.

  Otherwise `configure` links crypto libs while doing feature tests,
  which can cause unwanted detections. For example LibreSSL publishes
  the function `explicit_bzero()`, which masks the system alternative,
  e.g. `memset_s()` on macOS. Then when trying to compile libssh2, its
  declaration is missing:

  ```
  bcrypt_pbkdf.c:93:5: error: implicit declaration of function 'explicit_bzero' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
      _libssh2_explicit_zero(ciphertext, sizeof(ciphertext));
      ^
  ../src/misc.h:50:43: note: expanded from macro '_libssh2_explicit_zero'
                                            ^
  ```

  Regression from 4f0f4bff5a

- cmake: fix to list our own include directory before the crypto libs',
  when building tests.

  Otherwise a global crypto header path, such as `/usr/local/include`,
  containing an external `libssh2.h` of a different version, could cause
  weird errors:

  ```
  cc -DHAVE_CONFIG_H -DLIBSSH2_LIBGCRYPT \
    -I../src -I../../src -I/usr/local/include -I[...]/libssh2/include \
    -g -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk  \
    -mmacosx-version-min=12.6 -MD -MT  \
    tests/CMakeFiles/test_aa_warmup.dir/test_aa_warmup.c.o \
    -MF CMakeFiles/test_aa_warmup.dir/test_aa_warmup.c.o.d  \
    -o CMakeFiles/test_aa_warmup.dir/test_aa_warmup.c.o -c \
    [...]/libssh2/tests/test_aa_warmup.c
  ```

  ```
  [ 62%] Building C object tests/CMakeFiles/test_aa_warmup.dir/test_aa_warmup.c.o
  In file included from /Users/runner/work/libssh2/libssh2/tests/test_aa_warmup.c:4:
  In file included from /Users/runner/work/libssh2/libssh2/tests/runner.h:42:
  In file included from /Users/runner/work/libssh2/libssh2/tests/session_fixture.h:43:
  /Users/runner/work/libssh2/libssh2/tests/../src/libssh2_priv.h:649:5: error: type name requires a specifier or qualifier
      LIBSSH2_AUTHAGENT_FUNC((*authagent));
      ^
  /Users/runner/work/libssh2/libssh2/tests/../src/libssh2_priv.h:649:30: error: type specifier missing, defaults to 'int' [-Werror,-Wimplicit-int]
      LIBSSH2_AUTHAGENT_FUNC((*authagent));
                               ^
  /Users/runner/work/libssh2/libssh2/tests/../src/libssh2_priv.h:650:5: error: type name requires a specifier or qualifier
      LIBSSH2_ADD_IDENTITIES_FUNC((*addLocalIdentities));
      ^
  /Users/runner/work/libssh2/libssh2/tests/../src/libssh2_priv.h:650:35: error: type specifier missing, defaults to 'int' [-Werror,-Wimplicit-int]
      LIBSSH2_ADD_IDENTITIES_FUNC((*addLocalIdentities));
                                    ^
  /Users/runner/work/libssh2/libssh2/tests/../src/libssh2_priv.h:651:5: error: type name requires a specifier or qualifier
      LIBSSH2_AUTHAGENT_SIGN_FUNC((*agentSignCallback));
      ^
  /Users/runner/work/libssh2/libssh2/tests/../src/libssh2_priv.h:651:35: error: type specifier missing, defaults to 'int' [-Werror,-Wimplicit-int]
      LIBSSH2_AUTHAGENT_SIGN_FUNC((*agentSignCallback));
                                    ^
  6 errors generated.
  ```

- `tests/session_fixture.h`: delete duplicate `libssh2.h`,
  `libssh2_priv.h` already includes it.

  Follow-up to a683133dfe

CI logs with these errors:
https://github.com/libssh2/libssh2/actions/runs/4824079094
https://github.com/libssh2/libssh2/actions/runs/4824270819

curl's `macos.yml`: da2470de96/.github/workflows/macos.yml

Tidying-up while here:

- tests/session_fixture.h: delete duplicate `libssh2.h`.
  `libssh2_priv.h` includes it already.

  Follow-up to a683133dfe

- ci.yml: yamllint warnings and formatting.

- ci.yml: msvc section formatting and step-naming sync with macOS.

  Follow-up to f4a4c05dc3

- ci.yml: enable `--enable-werror` for msys2 jobs.

  Follow-up to 71cae949d5

- appveyor.yml: show OpenSSL versions, link to image content.

Closes #1013
2023-04-28 13:59:38 +00:00
Viktor Szakats
d67aaaffc4 tidy-up: text nits, English contractions [ci skip]
In input/output text and docs mostly.
2023-04-27 14:19:03 +00:00
Viktor Szakats
5db836b2a8 libssh2_priv.h: assume HAVE_LONGLONG
Unless I'm missing something, it looks like `libssh2.h` has been using
`libssh2_int64_t` unconditionally since at least 2010-04-17 when
`libssh2_scp_send64()` landed via commit
be9ee7095e.

This makes it redundant to detect `HAVE_LONGLONG` to fallback to a
32-bit `scpRecv_size` in `libssh2_priv.h`. Then deal with possible
combinations of this flag and `strtoll()` options, which was
error-prone.

Instead, assume in `libssh2_priv.h` that we have `libssh2_int64_t`, and
use it always.

For MSVC, this means `_MSC_VER` `1310` (from year 2003) is now
required. Based on the above, this was already so before this patch.

If there happens to be no 64-bit `strtoll()` detected, fall back to the
32-bit `strtol()` (this should never happen with MSVC, and probably
neither with any other reasonably modern toolchain.)

Also make sure to set `HAVE_STRTOI64` for older, non-CMake, MSVC builds
(e.g. `Makefile.mk` or `NMakefile` ones).

Closes #1002
2023-04-26 16:46:05 +00:00
Viktor Szakats
f7e889b627 build: add autotools test_read support and more
Keep a single list for mac and crypt algos that we use in both CMake
and autotools. Use the same test names across build tools.

Use the TAP protocol to track individual tests run from a single shell
script.

Also:

- enable the rest of our tests with autotools.

- set `make check` verbose to see errors in case they happen.

- silence stray 'command not found' error when running `mansyntax.sh`
  on Windows.

GitHub Actions Windows docker tests disabled due to:
```
Command: docker build --quiet -t libssh2/openssh_server ../tests/openssh_server
Error running command 'docker build --quiet -t libssh2/openssh_server ../tests/openssh_server' (exit 1): Sending build context to Docker daemon  22.02kB
Step 1/42 : FROM debian:bullseye-slim
bullseye-slim: Pulling from library/debian
no matching manifest for windows/amd64 10.0.20348 in the manifest list entries
Failed to build docker image
```

Closes #993
2023-04-21 19:11:21 +00:00