From c6b964060e6c099ddfeb9c0cfeb977d41cac0234 Mon Sep 17 00:00:00 2001 From: Rmys Date: Sun, 11 Feb 2024 11:42:52 +0300 Subject: [PATCH] libssh-0.10.6 --- ...2364b5107a4125ea3cb76fcdb6beabaebf3be.diff | 118 ++++++++++++++++++ network/misc/libssh/pspec.xml | 12 +- 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 network/misc/libssh/files/1a02364b5107a4125ea3cb76fcdb6beabaebf3be.diff diff --git a/network/misc/libssh/files/1a02364b5107a4125ea3cb76fcdb6beabaebf3be.diff b/network/misc/libssh/files/1a02364b5107a4125ea3cb76fcdb6beabaebf3be.diff new file mode 100644 index 0000000000..74b53c436a --- /dev/null +++ b/network/misc/libssh/files/1a02364b5107a4125ea3cb76fcdb6beabaebf3be.diff @@ -0,0 +1,118 @@ +diff --git a/include/libssh/config_parser.h b/include/libssh/config_parser.h +index a7dd42a2c8016789a2dad1c409447da11603a0f0..ca353432b8139e5be334f1b815e910ca03562c84 100644 +--- a/include/libssh/config_parser.h ++++ b/include/libssh/config_parser.h +@@ -30,6 +30,8 @@ + extern "C" { + #endif + ++#include ++ + char *ssh_config_get_cmd(char **str); + + char *ssh_config_get_token(char **str); +@@ -49,14 +51,17 @@ int ssh_config_get_yesno(char **str, int notfound); + * be stored or NULL if we do not care about the result. + * @param[out] port Pointer to the location, where the new port will + * be stored or NULL if we do not care about the result. ++ * @param[in] ignore_port Set to true if the we should not attempt to parse ++ * port number. + * + * @returns SSH_OK if the provided string is in format of SSH URI, + * SSH_ERROR on failure + */ + int ssh_config_parse_uri(const char *tok, +- char **username, +- char **hostname, +- char **port); ++ char **username, ++ char **hostname, ++ char **port, ++ bool ignore_port); + + #ifdef __cplusplus + } +diff --git a/src/config.c b/src/config.c +index c5c40125ac243e4d137601d340f91bb4eba8c973..273db7c8c477dd435b8310e8b7784cb0dc578e0a 100644 +--- a/src/config.c ++++ b/src/config.c +@@ -464,7 +464,7 @@ ssh_config_parse_proxy_jump(ssh_session session, const char *s, bool do_parsing) + } + if (parse_entry) { + /* We actually care only about the first item */ +- rv = ssh_config_parse_uri(cp, &username, &hostname, &port); ++ rv = ssh_config_parse_uri(cp, &username, &hostname, &port, false); + /* The rest of the list needs to be passed on */ + if (endp != NULL) { + next = strdup(endp + 1); +@@ -475,7 +475,7 @@ ssh_config_parse_proxy_jump(ssh_session session, const char *s, bool do_parsing) + } + } else { + /* The rest is just sanity-checked to avoid failures later */ +- rv = ssh_config_parse_uri(cp, NULL, NULL, NULL); ++ rv = ssh_config_parse_uri(cp, NULL, NULL, NULL, false); + } + if (rv != SSH_OK) { + goto out; +diff --git a/src/config_parser.c b/src/config_parser.c +index b8b94611af54f5524e16afc14f2517c3dbadfdd3..d4b2d2c3b74db7ff564ebfdfd09ec31a9ae485be 100644 +--- a/src/config_parser.c ++++ b/src/config_parser.c +@@ -162,9 +162,10 @@ int ssh_config_get_yesno(char **str, int notfound) + } + + int ssh_config_parse_uri(const char *tok, +- char **username, +- char **hostname, +- char **port) ++ char **username, ++ char **hostname, ++ char **port, ++ bool ignore_port) + { + char *endp = NULL; + long port_n; +@@ -210,12 +211,17 @@ int ssh_config_parse_uri(const char *tok, + if (endp == NULL) { + goto error; + } +- } else { +- /* Hostnames or aliases expand to the last colon or to the end */ ++ } else if (!ignore_port) { ++ /* Hostnames or aliases expand to the last colon (if port is requested) ++ * or to the end */ + endp = strrchr(tok, ':'); + if (endp == NULL) { + endp = strchr(tok, '\0'); + } ++ } else { ++ /* If no port is requested, expand to the end of line ++ * (to accommodate the IPv6 addresses) */ ++ endp = strchr(tok, '\0'); + } + if (tok == endp) { + /* Zero-length hostnames are not valid */ +diff --git a/src/options.c b/src/options.c +index 3851145557a9ef6fd21a664e5bce7506143873c5..b3ecffe15f23e51c5217a58a28dc15256666efa6 100644 +--- a/src/options.c ++++ b/src/options.c +@@ -516,17 +516,11 @@ int ssh_options_set(ssh_session session, enum ssh_options_e type, + ssh_set_error_invalid(session); + return -1; + } else { +- char *username = NULL, *hostname = NULL, *port = NULL; +- rc = ssh_config_parse_uri(value, &username, &hostname, &port); ++ char *username = NULL, *hostname = NULL; ++ rc = ssh_config_parse_uri(value, &username, &hostname, NULL, true); + if (rc != SSH_OK) { + return -1; + } +- if (port != NULL) { +- SAFE_FREE(username); +- SAFE_FREE(hostname); +- SAFE_FREE(port); +- return -1; +- } + if (username != NULL) { + SAFE_FREE(session->opts.username); + session->opts.username = username; diff --git a/network/misc/libssh/pspec.xml b/network/misc/libssh/pspec.xml index 7e82bcfbb4..b0080be2df 100644 --- a/network/misc/libssh/pspec.xml +++ b/network/misc/libssh/pspec.xml @@ -13,7 +13,7 @@ library Full C library functions for manipulating a client-side SSH connection libssh library was designed to be used by programmers needing a working SSH implementation by the mean of a library. The complete control of the client is made by the programmer. With libssh, you can remotely execute programs, transfer files, use a secure and transparent tunnel for your remote programs. With its Secure FTP implementation, you can play with remote files easily, without third-party programs others than libcrypto (from openssl). - https://www.libssh.org/files/0.10/libssh-0.10.5.tar.xz + https://www.libssh.org/files/0.10/libssh-0.10.6.tar.xz openssl-devel cmocka-devel @@ -23,6 +23,9 @@ openssh + + 1a02364b5107a4125ea3cb76fcdb6beabaebf3be.diff + @@ -61,6 +64,13 @@ + + 2024-02-11 + 0.10.6 + Version bump. + Mustafa Cinasal + muscnsl@gmail.com + 2023-05-04 0.10.5