Hey Christian, Andries, Thanks for the analysis and the patch.
I moved the store/restore of errno a bit up the call chain in order to make it independent of the TLS backend.
Pushed as commit 25525f80372dbdfa367da7ab8592a6a747fc1f68. Regards, Tim On 10/21/23 23:58, Christian Rosentreter wrote:
Hi Andries, I re-done my wget build with the following patch. It fixes my issue and it now properly reports "(Permission denied)" instead "(Success)" in case of error when wget lacks writing permissions to the directory it operates in. This confirms your past findings/ analysis. OpenSSL's shutdown clobbers errno which wget fails to properly cache/ handle. Hence we don't see the issue with the system default wget from Raspian: that copy is build with GNUTLS. --- src/openssl.c.orig 2023-05-11 00:18:48.000000000 +0200 +++ src/openssl.c 2023-10-21 23:42:06.000000000 +0200 @@ -757,7 +757,16 @@ struct openssl_transport_context *ctx = arg; SSL *conn = ctx->conn;+ /* HOTFIX: OpenSSL's SSL_shutdown clobbers 'errno' which+ * wget fails to properly cache in http.c leading + * to curious "Success" messages in failure cases. + * + * WARNING: This is not a PROPER fix! + */ + int olderrno = errno; SSL_shutdown (conn); + errno = olderrno; + SSL_free (conn); xfree (ctx->last_error); xfree (ctx);On 21 Oct 2023, at 9:03 PM, Andries E. Brouwer <a...@cwi.nl> wrote: Hi Tim, That reminds me of some earlier discussion, see https://lists.gnu.org/archive/html/bug-wget/2021-05/msg00012.html I rechecked wget 1.21.4, and it still gives Cannot write to ‘<dir>’ (Success). I suppose the same analysis still applies. Andries On Sat, Oct 21, 2023 at 07:22:25PM +0200, Tim Rühsen wrote:Hi, do you run the latest wget (1.21.4)? With that version, you get a Cannot write to 'index.html' (Permission denied). Regards, Tim On 10/21/23 17:16, Christian Rosentreter wrote:Hi there, There's a minor cosmetic bug in wget 1.x where it claims "Success" when it in fact entirely failed to write to the local disk, e.g. because of missing permissions/ write access to the current directory. The return code is "3" however, so it's basically only the message that it prints on screen that is funny in a suspicious way: ### Prepare situation… $ mkdir foobar $ chmod -w foobar # remove write access $ cd foobar ### Note: the "Permission denied" and "Cannot write to" messages, but we ### get a "(Success)" anyway: $ wget https://www.christianrosentreter.com/ --2023-10-21 17:05:35-- https://www.christianrosentreter.com/ Resolving www.christianrosentreter.com (www.christianrosentreter.com)... 85.13.142.16 Connecting to www.christianrosentreter.com (www.christianrosentreter.com)|85.13.142.16|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] index.html: Permission denied Cannot write to 'index.html' (Success). ### The return code seems to be reasonable though: $ echo $? 3 ### Version tested: $ wget --version GNU Wget 1.21.4 built on darwin14.5.0. +cares +digest -gpgme +https +ipv6 +iri +large-file +metalink -nls +ntlm +opie +psl +ssl/openssl …cut…
OpenPGP_signature.asc
Description: OpenPGP digital signature