Page MenuHomeFreeBSD

libfetch: don't stumble on HTTP 307 temp redirects
AbandonedPublic

Authored by novel on May 1 2016, 6:19 AM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Dec 25, 5:49 AM
Unknown Object (File)
Tue, Dec 23, 4:44 AM
Unknown Object (File)
Nov 6 2025, 11:43 PM
Unknown Object (File)
Oct 24 2025, 1:50 PM
Unknown Object (File)
Oct 20 2025, 1:32 AM
Unknown Object (File)
Oct 9 2025, 11:11 AM
Unknown Object (File)
Sep 18 2025, 7:28 PM
Unknown Object (File)
Sep 12 2025, 6:41 AM
Subscribers

Details

Reviewers
des
Summary

Currently, fetch(1) fails to download a file if there's HTTP 307 redirect for it.

For example:

$ fetch https://pypi.io/packages/source/p/positional/positional-1.1.0.tar.gz
fetch: https://pypi.io/packages/source/p/positional/positional-1.1.0.tar.gz: Temporary Redirect
$

However, it should not fail on redirect unless -A flag was given.

Additionally, in verbose mode it manages to download that file.

This appears to happen because in "switch (http_get_reply(conn))" in http_request_body() from http.c there's no case for HTTP_TEMP_REDIRECT, so it fails to "default" that looks like this:

1816 default:
1817 http_seterr(conn->err);
1818 if (!verbose)
1819 goto ouch;

So in verbose mode it goes further and downloads the file, because HTTP_REDIRECT() macro does include check for HTTP_TEMP_REDIRECT.

Fix by handing HTTP_TEMP_REDIRECT in the http_get_reply(conn) switch.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Skipped
Unit
Tests Skipped

Event Timeline

novel retitled this revision from to libfetch: don't stumble on HTTP 307 temp redirects.
novel updated this object.
novel edited the test plan for this revision. (Show Details)
novel added a reviewer: des.
novel set the repository for this revision to rS FreeBSD src repository - subversion.