Commit Graph

80 Commits

Author SHA1 Message Date
David Kalnischkies dcbb364fc6 detect 416 complete file in partial by expected hash
If we have the expected hashes we can check with them if the file we
have in partial we got a 416 for is the expected file. We detected this
with same-size before, but not every server sends a good Content-Range
header with a 416 response.
2015-05-12 00:30:16 +02:00
David Kalnischkies 34faa8f7ae calculate hashes while downloading in https
We do this in HTTP already to give the CPU some exercise while the disk
is heavily spinning (or flashing?) to store the data avoiding the need
to reread the entire file again later on to calculate the hashes – which
happens outside of the eyes of progress reporting, so you might ended up
with a bunch of https workers 'stuck' at 100% while they were busy
calculating hashes.

This is a bummer for everyone using apt as a connection speedtest as the
https method works slower now (not really, it just isn't reporting done
too early anymore).
2015-04-19 01:13:09 +02:00
David Kalnischkies 9224ce3d4d calculate only expected hashes in methods
Methods get told which hashes are expected by the acquire system, which
means we can use this list to restrict what we calculate in the methods
as any extra we are calculating is wasted effort as we can't compare it
with anything anyway.

Adding support for a new hash algorithm is therefore 'free' now and if a
algorithm is no longer provided in a repository for a file, we
automatically stop calculating it.

In practice this results in a speed-up in Debian as we don't have SHA512
here (so far), so we practically stop calculating it.
2015-04-19 01:13:09 +02:00
David Kalnischkies 27925d82dd improve https method queue progress reporting
The worker expects that the methods tell him when they start or finish
downloading a file. Various information pieces are passed along in this
report including the (expected) filesize. https was using a "global"
struct for reporting which made it 'reuse' incorrect values in some
cases like a non-existent InRelease fallbacking to Release{,.gpg}
resulting in a size-mismatch warning. Reducing the scope and redesigning
the setting of the values we can fix this and related issues.

Closes: 777565, 781509
Thanks: Robert Edmonds and Anders Kaseorg for initial patchs
2015-04-19 01:13:08 +02:00
David Kalnischkies bb948ef562 do not unlink https file on general error
It might be quite interesting which file (content) made curl freak out
and other methods keep the file around as well.

Git-Dch: Ignore
2015-04-19 01:13:08 +02:00
David Kalnischkies 905fba60a0 derive more of https from http method
Bug #778375 uncovered that https wasn't properly integrated in the class
family tree of http as it was supposed to be leading to a NULL pointer
dereference. Fixing this 'properly' was deemed to much diff for
practically no gain that late in the release, so commit
0c2dc43d4f just fixed the synptom, while
this commit here is fixing the cause plus adding a test.
2015-03-16 18:00:50 +01:00
David Kalnischkies d61960d924 merge debian/sid into debian/experimental 2015-03-16 17:59:31 +01:00
Michael Vogt 9127d7aecf Fix missing URIStart() for https downloads
Add a explicit ReceivedData to HttpsMethod that indicates when
we got data from the connection so that we can send URISTart()
to the parent.

This is needed because URIStart got moved in f9b4f12d from
the progress_callback to write_data() and it only checks for
Res.Size. In the old code if progress_callback is called by
libcurl (and sets Res.Size) before write_data is called then
URIStart() is never send. Making this a explicit ReceivedData
variable fixes this issue.
2015-01-05 10:27:53 +01:00
David Kalnischkies 92e8c1ff28 dispose http(s) 416 error page as non-content
Real webservers (like apache) actually send an error page with a 416
response, but our client didn't expect it leaving the page on the socket
to be parsed as response for the next request (http) or as file content
(https), which isn't what we want at all… Symptom is a "Bad header line"
as html usually doesn't parse that well to an http-header.

This manifests itself e.g. if we have a complete file (or larger) in
partial/ which isn't discarded by If-Range as the server doesn't support
it (or it is just newer, think: mirror rotation).
It is a sort-of regression of 78c72d0ce2,
which removed the filesize - 1 trick, but this had its own problems…

To properly test this our webserver gains the ability to reply with
transfer-encoding: chunked as most real webservers will use it to send
the dynamically generated error pages.

