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…









Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

Reply via email to