1
0
mirror of https://github.com/libssh2/libssh2.git synced 2026-01-27 00:18:12 +03:00
Commit Graph

3018 Commits

Author SHA1 Message Date
Viktor Szakats
15752e5f0b ci/GHA: sync linux-mingw workflow with curl
To prepare for the addition of a clang-tidy job for Windows.

Cherry-picked from #1561
2025-03-24 14:06:28 +01:00
Viktor Szakats
64fafc78b0 transport: fix formatting
Cherry-picked from #1561
2025-03-24 14:06:28 +01:00
Viktor Szakats
6635880497 cmake: add clang-tidy support via LIBSSH2_CLANG_TIDY=ON
Cherry-picked from #1561
2025-03-24 14:06:24 +01:00
Viktor Szakats
e0681cdba9 build: drop crypto.c umbrella source
Instead build all crypto backend sources always, and exclude inactive
ones with guards.

To play better with code checkers and compilers that are blind to
included C sources, e.g. clang with certain compiler warnings and
clang-tidy.

We continue to include `blowfish.c`.

Follow-up to 4f0f4bff5a #941
Cherry-picked from #1561
2025-03-24 14:04:07 +01:00
Viktor Szakats
ddc4cf34da agent: merge agent_win.c into the main source
To play better with code checkers and compilers that are blind to
included C sources, e.g. clang with certain compiler warnings and
clang-tidy.

Follow-up to 4f0f4bff5a #941
Cherry-picked from #1561
2025-03-24 14:03:56 +01:00
Viktor Szakats
cf15fdd29f tests: use setfacl if available
Closes #1565
2025-03-24 10:07:27 +01:00
Viktor Szakats
902fc9574d cmake: replace deprecated CMAKE_COMPILER_IS_GNUCC
Closes #1564
2025-03-23 21:13:26 +01:00
Viktor Szakats
fb12d87e0e tests: improve SSHD default value
Instead of going for a hardcoded `/usr/sbin/sshd`, use `command -v`
to figure out the default `sshd` executable.

Closes #1563
2025-03-23 21:13:26 +01:00
Viktor Szakats
5930dc3c71 tests: add support for wine/qemu
To run test program via `wine`:
```shell
export LIBSSH2_TEST_EXE_RUNNER=wine
```

It prefixes commands with the specified runner. For systems where this
isn't automatic or supported, e.g. macOS.

