Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libfilezilla for openSUSE:Factory checked in at 2023-10-24 20:09:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libfilezilla (Old) and /work/SRC/openSUSE:Factory/.libfilezilla.new.24901 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libfilezilla" Tue Oct 24 20:09:35 2023 rev:54 rq:1119971 version:0.45.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libfilezilla/libfilezilla.changes 2023-07-12 17:28:34.755012810 +0200 +++ /work/SRC/openSUSE:Factory/.libfilezilla.new.24901/libfilezilla.changes 2023-10-24 20:09:41.751444655 +0200 @@ -1,0 +2,11 @@ +Tue Oct 24 10:54:17 UTC 2023 - ecsos <ec...@opensuse.org> + +- Update to 0.45.0 + * New features: + - fz::hash_accumulator now also works with hmac_sha256 + - Added is_digest and digest_size to fz::hash_acumulator + - MSW: Added function to delete registry values + * Bugfixes and minor changes: + - Fixed a crash and a stall in the HTTP client + +------------------------------------------------------------------- Old: ---- libfilezilla-0.44.0.tar.xz New: ---- libfilezilla-0.45.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libfilezilla.spec ++++++ --- /var/tmp/diff_new_pack.11sODQ/_old 2023-10-24 20:09:42.487471414 +0200 +++ /var/tmp/diff_new_pack.11sODQ/_new 2023-10-24 20:09:42.487471414 +0200 @@ -16,11 +16,11 @@ # -%define major 40 +%define major 41 %define libname %{name}%{major} %define develname %{name}-devel Name: libfilezilla -Version: 0.44.0 +Version: 0.45.0 Release: 0 Summary: C++ library for filezilla License: GPL-2.0-or-later @@ -78,16 +78,8 @@ %description -n %{develname} Files needed for development with %{name}. - - - - - - - - - # Need %%lang_package expanded for an extra conflict with an old library package + %package lang # FIXME: consider using %%lang_package macro Summary: Translations for package %{name} ++++++ libfilezilla-0.44.0.tar.xz -> libfilezilla-0.45.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/NEWS new/libfilezilla-0.45.0/NEWS --- old/libfilezilla-0.44.0/NEWS 2023-06-28 15:00:47.000000000 +0200 +++ new/libfilezilla-0.45.0/NEWS 2023-10-11 10:26:52.000000000 +0200 @@ -1,3 +1,10 @@ +0.45.0 (2023-10-11) + ++ fz::hash_accumulator now also works with hmac_sha256 ++ Added is_digest and digest_size to fz::hash_acumulator ++ MSW: Added function to delete registry values +- Fixed a crash and a stall in the HTTP client + 0.44.0 (2023-06-28) + Exportable hash accumulator state diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/configure new/libfilezilla-0.45.0/configure --- old/libfilezilla-0.44.0/configure 2023-06-28 15:03:22.000000000 +0200 +++ new/libfilezilla-0.45.0/configure 2023-10-11 10:27:09.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libfilezilla 0.44.0. +# Generated by GNU Autoconf 2.71 for libfilezilla 0.45.0. # # Report bugs to <tim.ko...@filezilla-project.org>. # @@ -621,8 +621,8 @@ # Identity of this package. PACKAGE_NAME='libfilezilla' PACKAGE_TARNAME='libfilezilla' -PACKAGE_VERSION='0.44.0' -PACKAGE_STRING='libfilezilla 0.44.0' +PACKAGE_VERSION='0.45.0' +PACKAGE_STRING='libfilezilla 0.45.0' PACKAGE_BUGREPORT='tim.ko...@filezilla-project.org' PACKAGE_URL='https://lib.filezilla-project.org/' @@ -1477,7 +1477,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libfilezilla 0.44.0 to adapt to many kinds of systems. +\`configure' configures libfilezilla 0.45.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1548,7 +1548,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libfilezilla 0.44.0:";; + short | recursive ) echo "Configuration of libfilezilla 0.45.0:";; esac cat <<\_ACEOF @@ -1704,7 +1704,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libfilezilla configure 0.44.0 +libfilezilla configure 0.45.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2098,7 +2098,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libfilezilla $as_me 0.44.0, which was +It was created by libfilezilla $as_me 0.45.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3076,7 +3076,7 @@ # If any interfaces have been added since the last public release, then increment age. # If any interfaces have been removed or changed since the last public release, then set age to 0. # CURRENT:REVISION:AGE -LIBRARY_VERSION=40:0:0 +LIBRARY_VERSION=41:0:0 ac_config_headers="$ac_config_headers config/config.hpp" @@ -3597,7 +3597,7 @@ # Define the identity of the package. PACKAGE='libfilezilla' - VERSION='0.44.0' + VERSION='0.45.0' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -23854,7 +23854,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libfilezilla $as_me 0.44.0, which was +This file was extended by libfilezilla $as_me 0.45.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23923,7 +23923,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libfilezilla config.status 0.44.0 +libfilezilla config.status 0.45.0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/configure.ac new/libfilezilla-0.45.0/configure.ac --- old/libfilezilla-0.44.0/configure.ac 2023-06-28 15:00:47.000000000 +0200 +++ new/libfilezilla-0.45.0/configure.ac 2023-10-11 10:26:52.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT([libfilezilla],[0.44.0],[tim.ko...@filezilla-project.org],[],[https://lib.filezilla-project.org/]) +AC_INIT([libfilezilla],[0.45.0],[tim.ko...@filezilla-project.org],[],[https://lib.filezilla-project.org/]) # Update the version information only immediately before a public release of your software # If the library source code has changed at all since the last update, then increment revision (âc:r:aâ becomes âc:r+1:aâ). @@ -6,7 +6,7 @@ # If any interfaces have been added since the last public release, then increment age. # If any interfaces have been removed or changed since the last public release, then set age to 0. # CURRENT:REVISION:AGE -LIBRARY_VERSION=40:0:0 +LIBRARY_VERSION=41:0:0 AC_CONFIG_HEADERS([config/config.hpp]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/demos/https.cpp new/libfilezilla-0.45.0/demos/https.cpp --- old/libfilezilla-0.44.0/demos/https.cpp 2023-04-12 14:41:33.000000000 +0200 +++ new/libfilezilla-0.45.0/demos/https.cpp 2023-10-11 10:26:52.000000000 +0200 @@ -35,7 +35,7 @@ ~client() { remove_handler(); - fz::http::client::client::stop(false); + destroy(); } virtual fz::socket_interface* create_socket(fz::native_string const& host, unsigned short, bool tls) override diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/buffer.cpp new/libfilezilla-0.45.0/lib/buffer.cpp --- old/libfilezilla-0.44.0/lib/buffer.cpp 2023-01-12 10:41:17.000000000 +0100 +++ new/libfilezilla-0.45.0/lib/buffer.cpp 2023-10-11 10:26:52.000000000 +0200 @@ -1,4 +1,5 @@ #include "libfilezilla/buffer.hpp" +#include "libfilezilla/util.hpp" #include <algorithm> #include <cstdlib> @@ -250,4 +251,18 @@ return {reinterpret_cast<char const*>(get()), size()}; } +void buffer::wipe() +{ + fz::wipe(data_, capacity_); +} + +void buffer::wipe_unused() +{ + size_t start = pos_ - data_; + fz::wipe(data_, start); + + size_t stop = capacity_ - (start + size_); + fz::wipe(pos_ + size_, stop); +} + } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/file.cpp new/libfilezilla-0.45.0/lib/file.cpp --- old/libfilezilla-0.44.0/lib/file.cpp 2023-04-12 14:41:33.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/file.cpp 2023-10-11 10:26:52.000000000 +0200 @@ -103,7 +103,10 @@ case ERROR_ACCESS_DENIED: return {result::noperm, err}; case ERROR_DISK_FULL: + case ERROR_DISK_QUOTA_EXCEEDED: return {result::nospace, err}; + case ERROR_TOO_MANY_OPEN_FILES: + return {result::resource_limit, err}; default: return {result::other, err}; } @@ -273,6 +276,9 @@ case EDQUOT: case ENOSPC: return {result::nospace, err}; + case EMFILE: + case ENFILE: + return {result::resource_limit, err}; default: return {result::other, err}; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/hash.cpp new/libfilezilla-0.45.0/lib/hash.cpp --- old/libfilezilla-0.44.0/lib/hash.cpp 2023-06-28 15:00:47.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/hash.cpp 2023-10-11 10:26:52.000000000 +0200 @@ -1,10 +1,12 @@ #include "libfilezilla/libfilezilla.hpp" -#include "libfilezilla/hash.hpp" +#include "libfilezilla/buffer.hpp" #include "libfilezilla/encode.hpp" +#include "libfilezilla/hash.hpp" #include <nettle/hmac.h> #include <nettle/md5.h> +#include <nettle/memops.h> #include <nettle/pbkdf2.h> // Undo Nettle's horrible namespace mangling fuckery @@ -18,11 +20,15 @@ namespace fz { +size_t constexpr max_digest_length = 64; + class hash_accumulator::impl { public: virtual ~impl() = default; + virtual size_t digest_size() const = 0; + virtual std::vector<uint8_t> export_state() { return {}; } @@ -37,7 +43,7 @@ virtual void update(uint8_t const* data, size_t size) = 0; virtual void reinit() = 0; - virtual std::vector<uint8_t> digest() = 0; + virtual void digest(uint8_t* out) = 0; }; class hash_accumulator_md5 final : public hash_accumulator::impl @@ -48,6 +54,8 @@ reinit(); } + virtual size_t digest_size() const override { return MD5_DIGEST_SIZE; } + virtual void update(uint8_t const* data, size_t size) override { nettle_md5_update(&ctx_, size, data); @@ -58,12 +66,9 @@ nettle_md5_init(&ctx_); } - virtual std::vector<uint8_t> digest() override + virtual void digest(uint8_t* out) override { - std::vector<uint8_t> ret; - ret.resize(MD5_DIGEST_SIZE); - nettle_md5_digest(&ctx_, ret.size(), ret.data()); - return ret; + nettle_md5_digest(&ctx_, MD5_DIGEST_SIZE, out); } private: @@ -78,6 +83,8 @@ reinit(); } + virtual size_t digest_size() const override { return SHA1_DIGEST_SIZE; } + virtual void update(uint8_t const* data, size_t size) override { nettle_sha1_update(&ctx_, size, data); @@ -177,10 +184,13 @@ h1.update(second.data(), second.size()); h2.update(second.data(), second.size()); - if (h1.digest() != digest) { + uint8_t buf[20]; + h1.digest(buf); + if (memcmp(buf, digest.data(), 20)) { return false; } - if (h2.digest() != digest) { + h2.digest(buf); + if (memcmp(buf, digest.data(), 20)) { return false; } @@ -189,12 +199,9 @@ return result; } - virtual std::vector<uint8_t> digest() override + virtual void digest(uint8_t* out) override { - std::vector<uint8_t> ret; - ret.resize(SHA1_DIGEST_SIZE); - nettle_sha1_digest(&ctx_, ret.size(), ret.data()); - return ret; + nettle_sha1_digest(&ctx_, SHA1_DIGEST_SIZE, out); } private: @@ -209,6 +216,8 @@ reinit(); } + virtual size_t digest_size() const override { return SHA256_DIGEST_SIZE; } + virtual void update(uint8_t const* data, size_t size) override { nettle_sha256_update(&ctx_, size, data); @@ -219,14 +228,12 @@ nettle_sha256_init(&ctx_); } - virtual std::vector<uint8_t> digest() override + virtual void digest(uint8_t* out) override { - std::vector<uint8_t> ret; - ret.resize(SHA256_DIGEST_SIZE); - nettle_sha256_digest(&ctx_, ret.size(), ret.data()); - return ret; + nettle_sha256_digest(&ctx_, SHA256_DIGEST_SIZE, out); } + private: sha256_ctx ctx_; }; @@ -239,6 +246,8 @@ reinit(); } + virtual size_t digest_size() const override { return SHA512_DIGEST_SIZE; } + virtual void update(uint8_t const* data, size_t size) override { nettle_sha512_update(&ctx_, size, data); @@ -249,18 +258,45 @@ nettle_sha512_init(&ctx_); } - virtual std::vector<uint8_t> digest() override + virtual void digest(uint8_t* out) override { - std::vector<uint8_t> ret; - ret.resize(SHA512_DIGEST_SIZE); - nettle_sha512_digest(&ctx_, ret.size(), ret.data()); - return ret; + nettle_sha512_digest(&ctx_, SHA512_DIGEST_SIZE, out); } private: sha512_ctx ctx_; }; +class hash_accumulator_hmac_sha256 final : public hash_accumulator::impl +{ +public: + hash_accumulator_hmac_sha256(std::vector<uint8_t> const& key) + { + nettle_hmac_sha256_set_key(&ctx_, key.size(), key.data()); + } + + virtual size_t digest_size() const override { return SHA256_DIGEST_SIZE; } + + virtual void update(uint8_t const* data, size_t size) override + { + nettle_hmac_sha256_update(&ctx_, size, data); + } + + virtual void reinit() override + { + uint8_t buf[SHA256_DIGEST_SIZE]; + nettle_hmac_sha256_digest(&ctx_, SHA256_DIGEST_SIZE, buf); + } + + virtual void digest(uint8_t* out) override + { + nettle_hmac_sha256_digest(&ctx_, SHA256_DIGEST_SIZE, out); + } + +private: + hmac_sha256_ctx ctx_; +}; + hash_accumulator::hash_accumulator(hash_algorithm algorithm) { switch (algorithm) { @@ -279,11 +315,25 @@ } } +hash_accumulator::hash_accumulator(hmac_algorithm algorithm, std::vector<uint8_t> const& key) +{ + switch (algorithm) { + case hmac_algorithm::sha256: + impl_ = new hash_accumulator_hmac_sha256(key); + break; + } +} + hash_accumulator::~hash_accumulator() { delete impl_; } +size_t hash_accumulator::digest_size() const +{ + return impl_->digest_size(); +} + void hash_accumulator::reinit() { impl_->reinit(); @@ -315,9 +365,41 @@ impl_->update(data, size); } +void hash_accumulator::update(buffer const& data) +{ + if (!data.empty()) { + impl_->update(data.get(), data.size()); + } +} + std::vector<uint8_t> hash_accumulator::digest() { - return impl_->digest(); + std::vector<uint8_t> ret; + ret.resize(impl_->digest_size()); + impl_->digest(ret.data()); + return ret; +} + +void hash_accumulator::digest(uint8_t* out, size_t s) +{ + if (out && s == impl_->digest_size()) { + impl_->digest(out); + } +} + +bool hash_accumulator::is_digest(std::string_view const& ref) +{ + return is_digest(reinterpret_cast<uint8_t const*>(ref.data()), ref.size()); +} + +bool hash_accumulator::is_digest(uint8_t const* ref, size_t s) +{ + if (!ref || s != impl_->digest_size()) { + return false; + } + uint8_t buf[max_digest_length]; + impl_->digest(buf); + return memeql_sec(ref, buf, s); } std::vector<std::uint8_t> hash_accumulator::export_state() @@ -352,7 +434,10 @@ if (!in.empty()) { acc.update(reinterpret_cast<uint8_t const*>(in.data()), in.size()); } - return acc.digest(); + std::vector<uint8_t> ret; + ret.resize(MD5_DIGEST_SIZE); + acc.digest(ret.data()); + return ret; } template<typename DataContainer> @@ -364,7 +449,11 @@ if (!in.empty()) { acc.update(reinterpret_cast<uint8_t const*>(in.data()), in.size()); } - return acc.digest(); + std::vector<uint8_t> ret; + ret.resize(SHA1_DIGEST_SIZE); + acc.digest(ret.data()); + return ret; + } template<typename DataContainer> @@ -376,7 +465,11 @@ if (!in.empty()) { acc.update(reinterpret_cast<uint8_t const*>(in.data()), in.size()); } - return acc.digest(); + std::vector<uint8_t> ret; + ret.resize(SHA256_DIGEST_SIZE); + acc.digest(ret.data()); + return ret; + } template<typename DataContainer> @@ -388,7 +481,11 @@ if (!in.empty()) { acc.update(reinterpret_cast<uint8_t const*>(in.data()), in.size()); } - return acc.digest(); + std::vector<uint8_t> ret; + ret.resize(SHA512_DIGEST_SIZE); + acc.digest(ret.data()); + return ret; + } template<typename KeyContainer, typename DataContainer> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/http/client.cpp new/libfilezilla-0.45.0/lib/http/client.cpp --- old/libfilezilla-0.44.0/lib/http/client.cpp 2023-04-25 15:04:25.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/http/client.cpp 2023-10-11 10:26:52.000000000 +0200 @@ -154,6 +154,14 @@ } } +void client::destroy() +{ + if (impl_) { + impl_->remove_handler(); + impl_->stop(false, false); + } +} + client::impl::impl(client & c, aio_buffer_pool * buffer_pool, event_handler & handler, logger_interface & logger, std::string && user_agent) : event_handler(handler.event_loop_) , client_(c) @@ -549,11 +557,15 @@ destroy_socket(); } + requests_.pop_front(); + read_state_ = read_state(); if (send_pos_) { + if (!socket_) { + logger_.log(logmsg::debug_warning, "Server refused keep-alive, but we already sent the next request(s). Must fail the other requests now."sv); + return continuation::error; + } --send_pos_; } - requests_.pop_front(); - read_state_ = read_state(); if (wait_for_response_before_send_) { wait_for_response_before_send_ = false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/aio/aio.hpp new/libfilezilla-0.45.0/lib/libfilezilla/aio/aio.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/aio/aio.hpp 2023-04-12 14:41:33.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/libfilezilla/aio/aio.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -145,7 +145,7 @@ } /** - * /brief Returns either a buffer lease, or records the passed waiter/handler as waiting. + * \brief Returns either a buffer lease, or records the passed waiter/handler as waiting. * * If waiting, do not call get_buffer again until after waiter/handler got signalled. * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/buffer.hpp new/libfilezilla-0.45.0/lib/libfilezilla/buffer.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/buffer.hpp 2022-02-03 10:53:39.000000000 +0100 +++ new/libfilezilla-0.45.0/lib/libfilezilla/buffer.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -147,6 +147,10 @@ } std::string_view to_view() const; + + void wipe(); + void wipe_unused(); + private: // Invariants: @@ -160,6 +164,14 @@ size_t capacity_{}; }; +inline void FZ_PUBLIC_SYMBOL wipe(buffer & b) { + b.wipe(); +} + +inline void FZ_PUBLIC_SYMBOL wipe_unused(buffer & b) { + b.wipe_unused(); +} + } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/file.hpp new/libfilezilla-0.45.0/lib/libfilezilla/file.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/file.hpp 2022-09-05 15:38:02.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/libfilezilla/file.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -203,10 +203,10 @@ bool FZ_PUBLIC_SYMBOL remove_file(native_string const& name); inline file::creation_flags operator|(file::creation_flags lhs, file::creation_flags rhs) { - return static_cast<file::creation_flags>(static_cast<unsigned int>(lhs) | rhs); + return static_cast<file::creation_flags>(static_cast<std::underlying_type_t<file::creation_flags>>(lhs) | static_cast<std::underlying_type_t<file::creation_flags>>(rhs)); } inline file::creation_flags& operator|=(file::creation_flags & lhs, file::creation_flags rhs) { - lhs = static_cast<file::creation_flags>(static_cast<unsigned int>(lhs) | rhs); + lhs = lhs | rhs; return lhs; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/fsresult.hpp new/libfilezilla-0.45.0/lib/libfilezilla/fsresult.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/fsresult.hpp 2023-04-12 14:41:33.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/libfilezilla/fsresult.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -41,9 +41,12 @@ /// Requested dir does not exist or is not a dir nodir, - /// Out of disk space + /// Out of disk space (physical, or space quota) nospace, + /// Dynamic resource utilization, like too many open files + resource_limit, + /// Some other error other }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/glue/registry.hpp new/libfilezilla-0.45.0/lib/libfilezilla/glue/registry.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/glue/registry.hpp 2022-09-05 15:38:02.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/libfilezilla/glue/registry.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -65,6 +65,8 @@ return key_.has_value(); } + bool delete_value(std::wstring const& name); + private: mutable std::optional<HKEY> key_; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/glue/windows.hpp new/libfilezilla-0.45.0/lib/libfilezilla/glue/windows.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/glue/windows.hpp 2021-07-02 11:04:19.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/libfilezilla/glue/windows.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -55,4 +55,8 @@ #include <windows.h> #include <shellapi.h> +#ifndef ERROR_DISK_QUOTA_EXCEEDED +#define ERROR_DISK_QUOTA_EXCEEDED 1295 +#endif + #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/hash.hpp new/libfilezilla-0.45.0/lib/libfilezilla/hash.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/hash.hpp 2023-06-28 15:00:47.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/libfilezilla/hash.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -21,34 +21,49 @@ sha512 }; +enum class hmac_algorithm +{ + sha256 +}; + +class buffer; + /// Accumulator for hashing large amounts of data class FZ_PUBLIC_SYMBOL hash_accumulator final { public: /// Creates an initialized accumulator for the passed algorithm hash_accumulator(hash_algorithm algorithm); + hash_accumulator(hmac_algorithm algorithm, std::vector<uint8_t> const& key); ~hash_accumulator(); hash_accumulator(hash_accumulator const&) = delete; hash_accumulator& operator=(hash_accumulator const&) = delete; + size_t digest_size() const; + void reinit(); void update(std::string_view const& data); void update(std::basic_string_view<uint8_t> const& data); void update(std::vector<uint8_t> const& data); void update(uint8_t const* data, size_t size); + void update(buffer const& data); void update(uint8_t in) { update(&in, 1); } /// Returns the raw digest and reinitializes the accumulator std::vector<uint8_t> digest(); + void digest(uint8_t* out, size_t s); operator std::vector<uint8_t>() { return digest(); } + bool is_digest(std::string_view const& ref); + bool is_digest(uint8_t const* ref, size_t s); + template<typename T> hash_accumulator& operator<<(T && in) { update(std::forward<T>(in)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/http/client.hpp new/libfilezilla-0.45.0/lib/libfilezilla/http/client.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/http/client.hpp 2023-04-24 09:53:54.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/libfilezilla/http/client.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -96,11 +96,12 @@ /** * \brief Stops the client, deletes all requests. - * - * Must be called in the destructor of the derived class with keep_alive set to false. */ void stop(bool keep_alive); + /// Must be called in the destructor of the derived class + void destroy(); + protected: virtual void on_alive() {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/process.hpp new/libfilezilla-0.45.0/lib/libfilezilla/process.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/process.hpp 2022-07-20 11:29:31.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/libfilezilla/process.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -65,7 +65,7 @@ /** \brief Creates instance with non-blocking event-based redirected communication * - * Event semantic akin to \sa fz::socket + * Event semantic akin to \ref fz::socket */ process(thread_pool & pool, event_handler & handler); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/tls_info.hpp new/libfilezilla-0.45.0/lib/libfilezilla/tls_info.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/tls_info.hpp 2022-12-12 15:29:22.000000000 +0100 +++ new/libfilezilla-0.45.0/lib/libfilezilla/tls_info.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -13,7 +13,7 @@ /** * \brief Represents all relevant information of a X.509 certificate as used by TLS. */ -class x509_certificate final +class FZ_PUBLIC_SYMBOL x509_certificate final { public: /// A subject name, typically a DNS hostname @@ -150,7 +150,7 @@ * Includes flags whether the certificate chain is trusted by the system * trust store and whether the expected hostname matches. */ -class tls_session_info final +class FZ_PUBLIC_SYMBOL tls_session_info final { public: tls_session_info() = default; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/tls_layer.hpp new/libfilezilla-0.45.0/lib/libfilezilla/tls_layer.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/tls_layer.hpp 2023-06-28 15:00:47.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/libfilezilla/tls_layer.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -215,7 +215,7 @@ static std::pair<std::string, std::string> generate_csr(native_string const& password, std::string const& distinguished_name, std::vector<std::string> const& hostnames, bool csr_as_pem = true, cert_type type = cert_type::any); /** - * /brief Creates a certificate from a CSR. + * \brief Creates a certificate from a CSR. * * If DN and hostnames are not given, the DN/hostnames from the CSR are taken. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/libfilezilla/util.hpp new/libfilezilla-0.45.0/lib/libfilezilla/util.hpp --- old/libfilezilla-0.44.0/lib/libfilezilla/util.hpp 2021-08-31 16:47:29.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/libfilezilla/util.hpp 2023-10-11 10:26:52.000000000 +0200 @@ -42,6 +42,9 @@ void FZ_PUBLIC_SYMBOL random_bytes(size_t size, uint8_t* destination); +class buffer; +void FZ_PUBLIC_SYMBOL random_bytes(size_t size, buffer& destination); + /** \brief Returns index of the least-significant set bit * * For example \c bitscan(12) returns 2 @@ -75,7 +78,7 @@ } /** - * /brief Helper to move-assign guaranteeing same member destruction order as the destructor. + * \brief Helper to move-assign guaranteeing same member destruction order as the destructor. * * The implicity-defined move operator performs a member-wise move * (class.copy.assign 15.8.2.12 in the C++17 standard), which can lead to members @@ -96,6 +99,27 @@ return *p; } +/** \brief Securely wipes the memory. + * + * Effort has been undertaken such that the compiler does not optimize away + * a call to this function. + */ +void FZ_PUBLIC_SYMBOL wipe(void* p, size_t n); + +/** \brief Securely wipes the entire storage of the container + * + * Zeroes capacity() bytes. + */ +void FZ_PUBLIC_SYMBOL wipe(std::string & s); +void FZ_PUBLIC_SYMBOL wipe(std::vector<uint8_t> & v); + +/** \brief Securely wipes the unused space in these containers + * + * If capacity() > size(), capacity() - size() bytes are zeroed. + */ +void FZ_PUBLIC_SYMBOL wipe_unused(std::string & s); +void FZ_PUBLIC_SYMBOL wipe_unused(std::vector<uint8_t> & v); + } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/local_filesys.cpp new/libfilezilla-0.45.0/lib/local_filesys.cpp --- old/libfilezilla-0.44.0/lib/local_filesys.cpp 2022-09-13 11:39:49.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/local_filesys.cpp 2023-10-11 10:26:52.000000000 +0200 @@ -391,6 +391,8 @@ switch (err) { case ERROR_ACCESS_DENIED: return result{result::noperm, err}; + case ERROR_TOO_MANY_OPEN_FILES: + return {result::resource_limit, err}; default: return result{result::other, err}; } @@ -413,6 +415,9 @@ case ENOTDIR: case ENOENT: return {result::nodir, err}; + case EMFILE: + case ENFILE: + return {result::resource_limit, err}; default: return {result::other, err}; } @@ -461,6 +466,9 @@ case ENOTDIR: case ENOENT: return {result::nodir, err}; + case EMFILE: + case ENFILE: + return {result::resource_limit, err}; default: return {result::other, err}; } @@ -945,6 +953,7 @@ case ERROR_ACCESS_DENIED: return {result::noperm, err}; case ERROR_DISK_FULL: + case ERROR_DISK_QUOTA_EXCEEDED: return {result::nospace, err}; default: return {result::other, err}; @@ -1193,6 +1202,7 @@ case ERROR_ACCESS_DENIED: return {result::noperm, err}; case ERROR_DISK_FULL: + case ERROR_DISK_QUOTA_EXCEEDED: return {result::nospace, err}; default: return {result::other, err}; @@ -1209,6 +1219,7 @@ case EACCES: return {result::noperm, err}; case ENOSPC: + case EDQUOT: return {result::nospace, err}; case ENOTDIR: return {result::nodir, err}; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/util.cpp new/libfilezilla-0.45.0/lib/util.cpp --- old/libfilezilla-0.44.0/lib/util.cpp 2021-09-14 14:31:27.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/util.cpp 2023-10-11 10:26:52.000000000 +0200 @@ -1,3 +1,4 @@ +#include "libfilezilla/buffer.hpp" #include "libfilezilla/util.hpp" #include "libfilezilla/time.hpp" @@ -178,6 +179,15 @@ } } +void random_bytes(size_t size, buffer& destination) +{ + if (!size) { + return; + } + random_bytes(size, destination.get(size)); + destination.add(size); +} + uint64_t bitscan(uint64_t v) { @@ -216,4 +226,52 @@ return nettle_memeql_sec(lhs.data(), rhs.data(), lhs.size()) != 0; } +void wipe(void* p, size_t n) +{ + if (p && n) { +#if FZ_WINDOWS + SecureZeroMemory(p, n); +#else + // TODO: Consider using explicit_bzero or memset_s where available. + // Eventually C23's memset_explicit perhaps across all platforms? + volatile unsigned char* vp = reinterpret_cast<volatile unsigned char*>(p); + while (n--){ + *vp++ = 0; + } +#endif + } +} + +void wipe(std::string & s) +{ + size_t const orig_size = s.size(); + s.resize(s.capacity()); + wipe(s.data(), s.size()); + s.resize(orig_size); +} + +void wipe_unused(std::string & s) +{ + size_t const orig_size = s.size(); + s.resize(s.capacity()); + wipe(s.data() + orig_size, s.size() - orig_size); + s.resize(orig_size); +} + +void wipe(std::vector<uint8_t> & v) +{ + size_t const orig_size = v.size(); + v.resize(v.capacity()); + wipe(v.data() + orig_size, v.size() - orig_size); + v.resize(orig_size); +} + +void wipe_unused(std::vector<uint8_t> & v) +{ + size_t const orig_size = v.size(); + v.resize(v.capacity()); + wipe(v.data() + orig_size, v.size() - orig_size); + v.resize(orig_size); +} + } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/lib/windows/registry.cpp new/libfilezilla-0.45.0/lib/windows/registry.cpp --- old/libfilezilla-0.44.0/lib/windows/registry.cpp 2022-04-01 14:35:07.000000000 +0200 +++ new/libfilezilla-0.45.0/lib/windows/registry.cpp 2023-10-11 10:26:52.000000000 +0200 @@ -143,4 +143,13 @@ return key_ && RegSetValueExW(*key_, name.c_str(), 0, type, reinterpret_cast<unsigned char const*>(&value), size) == ERROR_SUCCESS; } +bool regkey::delete_value(std::wstring const& name) +{ + if (!key_) { + return false; + } + auto ret = RegDeleteValueW(*key_, name.c_str()); + return ret == ERROR_SUCCESS || ret == ERROR_FILE_NOT_FOUND; +} + } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libfilezilla-0.44.0/locales/co.po new/libfilezilla-0.45.0/locales/co.po --- old/libfilezilla-0.44.0/locales/co.po 2022-10-11 14:11:47.000000000 +0200 +++ new/libfilezilla-0.45.0/locales/co.po 2023-10-11 10:26:52.000000000 +0200 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: libfilezilla in Corsican\n" "Report-Msgid-Bugs-To: https://trac.filezilla-project.org/\n" -"POT-Creation-Date: 2022-09-13 14:47+0200\n" -"PO-Revision-Date: 2022-08-25 15:55+0200\n" +"POT-Creation-Date: 2023-07-10 11:34+0200\n" +"PO-Revision-Date: 2023-07-04 16:53+0200\n" "Last-Translator: Patriccollu di Santa Maria è Sichè <https://github.com/" "Patriccollu/Lingua_Corsa-Infurmatica/#readme>\n" "Language-Team: Patriccollu di Santa Maria è Sichè\n" @@ -17,15 +17,15 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.1.1\n" +"X-Generator: Poedit 3.3.2\n" -#: ../lib/tls_layer_impl.cpp:1664 +#: ../lib/tls_layer_impl.cpp:1674 msgid "A certificate in the chain was signed using an insecure algorithm" msgstr "" "Un certificatu in a catena hè statu firmatu aduprendu una cudificazione " "micca sicura" -#: ../lib/tls_layer_impl.cpp:1668 +#: ../lib/tls_layer_impl.cpp:1678 msgid "An issuer in the certificate chain is not a certificate authority" msgstr "" "Un emettidore in a catena di certificatu ùn hè micca un auturità di " @@ -39,27 +39,42 @@ msgid "Bad file descriptor" msgstr "Discrittore gattive di u schedariu" -#: ../lib/tls_layer_impl.cpp:1654 +#: ../lib/tls_layer_impl.cpp:1664 msgid "Beware! Certificate has been revoked" msgstr "Fate casu ! U certificatu hè statu revocatu" +#: ../lib/http/client.cpp:755 +msgid "" +"Broken server, it claims to have processed a request before it got fully set" +msgstr "" +"Servitore dannighjatu chì dice châellu hà trattatu una richiesta nanzu " +"châella sia cumpletamente definita" + #: ../lib/socket_errors.cpp:108 ../lib/socket_errors.cpp:117 msgid "Cannot assign requested address" msgstr "Ãn si pò micca impiegà l'indirizzu richiestu" -#: ../lib/tls_layer_impl.cpp:313 +#: ../lib/http/client.cpp:959 +msgid "Cannot use writers without buffer pool" +msgstr "Ãn si pò micca impiegà scrittori senza riserva di stampone" + +#: ../lib/tls_layer_impl.cpp:310 msgid "Certificate file too big." msgstr "Schedariu di certificatu troppu maiò." -#: ../lib/tls_layer_impl.cpp:1727 +#: ../lib/tls_layer_impl.cpp:1737 msgid "Certificate of connection does not match expected certificate." msgstr "U certificatu di cunnessione ùn currisponde micca à quellu aspettatu." -#: ../lib/tls_layer_impl.cpp:1660 +#: ../lib/tls_layer_impl.cpp:1670 msgid "Certificate signature verification failed" msgstr "Fiascu di a verificazione di a firma di u certificatu" -#: ../lib/tls_layer_impl.cpp:1201 +#: ../lib/http/client.cpp:981 +msgid "Chunk data improperly terminated" +msgstr "Ingutuppu di dati interrottu scurrettamente" + +#: ../lib/tls_layer_impl.cpp:1211 msgid "Client did not properly shut down TLS connection" msgstr "U cliente ùn hà micca chjosu currettamente a cunnessione TLS" @@ -83,20 +98,64 @@ msgid "Connection reset by peer" msgstr "Cunnessione iniziata torna da un paru" -#: ../lib/tls_layer_impl.cpp:1861 +#: ../lib/tls_layer_impl.cpp:1874 msgid "Could not add certificate to temporary trust list" msgstr "" "Ãn si pò micca aghjunghje u certificatu à a lista timpuraria di cunfidenza" -#: ../lib/tls_layer_impl.cpp:1853 +#: ../lib/http/client.cpp:330 ../lib/http/client.cpp:344 +#, c-format +msgid "Could not connect to '%s'" +msgstr "Ãn si pò micca cunnette à « %s »" + +#: ../lib/jws.cpp:212 +#, c-format +msgid "" +"Could not convert private key to JWK, exporting ECC parameters failed: %s" +msgstr "" +"Ãn si pò micca convertisce a chjave privata versu JWK, lâespurtazione di i " +"parametri ECC hà fiascata : %s" + +#: ../lib/jws.cpp:176 +#, c-format +msgid "" +"Could not convert private key to JWK, exporting RSA parameters failed: %s" +msgstr "" +"Ãn si pò micca convertisce a chjave privata versu JWK, lâespurtazione di i " +"parametri RSA hà fiascata : %s" + +#: ../lib/jws.cpp:152 +#, c-format +msgid "Could not convert private key to JWK, import failed: %s" +msgstr "" +"Ãn si pò micca convertisce a chjave privata versu JWK, lâimpurtazione hà " +"fiascata : %s" + +#: ../lib/jws.cpp:159 +msgid "" +"Could not convert private key to JWK, only RSA and ECDSA private keys are " +"supported." +msgstr "" +"Ãn si pò micca convertisce a chjave privata versu JWK, solu e chjavi private " +"RSA è ECDSA sò accettate." + +#: ../lib/jws.cpp:219 +msgid "" +"Could not convert private key to JWK, unsupported elliptic curve, only " +"SECP256R1 is supported." +msgstr "" +"Ãn si pò micca convertisce a chjave privata versu JWK, curva ellittica non " +"ricunnisciuta, solu SECP256R1 hè accettata." + +#: ../lib/tls_layer_impl.cpp:1866 msgid "Could not copy certificate" msgstr "Ãn si pò micca cupià u certificatu" -#: ../lib/tls_layer_impl.cpp:1347 +#: ../lib/tls_layer_impl.cpp:1357 msgid "Could not extract validity period of certificate" msgstr "Ãn si pò micca estrae u periodu di validità di u certificatu" -#: ../lib/tls_layer_impl.cpp:1414 +#: ../lib/tls_layer_impl.cpp:1424 msgid "" "Could not get distinguished name of certificate issuer, " "gnutls_x509_get_issuer_dn failed" @@ -104,7 +163,7 @@ "Ãn si pò micca ottene u nome di l'emettore di u certificatu, " "gnutls_x509_get_issuer_dn hà fiascatu" -#: ../lib/tls_layer_impl.cpp:1395 +#: ../lib/tls_layer_impl.cpp:1405 msgid "" "Could not get distinguished name of certificate subject, gnutls_x509_get_dn " "failed" @@ -112,19 +171,24 @@ "Ãn si pò micca ottene u nome di sughjettu di u certificatu, " "gnutls_x509_get_dn hà fiascatu" -#: ../lib/tls_layer_impl.cpp:306 +#: ../lib/tls_layer_impl.cpp:303 msgid "Could not open certificate file." msgstr "Ãn si pò micca apre u schedariu di certificatu." -#: ../lib/tls_layer_impl.cpp:336 +#: ../lib/tls_layer_impl.cpp:333 msgid "Could not open key file." msgstr "Ãn si pò micca apre u schedariu di chjave." -#: ../lib/tls_layer_impl.cpp:322 +#: ../lib/tls_layer_impl.cpp:319 msgid "Could not read certificate file." msgstr "Ãn si pò micca leghje u schedariu di certificatu." -#: ../lib/tls_layer_impl.cpp:348 +#: ../lib/http/client.cpp:624 ../lib/http/client.cpp:1134 +#, c-format +msgid "Could not read from socket: %s" +msgstr "Ãn si pò micca leghje u socket : %s" + +#: ../lib/tls_layer_impl.cpp:345 msgid "Could not read key file." msgstr "Ãn si pò micca leghje u schedariu di chjave." @@ -133,7 +197,7 @@ msgid "Could not seek to offset %d within '%s'." msgstr "Ãn si pò micca andà à u spiazzamentu %d dentru « %s »." -#: ../lib/tls_layer_impl.cpp:1635 +#: ../lib/tls_layer_impl.cpp:1645 msgid "Could not sort peer certificates" msgstr "Ãn si pò micca classificà i certificati pari" @@ -147,11 +211,25 @@ msgid "Could not truncate '%s' to offset %d." msgstr "Ãn si pò micca ammuzzà « %s » à u spiazzamentu %d." -#: ../lib/tls_layer_impl.cpp:1813 +#: ../lib/http/client.cpp:360 ../lib/http/client.cpp:473 +#, c-format +msgid "Could not write to socket: %s" +msgstr "Ãn si pò micca scrive in socket : %s" + +#: ../lib/http/client.cpp:474 +msgid "Disconnected from server" +msgstr "Disghjuntu da u servitore" + +#: ../lib/http/client.cpp:451 +#, c-format +msgid "Excess data read from '%s'" +msgstr "Troppu dati letti nantâà « %s »" + +#: ../lib/tls_layer_impl.cpp:1823 msgid "Failed to extract certificate trust path" msgstr "Fiascu per estrae u chjassu di cunfidenza di u certificatu" -#: ../lib/tls_layer_impl.cpp:1806 ../lib/tls_layer_impl.cpp:1875 +#: ../lib/tls_layer_impl.cpp:1816 ../lib/tls_layer_impl.cpp:1888 msgid "Failed to verify peer certificate" msgstr "Fiascu per verificà u certificatu paru" @@ -159,34 +237,54 @@ msgid "File descriptor not a socket" msgstr "Descrittore di schedariu ùn hè micca socket" -#: ../lib/tls_layer_impl.cpp:574 +#: ../lib/tls_layer_impl.cpp:547 #, c-format msgid "GnuTLS error %d" msgstr "Sbagliu GnuTLS %d" -#: ../lib/tls_layer_impl.cpp:577 +#: ../lib/tls_layer_impl.cpp:550 #, c-format msgid "GnuTLS error %d in %s" msgstr "Sbagliu GnuTLS %d in %s" -#: ../lib/tls_layer_impl.cpp:569 +#: ../lib/tls_layer_impl.cpp:542 #, c-format msgid "GnuTLS error %d in %s: %s" msgstr "Sbagliu GnuTLS %d in %s : %s" -#: ../lib/tls_layer_impl.cpp:566 +#: ../lib/tls_layer_impl.cpp:539 #, c-format msgid "GnuTLS error %d: %s" msgstr "Sbagliu GnuTLS %d : %s" +#: ../lib/http/client.cpp:596 ../lib/http/client.cpp:653 +msgid "HTTP connection closed prematurely" +msgstr "Cunnessione HTTP chjosa anticipatamente" + #: ../lib/socket_errors.cpp:75 msgid "Host is down" msgstr "L'ospite ùn funziona più" +#: ../lib/http/client.cpp:221 +msgid "Hostname not in UTF-8" +msgstr "Nome dâospite micca in UTF-8" + +#: ../lib/http/client.cpp:683 +msgid "Internal error, bad state" +msgstr "Sbagliu internu, statu gattivu" + #: ../lib/socket_errors.cpp:61 msgid "Interrupted by signal" msgstr "Interrottu da u signale" +#: ../lib/http/client.cpp:877 +msgid "Invalid Content-Length" +msgstr "Lunghezza di cuntenutu inaccettevule" + +#: ../lib/http/client.cpp:733 +msgid "Invalid HTTP Response" +msgstr "Risposta HTTP inaccettevule" + #: ../lib/socket_errors.cpp:49 msgid "Invalid argument passed" msgstr "Parametru passatu inaccettevule" @@ -195,6 +293,18 @@ msgid "Invalid characters in hostname" msgstr "Caratteri inaccettevule in u nome dâospite" +#: ../lib/http/client.cpp:1041 ../lib/http/client.cpp:1046 +msgid "Invalid chunk size" +msgstr "Dimensione di lâingutuppu inaccettevule" + +#: ../lib/http/client.cpp:775 +msgid "Invalid line" +msgstr "Linea inaccettevule" + +#: ../lib/http/client.cpp:742 +msgid "Invalid response code" +msgstr "Codice di risposta inaccettevule" + #: ../lib/socket_errors.cpp:82 msgid "Invalid value for ai_flags" msgstr "Valore inaccettevule per ai_flags" @@ -203,10 +313,14 @@ msgid "Invalid value for hints" msgstr "Valore inaccettevule per i cunsiglii" -#: ../lib/tls_layer_impl.cpp:341 +#: ../lib/tls_layer_impl.cpp:338 msgid "Key file too big." msgstr "Schedariu di chjave troppu maiò." +#: ../lib/http/client.cpp:1006 +msgid "Line length exceeded" +msgstr "Lunghezza di a linea trapassata" + #: ../lib/socket_errors.cpp:46 msgid "Local address in use" msgstr "Indirizzu lucale impiegatu" @@ -215,7 +329,21 @@ msgid "Local endpoint has been closed" msgstr "U puntu lucale di cumpiitura hè statu chjosu" -#: ../lib/tls_layer_impl.cpp:1711 ../lib/tls_layer_impl.cpp:1923 +#: ../lib/http/client.cpp:981 ../lib/http/client.cpp:993 +#: ../lib/http/client.cpp:999 ../lib/http/client.cpp:1006 +#: ../lib/http/client.cpp:1041 ../lib/http/client.cpp:1046 +#, c-format +msgid "Malformed chunk data: %s" +msgstr "Ingutuppu malcunciliu di dati : %s" + +#: ../lib/http/client.cpp:701 ../lib/http/client.cpp:707 +#: ../lib/http/client.cpp:775 ../lib/http/client.cpp:835 +#: ../lib/http/client.cpp:877 +#, c-format +msgid "Malformed response header: %s" +msgstr "In-capu di risposta malcunciliu : %s" + +#: ../lib/tls_layer_impl.cpp:1721 ../lib/tls_layer_impl.cpp:1936 msgid "Man-in-the-Middle attack detected, aborting connection." msgstr "" "Abbandonu di a cunnessione per via dâun attaccu di lâintercettore (Man-in-" @@ -261,6 +389,10 @@ msgid "Not initialized, need to call WSAStartup" msgstr "Micca dimaratu, ci vole à chjamà WSAStartup" +#: ../lib/http/client.cpp:707 ../lib/http/client.cpp:999 +msgid "Null character in line" +msgstr "Caratteru nullu in a linea" + #: ../lib/socket_errors.cpp:57 msgid "Operation already in progress" msgstr "Operazione dighjà in corsu" @@ -281,6 +413,10 @@ msgid "Out of memory" msgstr "Mancanza di memoria" +#: ../lib/http/client.cpp:225 +msgid "Path not in UTF-8" +msgstr "Chjassu micca in UTF-8" + #: ../lib/socket_errors.cpp:45 ../lib/socket_errors.cpp:54 msgid "Permission denied" msgstr "Permessu ricusatu" @@ -297,21 +433,21 @@ msgid "Protocol not supported on given socket type" msgstr "Protocollu micca accettatu per u tipu di socket specificatu" -#: ../lib/tls_layer_impl.cpp:589 +#: ../lib/tls_layer_impl.cpp:591 #, c-format msgid "Received TLS alert from the client: %s (%d)" msgstr "Alerta TLS ricevuta da u cliente : %s (%d)" -#: ../lib/tls_layer_impl.cpp:589 +#: ../lib/tls_layer_impl.cpp:591 #, c-format msgid "Received TLS alert from the server: %s (%d)" msgstr "Alerta TLS ricevuta da u servitore : %s (%d)" -#: ../lib/tls_layer_impl.cpp:1681 +#: ../lib/tls_layer_impl.cpp:1691 msgid "Received certificate chain could not be verified." msgstr "A catena di certificatu ricevuta ùn pò micca esse verificata." -#: ../lib/tls_layer_impl.cpp:1684 +#: ../lib/tls_layer_impl.cpp:1694 #, c-format msgid "" "Received certificate chain could not be verified. Verification status is %d." @@ -319,20 +455,24 @@ "A catena di certificatu ricevuta ùn pò micca esse verificata. U statu di " "verificazione hè %d." -#: ../lib/tls_layer_impl.cpp:594 +#: ../lib/tls_layer_impl.cpp:596 #, c-format msgid "Received unknown TLS alert %d from the client" msgstr "Alerta TLS scunnisciuta %d ricevuta da u cliente" -#: ../lib/tls_layer_impl.cpp:594 +#: ../lib/tls_layer_impl.cpp:596 #, c-format msgid "Received unknown TLS alert %d from the server" msgstr "Alerta TLS scunnisciuta %d ricevuta da u servitore" -#: ../lib/tls_layer_impl.cpp:1320 +#: ../lib/tls_layer_impl.cpp:1330 ../lib/tls_layer_impl.cpp:1851 msgid "Remote certificate not trusted." msgstr "Certificatu alluntanatu micca degnu di cunfidenza." +#: ../lib/http/client.cpp:217 +msgid "Request has no host" +msgstr "A richiesta ùn hà micca ospite" + #: ../lib/socket_errors.cpp:97 msgid "Resolved protocol is unknown" msgstr "U protoccollu risoltu hè scunnisciutu" @@ -341,11 +481,39 @@ msgid "Resource temporarily unavailable" msgstr "Risorse timpurariamente indispunibule" -#: ../lib/tls_layer_impl.cpp:1201 +#: ../lib/http/client.cpp:609 +msgid "Response too large" +msgstr "A risposta hè troppu maiò" + +#: ../lib/tls_layer_impl.cpp:1211 msgid "Server did not properly shut down TLS connection" msgstr "U servitore ùn hà micca chjosu currettamente a cunnessione TLS" -#: ../lib/tls_layer_impl.cpp:1638 +#: ../lib/http/client.cpp:278 +#, c-format +msgid "Server instructed client to wait %d seconds before sending next request" +msgstr "" +"U servitore hà dumandatu à u cliente dâaspettà %d seconde nanzu di mandà a " +"prossima richiesta" + +#: ../lib/http/client.cpp:701 +msgid "Server not sending proper line endings" +msgstr "U servitore ùn manda micca fine di linea currette" + +#: ../lib/http/digest.cpp:251 +#, c-format +msgid "Server requested unsupported digest authentication algorithm: %s" +msgstr "" +"U servitore hà richiestu una cudificazione riassunta dâautenticazione micca " +"accettata : %s" + +#: ../lib/http/digest.cpp:259 +#, c-format +msgid "Server requested unsupported quality-of-protection: %s" +msgstr "" +"U servitore hà richiestu una qualità di prutezzione micca accettata : %s" + +#: ../lib/tls_layer_impl.cpp:1648 msgid "" "Server sent unsorted certificate chain in violation of the TLS specifications" msgstr "" @@ -360,6 +528,11 @@ msgid "Socket already connected" msgstr "Socket dighjà cunnettu" +#: ../lib/http/client.cpp:1172 +#, c-format +msgid "Socket error: %s" +msgstr "Sbagliu di socket : %s" + #: ../lib/socket_errors.cpp:70 msgid "Socket has been shut down" msgstr "Socket hè statu piantatu" @@ -392,7 +565,7 @@ msgid "The ai_socktype member is not supported" msgstr "U membru ai_socktype ùn hè micca accettatu" -#: ../lib/tls_layer_impl.cpp:1676 +#: ../lib/tls_layer_impl.cpp:1686 msgid "" "The certificate requires the server to include an OCSP status in its " "response, but the OCSP status is missing." @@ -400,7 +573,7 @@ "U certificatu richiede chì u servitore includi un statu OCSP in a so " "risposta, ma quessa manca." -#: ../lib/tls_layer_impl.cpp:1672 +#: ../lib/tls_layer_impl.cpp:1682 msgid "The server's hostname does not match the certificate's hostname" msgstr "" "U nome d'ospite di u servitore ùn currisponde micca à u nome d'ospite di u " @@ -418,16 +591,37 @@ msgid "The specified network name is no longer available" msgstr "U nome di reta specificatu ùn hè più dispunibule" -#: ../lib/tls_layer_impl.cpp:1699 +#: ../lib/http/client.cpp:715 ../lib/http/client.cpp:792 +msgid "Too long header line" +msgstr "Linea dâin-capu troppu longa" + +#: ../lib/http/client.cpp:798 +msgid "Too many header lines" +msgstr "Troppu linee dâin-capu" + +#: ../lib/http/client.cpp:443 +#, c-format +msgid "Unexpected end-of-file on '%s'" +msgstr "Fine di schedariu inaspettata nantâà « %s »" + +#: ../lib/http/client.cpp:835 +msgid "Unknown transfer encoding" +msgstr "Cudificazione di trasferimentu scunnisciuta" + +#: ../lib/tls_layer_impl.cpp:1709 msgid "Unsupported certificate type" msgstr "Tipu di certificatu micca accettatu" -#: ../lib/tls_layer_impl.cpp:1608 +#: ../lib/http/client.cpp:993 +msgid "Wrong line endings" +msgstr "Fine di linea gattive" + +#: ../lib/tls_layer_impl.cpp:1618 msgid "gnutls_certificate_get_peers returned no certificates" msgstr "gnutls_certificate_get_peers ùn hà restituitu nisunu certificatu" -#: ../lib/tls_layer_impl.cpp:1979 ../lib/tls_layer_impl.cpp:2015 -#: ../lib/tls_layer_impl.cpp:2031 ../lib/tls_layer_impl.cpp:2047 +#: ../lib/tls_layer_impl.cpp:1992 ../lib/tls_layer_impl.cpp:2028 +#: ../lib/tls_layer_impl.cpp:2044 ../lib/tls_layer_impl.cpp:2060 msgid "unknown" msgstr "scunnisciutu"