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
F167817471: D6167.diff
Mon, Aug 24, 6:44 PM
Unknown Object (File)
Sun, Aug 23, 4:51 PM
Unknown Object (File)
Sun, Aug 23, 5:00 AM
Unknown Object (File)
Fri, Aug 21, 3:20 PM
Unknown Object (File)
Wed, Aug 19, 1:19 PM
Unknown Object (File)
Tue, Aug 18, 8:31 PM
Unknown Object (File)
Sun, Aug 16, 6:10 PM
Unknown Object (File)
Sun, Aug 9, 2:53 PM
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.