(The tests and their binary helpers had to be slightly modified to
apply, but the patch to fix the issue itself is unchanged.)

Closes: 768797
2014-12-22 14:23:39 +01:00
David Kalnischkies ed793a19ec dispose http(s) 416 error page as non-content
Real webservers (like apache) actually send an error page with a 416
response, but our client didn't expect it leaving the page on the socket
to be parsed as response for the next request (http) or as file content
(https), which isn't what we want at all… Symptom is a "Bad header line"
as html usually doesn't parse that well to an http-header.

This manifests itself e.g. if we have a complete file (or larger) in
partial/ which isn't discarded by If-Range as the server doesn't support
it (or it is just newer, think: mirror rotation).
It is a sort-of regression of 78c72d0ce2,
which removed the filesize - 1 trick, but this had its own problems…

To properly test this our webserver gains the ability to reply with
transfer-encoding: chunked as most real webservers will use it to send
the dynamically generated error pages.

Closes: 768797
2014-12-09 01:13:48 +01:00
Michael Vogt 9983999d29 Fix backward compatiblity of the new pkgAcquireMethod::DropPrivsOrDie()
Do not drop privileges in the methods when using a older version of
libapt that does not support the chown magic in partial/ yet. To
do this DropPrivileges() now will ignore a empty Apt::Sandbox::User.

Cleanup all hardcoded _apt along the way.
2014-10-13 11:29:47 +02:00
Michael Vogt ee27950632 Send "Fail-Reason: MaximumSizeExceeded" from the method
Communicate the fail reason from the methods to the parent
and Rename() failed files.
2014-10-07 22:36:09 +02:00
Michael Vogt c48eea97b9 make expected-size a maximum-size check as this is what we want at this point 2014-10-07 17:47:30 +02:00
Michael Vogt 5b33fab8c9 add ftp expected size check 2014-10-07 08:43:46 +02:00
Michael Vogt 62acbba8d1 methods/https.cc: use File->Tell() here too 2014-10-07 08:16:51 +02:00
Michael Vogt a2d40703e4 make http size check work 2014-10-06 17:42:39 +02:00
Julian Andres Klode 7b18d5592f methods: Fail if we cannot drop privileges 2014-09-24 21:49:19 +02:00
Michael Vogt 3927c6da48 Drop Privileges to "Debian-apt" in most acquire methods
Add a new "Debian-apt" user that owns the /var/lib/apt/lists
and /var/cache/apt/archive directories. The methods
http, https, ftp, gpgv, gzip switch to this user when they
start.

Thanks to Julian and "ioerror" and tors "switch_id()" code.
2014-09-24 16:22:05 +02:00
Michael Vogt c6ee61eab5 Make Proxy-Auto-Detect check for each host
When doing Acquire::http{,s}::Proxy-Auto-Detect, run the auto-detect
command for each host instead of only once. This should make using
"proxy" from libproxy-tools feasible which can then be used for PAC
style or other proxy configurations.

Closes: #759264
2014-09-02 16:02:37 +02:00
Michael Vogt ffd2dd93a6 make https honor ExpectedSize as well 2014-08-26 19:20:04 -07:00
David Kalnischkies 062074cb51 enforce LFS for partial files in https range requests 2014-04-26 09:51:05 +02:00
David Kalnischkies 453b82a388 cleanup headers and especially #includes everywhere
Beside being a bit cleaner it hopefully also resolves oddball problems
I have with high levels of parallel jobs.

Git-Dch: Ignore
Reported-By: iwyu (include-what-you-use)
2014-03-13 13:58:45 +01:00
David Kalnischkies 655122418d warning: unused parameter ‘foo’ [-Wunused-parameter]
Reported-By: gcc -Wunused-parameter
Git-Dch: Ignore
2014-03-13 13:58:45 +01:00
David Kalnischkies d3e8fbb395 warning: extra ‘;’ [-Wpedantic]
Git-Dch: Ignore
Reported-By: gcc -Wpedantic
2014-03-13 13:58:45 +01:00
Michael Vogt 1e3f4083db Fix typos in documentation (codespell) 2014-02-22 18:34:33 +01:00