Closes #1562
2025-03-23 21:13:25 +01:00
skuodi
6746b78970 mbedtls: Bug fix for gen_publickey_from_rsa (#1560)
Notes:
* Bug fix for gen_publickey_from_rsa
Increment buffer write pointer after writing modulus and after writing exponent.
Add 1 to modulus(bignum) size.

Credit:
skuodi
2025-03-20 13:47:47 -07:00
Viktor Szakats
df0563a857 cmake: make Find modules use INTERFACE
- move dependency properties (libs, libdirs, C flags, header dirs,
  pkg-config module names) from global lists to imported target
  `INTERFACE` properties. Rework FInd modules to return their results
  like this and update the libssh2 build process to use it. It makes
  Find modules re-usable from the cmake-config script by libssh2
  consumers, to integrate with libssh2 dependencies.

- define libssh2 dependencies as "imported targets" by the name:
  `libssh2::<depname>`, e.g. `libssh2::libgcrypt`.

- cmake-config: add fall-back logic for CMake without
  CMP0099 (v3.17 2020-03-20) to set lib directories.

- generate `libssh2.pc` based on imported target properties (instead of
  global lists).

- add target property dump debug function.

- ci/GHA: also test cmake integration on macOS.

Follow-up to 96d7f404e7 #1534

Closes #1535
2025-03-19 18:31:19 +01:00
Viktor Szakats
8ea6ae7213 cmake: add comment to inegration test
To show which command is requiring a specific cmake version.

Follow-up to 7d5a4c7651 #1529
2025-03-19 12:08:32 +01:00
Viktor Szakats
837ccb2d81 cmake: use GREATER_EQUAL
Requires CMake 3.7. Our current minimum.

Closes #1559
2025-03-15 03:12:39 +01:00
Viktor Szakats
94a099bc51 cmake: replace add_definitions() with directory props
To use modern CMake syntax.

Closes #1558
2025-03-15 03:12:38 +01:00
Justin Smith
d32ab16241 ci/GHA: add CI test for AWS-LC
* Adds AWS-LC (cmake, gcc, amd64) to the GitHub CI tests.
* Adds note on how to build w/ BoringSSL or AWS-LC in `INSTALL_CMAKE.md`

AWS-LC recently added CI integration tests for Libssh2 to the AWS-LC
GitHub repo to ensure that we maintain our compatibility with libssh2:
https://github.com/aws/aws-lc/pull/2222

I've verified this change by running the CI job on my fork, which
completed successfully:
https://github.com/justsmth/libssh2/actions/runs/13547314774/job/37862097664

Closes #1557
2025-03-15 03:12:38 +01:00
Viktor Szakats
c03eb8d379 comp: use z_const when zlib supports it
Also switch to zlib-specific types where missing.

Closes #1555
2025-03-11 01:38:17 +01:00
Will Cosgrove
c090b696c6 Session null checks to quiet fuzzer (#1556)
Update session.c. session.h

Make fuzzer happy on `session_startup()` with null session.
2025-03-04 17:11:09 -08:00
oss-patch
1ac1ff4438 kex.c: fix possible null pointer dereference in diffie_hellman_sha_algo() (#1508)
Notes:
PR Description:

Bug Type: Segv on unknown address
Summary: A vulnerability was discovered in the libssh2 program where an invalid memory access occurred due to dereferencing a NULL pointer. The issue was identified in the diffie_hellman_sha_algo function within kex.c.
Fix Summary: The patch resolves the issue by introducing a NULL pointer check for session->hostkey before dereferencing it. If the pointer is NULL, a corresponding error is returned, and the function exits gracefully. This fix ensures the program does not attempt to access invalid memory. The patch improves the security and stability of the program by preventing segmentation faults caused by invalid memory access.
2025-02-28 09:47:47 -08:00
Will Cosgrove
4beed72458 Return error if user KEX methods are invalid #1553 (#1554)
Notes:
Fixes #1553. Restores error case if user passes in invalid KEX method value to libssh2_session_method_pref.

Credit:
Amy Lin
2025-02-28 09:32:30 -08:00
Will Cosgrove
8cad398b0f _libssh2_base64_decode() handle malformed data (#1551)
Make sure to allocate enough space for malformed base64 encoded data.  Changed signed size values to unsigned to match input so we can't possibly truncate input.

Credit:
Stanislav Osipov
2025-02-27 11:46:52 -08:00
Will Cosgrove
2fb5803ce1 Fix possible double free if key in error cases (#1550)
Notes:
Fix possible double free of key in certain error cases. #1549

Credit:
Stanislav Osipov
2025-02-26 10:07:33 -08:00
Viktor Szakats
669b51a076 cmake: prefer CMAKE_INSTALL_PREFIX over --prefix (in tests)
Closes #1542
2025-02-17 18:43:49 +01:00
Viktor Szakats
a751d578be tidy-up: replace exit() with return
In examples and the manual page for `libssh2_version()`.

Closes #1541
2025-02-13 13:51:49 +01:00
Viktor Szakats
9642a96ef7 cmake: add missing quotes
For consistent initialization for `_sys_libdirs` and just for consistent
formatting in the other case.

Ref: https://github.com/curl/curl/pull/16233#issuecomment-2642603412
Follow-up to 3de8731ef2 #1540
2025-02-07 12:58:02 +01:00
Viktor Szakats
3de8731ef2 cmake: exclude CMAKE_C_IMPLICIT_LINK_DIRECTORIES from libssh2.pc
Co-authored-by: Kai Pastor
Ref: f72b848092
Ref: https://github.com/curl/curl/pull/16233
2025-02-07 12:01:35 +01:00
Viktor Szakats
d92de5951a cmake: initialize variables where missing
As detected using `cmake --warn-uninitialized`.

It also lists documented CMake global variables, which is unexpected:
`CMAKE_MODULE_PATH`, `CMAKE_IMPORT_LIBRARY_SUFFIX`.
I'd expect CMake to initialize its namespace.

https://cmake.org/cmake/help/latest/manual/cmake.1.html#cmdoption-cmake-warn-uninitialized

Closes #1539
2025-02-06 03:43:37 +01:00
Viktor Szakats
9da0ca3cde cmake: normalize before matching paths with syspaths
Requires CMake 3.20:
https://cmake.org/cmake/help/latest/command/cmake_path.html

Co-authored-by: Kai Pastor
Ref: 307e1f9878
Closes #1538
2025-02-06 01:11:04 +01:00
Viktor Szakats
eea97dbf0a cmake: ZLIB linkage tidy-ups
- drop adding redundant ZLIB manual include headers.
  It's done now via `ZLIB::ZLIB`.
  Follow-up to 96d7f404e7 #1534

- src: replace missed `ZLIB_LIBRARIES` with `ZLIB::ZLIB`.
  Follow-up to 96d7f404e7 #1534

- src: drop always true `ZLIB_FOUND` check.

Cherry-picked from #1535
2025-02-05 12:47:23 +01:00
Viktor Szakats
d07d12ae07 cmake: extend, not overwrite, CMAKE_REQUIRED_* values
Make sure to keep any previously added settings. For good measure;
this hasn't been an issue with libssh2 builds yet.

Cherry-picked from #1535
2025-02-05 12:40:40 +01:00
Viktor Szakats
1a9f7b4cdd cmake: avoid dupe target_link_libraries() commands in tests
Cherry-picked from #1535
2025-02-05 12:39:37 +01:00
Viktor Szakats
5f51c7a21a ci/GHA: limit ENABLE_ECDSA_WINCNG option to WinCNG
To avoid cmake warning:
```
CMake Warning:
  Manually-specified variables were not used by the project:

    ENABLE_ECDSA_WINCNG
```
https://github.com/libssh2/libssh2/actions/runs/13126062299/job/36622533686?pr=1535#step:3:88

Follow-up to 3f98bfb090 #1368
Cherry-picked from #1535
2025-02-05 12:37:22 +01:00
Viktor Szakats
96d7f404e7 cmake: make libssh2-config work with all TLS-backends
CMake:

- Find*: set `<modulename>_FOUND` for compatibility when found via
  `pkg-config`. E.g. `MbedTLS_FOUND`.
  `find_package_handle_standard_args()` sets both `<MODULENAME>_FOUND`
  and `<Modulename>_FOUND` when detecting the dependency. Some CMake
  code relies on this and 3rd-party code may rely on it too. Make sure
  to set the latter variant when detecting the dependency via
  `pkg-config`, where we don't call
  `find_package_handle_standard_args()`.

  CMake sets these variable to `TRUE` (not `ON` or `1`). Replicate this
  for compatibility.

- libssh2-config.cmake: inherit default `LIBSSH2_USE_PKGCONFIG`.
  Follow-up to a3aa6b4ca8 #1525

- document variables consumed by `libssh2-config.cmake.in`.

- `libssh2-config.cmake`: fix to link to non-OpenSSL crypto backends.
  This is most likely not how this is supposed to be done, but better
  than failing.
  What's the canonical way to do this, and how OpenSSL and zlib does it
  is yet to be figured out.

- use `ZLIB::ZLIB` to reference zlib.
- use `IN ITEMS` where missed.
- harmonize variable dump output formats.

CMake `find_package` integration tests:

- extend to all crypto backends (was: OpenSSL).
- show libssh2 variables set by `find_package()`.
- stop building examples and tests for the consumed package.
  For performance.
- enable zlib, for coverage.
- be verbose when building the test targets.

ci/GHA:

- add packaged mbedTLS (2.x) build to Linux matrix.
- alphasort some tests.

Follow-up to d9c2e550ca #1460
Follow-up to 82b09f9b3a #1322

Closes #1534
2025-02-04 00:39:38 +01:00
Viktor Szakats
d033c1eaf6 cmake: tidy up string append and list prepend syntax
- `set(VAR "${VAR}<value>")` ->
  `string(APPEND VAR "<value>")`
  Available since CMake 3.4:
  https://cmake.org/cmake/help/latest/command/string.html#append

- `set(VAR "${VAR2}-or-<value>;${VAR}")` ->
  `set(VAR "${VAR2}-or-<value>" ${VAR})`

- prefer dash-style MSVC option.
  Follow-up to 854cfa8292 #1524

Closes #1533
2025-02-02 02:57:52 +01:00
Viktor Szakats
b89858b83d disable deprecated algos by default
- MD5-based MACs and hashes: `hmac-md5`, `hmac-md5-96`,
  `LIBSSH2_HOSTKEY_HASH_MD5`
    You can enable it now with `-DLIBSSH2_MD5_ENABLE`.
    Disabled by default since OpenSSH 7.2 (2016-02-29).
- 3DES cipher: `3des-cbc`
    You can enable it now with `-DLIBSSH2_3DES_ENABLE`.
    Disabled by default since OpenSSH 7.4 (2016-12-19).
- RIPEMD-160 MACs: `hmac-ripemd160`, `hmac-ripemd160@openssh.com`
    You can enable it now with `-DLIBSSH2_HMAC_RIPEMD_ENABLE`.
    Removed in OpenSSH 7.6 (2017-10-03).
- Blowfish cipher: `blowfish-cbc`
    You can enable it now with `-DLIBSSH2_BLOWFISH_ENABLE`.
    Removed in OpenSSH 7.6 (2017-10-03).
- RC4 ciphers: `arcfour`, `arcfour128`
    You can enable it now with `-DLIBSSH2_RC4_ENABLE`.
    Removed in OpenSSH 7.6 (2017-10-03).
- CAST cipher: `cast128-cbc`
    You can enable it now with `-DLIBSSH2_CAST_ENABLE`.
    Removed in OpenSSH 7.6 (2017-10-03).

- old-style, MD5-based encrypted private keys.
    You can enable it now with `-DLIBSSH2_MD5_PEM_ENABLE`.

CI runs:
before:
https://github.com/libssh2/libssh2/actions/runs/13066267976/job/36459081012
https://ci.appveyor.com/project/libssh2org/libssh2/builds/51426618
after:
https://github.com/libssh2/libssh2/actions/runs/13071320635/job/36473418776?pr=1531
https://ci.appveyor.com/project/libssh2org/libssh2/builds/51428270

Closes #1531
2025-01-31 13:04:33 +01:00
Viktor Szakats
5cca650b1d tidy-up: prefer #ifdef / #ifndef (formatting)
Closes #1532
2025-01-31 13:04:32 +01:00
Viktor Szakats
784446b6c5 build: add support for clang-cl, add CI job
- ci/appveyor: add clang-cl job.
- ci/appvayor: optimize setting an env.
- build: fix clang-cl builds.
- build: fix `-Wcast-function-type` compiler warnings for OpenSSL 3.
- build: use `stdint.h` with MSVC when supported.
- src: use `PRId64` for MSVC where supported.
- src: avoid recursive macro definition for `recv()` and `send()`.
- session: silence `-Wcast-function-type` for `libssh2_session_callback_set2()`.
  Sadly this function is still not fully warning-clean, and it
  seems we'd need separate setter-getters for each callback
  to avoid all warnings.

Closes #1484
2025-01-31 05:13:18 +01:00
Viktor Szakats
6443b2f9d0 ci/GHA: bump BoringSSL
Also replace manual `-fPIC` C flag with
`-DCMAKE_POSITION_INDEPENDENT_CODE=ON`. It makes it pass it to C++,
which is necessary for BoringSSL after this bump.

Fixes:
```
/usr/bin/ld: /home/runner/usr/lib/libcrypto.a(crypto.cc.o): warning: relocation against `stderr@@GLIBC_2.2.5' in read-only section `.text'
/usr/bin/ld: /home/runner/usr/lib/libcrypto.a(urandom.cc.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
```
https://github.com/libssh2/libssh2/actions/runs/13065421829/job/36456862458#step:27:23

Closes #1530
2025-01-31 04:19:26 +01:00
Viktor Szakats
7d5a4c7651 cmake: split integration tests into steps
Closes #1529
2025-01-31 04:19:25 +01:00
Viktor Szakats
131480d2d5 wincng: move _libssh2_aes_ctr_increment() from misc, make static
Cherry-picked from #1484
2025-01-31 02:07:08 +01:00
Viktor Szakats
cf3aac1aba libssh2_base64_decode: add deprecation warning
Cherry-picked from #1484
2025-01-31 02:04:59 +01:00
Viktor Szakats
7027604505 libssh2_scp_send, libssh2_scp_send_ex: add deprecation warning
Also:
- switch to non-deprecated alternative in examples.
- add pointers and deprecation warning to libssh2_scp_send man page.

Cherry-picked from #1484
2025-01-31 02:04:59 +01:00
Viktor Szakats
4fbd592314 openssl: fix to build with wolfSSL without AES-CTR
Cherry-picked from #1484
2025-01-31 02:04:59 +01:00
Viktor Szakats
90a686ef3a gitignore: compress rules
Cherry-picked from #1484
2025-01-31 02:00:28 +01:00
Viktor Szakats
2da28146a0 openssl: make it compatible with wolfSSL built without OPENSSL_ALL
Cherry-picked from #1484
2025-01-31 01:50:15 +01:00
Viktor Szakats
008e82c0f8 ci/GHA: general maintenance, security, add LibreSSL and old OpenSSL jobs with tests
- add Linux jobs with old OpenSSL versions: 1.1.1, 1.1.0, 1.0.2, with
  tests.
  (Meaning we test these again after losing them in AppVeyor CI)
- add LibreSSL Linux job with tests.
- cache most dependency packages built from source.
  (exception: wolfSSL, which would have added too much complexity
  due to the multiple versions, and it's fast to build anyway.)
- change source tarball sources to GitHub for better stability and
  performance.
- move dependency versions to the env.
- set `persist-credentials: false` for checkout steps for security.
- pin actions to hash for security.
- checkout repo later, right before use.
- skip building BoringSSL tests to finish quicker.
- set `fail-fast: false` in the BSD build matrix.
- cmake: move UWP workaround from GHA to `CMakeLists.txt`, making it
  available for everyone.
- list installed packages in OpenBSD job.
- bump BoringSSL, mbedTLS, wolfSSL, OpenSSL.
- bump cross-platform-actions to v0.26.
- bump docker/build-push-action to v6.
- bump actions/upload-artifact to v4.
- bump NetBSD to 10.1.
- drop `--quiet 2` `apt-get` option to keep useful output.
- drop `--no-install-suggests --no-install-recommends` `apt-get`
  options. They are the defaults with the `ubuntu-24.04` image.
- tidy up quotes.

Cherry-picked from #1484

Closes #1528
2025-01-31 01:48:39 +01:00
Viktor Szakats
606c102e52 build: enable -Wcast-qual, fix fallouts
- enable compiler warning `-Wcast-qual`.
- add `LIBSSH2_UNCONST()` macro to strip const where absolutely
  necessary to avoid compiler warnings.
- fix const stripping by constifying where necessary.
- fix const stripping by using `LIBSSH2_UNCONST()`.
- libgcrypt.h: drop unnecessary casts.
- openssl: fix to use new `BIO_new_mem_buf()` parameter types
  with wolfSSL.

Cherry-picked from #1484
Closes #1527
2025-01-31 00:57:26 +01:00
Viktor Szakats
96cbe61896 ossfuzz: fix picky compiler warnings, make it pass checksrc
- fix compiler warnings.
- make it pass `checksrc`.
- fix shell `set -u` errors.
  Follow-up to 5012442850 #901
- REUSE: tidy up ossfuzz files.

Cherry-picked from #1484
Closes #1526
2025-01-30 23:36:39 +01:00
Viktor Szakats
a3aa6b4ca8 cmake: misc improvements, add LIBSSH2_USE_PKGCONFIG option
- show platform flags (via curl).
- add `LIBSSH2_USE_PKGCONFIG` option to control whether to use
  `pkg-config` to find dependencies.
- set `.pc` names withing the Find modules.
- add `mbedcrypto` to `libssh2.pc` only when detected via `pkg-config`.
  Workaround for older mbedtls versions and non-CMake mbedTLS builds
  (as of mbedTLS 3.6.2) that don't emit an `mbedcrypto.pc` file.
- set header paths relative to the project root (tidy-up).
- use `-isystem` for crypto backend and zlib header paths.
  To match autotools.
- sync header path order with autotools.
- rename local variables to underscore-lowercase.
- minor tidy-ups.

Cherry-picked from #1484
Closes #1525
2025-01-30 23:36:39 +01:00
Viktor Szakats
854cfa8292 build: prepare builds for clang-cl, add cmake ossfuzz support
- cmake: add support to build ossfuzz.
  Enable with `-DBUILD_OSSFUZZ=ON`.
  Also supports `-DLIB_FUZZING_ENGINE=` like autotools does.
- check for `__clang__` when suppressing warnings in source. Necessary
  for clang-cl, which set `__clang__`, but doesn't set `__GNU__`.
- cmake: optimize out 4 picky warning option detections with gcc.
- cmake: bring `-pedantic-error`, `-Wall` use closer to curl's.
- cmake: set `-Wno-language-extension-token` for clang-cl.
- cmake: escape only the necessary `-W` options for clang-cl.
- cmake: apply picky warnings to C++.
- cmake: replace `unset(VAR)` with `set(VAR "")` for init.
- cmake: prefer dash-style MSVC options.
- cmake: simplify `MATCHES` expression.
- cmake: formatting/whitespace.
- ci/GHA: bump `actions/upload-artifact` to v4

Closes #1524
2025-01-30 22:01:49 +01:00
Viktor Szakats
af5c9fb88f openssl: fix indentation 2025-01-29 19:00:51 +01:00