summaryrefslogtreecommitdiff
path: root/apt-pkg
AgeCommit message (Collapse)Author
2020-02-24Wrap AllocateInMap with a templated versionJulian Andres Klode
2020-02-24Replace map_pointer_t with map_pointer<T>Julian Andres Klode
This is a first step to a type safe cache, adding typing information everywhere. Next, we'll replace map_pointer<T> implementation with a type safe one.
2020-02-18Merge branch 'source_to_debsrc' into 'master'Julian Andres Klode
apt-pkg/srcrecords.cc: 'source' means 'deb-src' in error message See merge request apt-team/apt!101
2020-02-18Remove CRC-16 implementationJulian Andres Klode
2020-02-18Use a 32-bit djb VersionHash instead of CRC-16Julian Andres Klode
2020-02-18Merge branch 'pu/source-version' into 'master'Julian Andres Klode
ABI BREAK: Implement pinning by source package See merge request apt-team/apt!96
2020-02-18Remove code tagged APT_PKG_590, add some missing includesJulian Andres Klode
Remove all code scheduled to be removed after 5.90, and fix files to include files they previously got from hashes.h including more headers.
2020-02-18Bump ABI to 6.0Julian Andres Klode
2020-02-16Revert "Add a Packages-Require-Authorization Release file field"Julian Andres Klode
This experiment did not turn out sensibly, as some servers do not accept credentials when none are expected and fail, so you cannot mirror such a repository. This reverts commit c2b9b0489538fed4770515bd8853a960b13a2618.
2020-02-16policy: Add SetPriority() methodsJulian Andres Klode
These allow overriding priorities, however, pins set by SetPriority for package files will be overriden by calls to InitDefaults().
2020-02-12apt-pkg/srcrecords.cc: 'source' means 'deb-src' in error messageNis Martensen
The filename "sources.list" suggests that all contained lines are meant to describe some package source, so users might not immediately understand that this refers to 'deb-src' type lines. Please see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919285 for an example of the resulting confusion.
2020-02-06Fix remaining usec vs sec time-delta calculation typosDavid Kalnischkies
While moving to a more stable clock in 79b61ae I typoed the microsecond calculation part and copied it all over the place… Julian fixed the first two instances in 089e6271 and Trent reported the apt-ftparchive instances leaving one instance in progress (invisible for user though). A bit ironic that in an attempt to stop "confusing (and amusing) users" I managed to hide a typo for close to two years doing just that… Sadly we can't really test this as while "apt-ftparchive generate /dev/null" is a great interactive test, it is hard to teach our test framework that the output is "reasonably below an hour" (usually 0s, but on busy test systems it is perhaps longer…). Thanks: Trent W. Buck for initial patch Closes: #950776 References: 79b61ae7673eb6213493e2cb202f0d70c390932d, 089e627153781ae7c320a5a0724c6c70d684b689
2020-02-03patterns: test for empty terms, reject themJulian Andres Klode
2020-02-03Correctly stop parsing short form arguments on space, also on ?Julian Andres Klode
we have to stop parsing on space so that things like ~ramd64 | ~rall work correctly. aptitude does not stop parsing on ?, but we'll do as it gets very confusing otherwise if you write stuff like ~ramd64?name(foo), and it resolves to ?and(?architecture(amd64?name), (foo))...
2020-02-03patterns: Implement parsing of (...) groupsJulian Andres Klode
2020-02-03Implement | as orJulian Andres Klode
2020-02-03patterns: Allow rendering patterns as patterns instead of json-ishJulian Andres Klode
2020-02-03patterns: Parse sequence of patterns as ?andJulian Andres Klode
2020-02-03patterns: Allow bare words only in argumentsJulian Andres Klode
This changes the syntax from approximately expr = unary unary = '!'? primary primary = pattern | short-pattern | word | quoted-word pattern = '?' name [ '(' expr [',' expr]* ')' ] short-pattern = ~ name | ~name expr to: primary = pattern | short-pattern argument = word | quoted-word | expr pattern = '?' name [ '(' argument [',' argument]* ')' ] short-pattern = ~ name | ~name argument
2020-02-03patterns: Implement unary !Julian Andres Klode
2020-02-03Implement short patterns (patterns starting with ~)Julian Andres Klode
Also make pattern detector in cacheset and private's list accept such patterns. We probably should just try to parse and see if it is a (start of a) pattern.
2020-02-03patterns: Use _sv literalsJulian Andres Klode
This will make it easier to extend those views, given that we do not need to hardcode their length.
2020-02-03patterns: Provide Node constructor, simplify error throwingJulian Andres Klode
By having a node constructor, we can construct a node inline for error reporting needs, simplifying the code a bit.
2020-02-03patterns: Make offset a size_t instead of off_tJulian Andres Klode
This allows comparing against sentence.size()
2020-02-03StringView: Implement operator ""_svJulian Andres Klode
This allows us to define constexpr string view literals.
2020-01-27NewGroup: Create GrpIterator after allocation (fix segfault)Julian Andres Klode
NewGroup created a GrpIterator and then called WriteStringInMap() which might remap the cache, causing the iterator to go invalid. Avoid this simply by creating the iterator later on.
2020-01-17mmap: Do not look for empty pool unless we need toJulian Andres Klode
Given that we have a maximum of 12 pools, and much more items to insert, it does not make sense to have two branches in the hot path. Move the search for an empty pool into the unlikely case that no matching pool has been created yet - a condition that is guaranteed to only happens up to 12 times.
2020-01-17policy: Implement pinning by source packageJulian Andres Klode
This implements the src: syntax inside policy, allowing you to pin by source package. This by default only pins the native architecuture, use src:pkg:any to pin for all architectures in your cache. Closes: #166032
2020-01-17Allow querying all binaries built by a source packageJulian Andres Klode
This adds a simple way to lookup binaries by a source package, but this adds all binaries into one list, even with different source versions. Be careful.
2020-01-16pkgcache.cc: Mix PACKAGE_VERSION into the cache hashJulian Andres Klode
This ensures that caches build with one version can't be opened with another, which makes sense. It's a temporary approach until we can replace major:minor fields with a version string. For example, this would have prevented 1.9.7 from using broken caches from 1.9.6.
2020-01-16NewProvidesAllArch: Check if group is empty before using itJulian Andres Klode
APT 1.9.6 introduced empty groups by making use of groups to deduplicate package names. This is not normally a problem, but here we assumed that every group has at least one package. This caused a problem because automake was providing automake-1.16 while having the source package automake-1.16. So we found the automake-1.16 group, iterated over its empty package list, trying to store the provides (which hence never happened). LP: #1859952
2020-01-15Merge branch 'pu/apt-regex-cli' into 'master'Julian Andres Klode
apt(8): Disable regular expressions and fnmatch See merge request apt-team/apt!95
2020-01-15apt(8): Disable regular expressions and fnmatchJulian Andres Klode
This is the first step. Next step will be to add warnings to apt-get and then remove support there as well.
2020-01-15netrc: Add warning when ignoring entries for unencrypted protocolsJulian Andres Klode
Commit 93f33052de84e9aeaf19c92291d043dad2665bbd restricted auth.conf entries to only apply to https by default, but this was silent - there was no information why http sources with auth.conf entries suddenly started failing. Add such information, and extend test case to cover it.
2020-01-14Remove includes of (md5|sha1|sha2).h headersJulian Andres Klode
Remove it everywhere, except where it is still needed.
2020-01-14Deprecate the Summation classes and mark them for removalJulian Andres Klode
2020-01-14Convert users of {MD5,SHA1,SHA256,SHA512}Summation to use HashesJulian Andres Klode
This makes use of the a function GetHashString() that returns the specific hash string. We also need to implement another overload of Add() for signed chars with sizes, so the existing users do not require reinterpret_cast everywhere.
2020-01-14Raise buffer size for Hashes::AddFD() from 4 KiB to 64 KiBJulian Andres Klode
Move APT_BUFFER_SIZE to macros.h and re-use it in hashes, this also might speed up stuff, the motivation for using 64 KiB buffers in fileutl.cc was precisely that after all.
2020-01-14hashes: Use Libgcrypt for hashing purposesJulian Andres Klode
Switch the code of the Hashes class to use libgcrypt, which allows us to use hardware-accelerated implementations of SHA1 and friends.
2020-01-09Merge branch 'pu/source-groups' into 'master'Julian Andres Klode
Avoid extra out-of-cache hash table deduplication for package names See merge request apt-team/apt!92
2020-01-08acquire: Move queue startup after calling log's Start()Julian Andres Klode
Startup() was checking for bad items and failing them, but we did not actually call Start() in the log, so the log might not be setup correctly. This caused a crash in python-apt when items were being failed on queue startup, as it released the GIL when Start() is being called and re-acquires it when running callbacks.
2020-01-08Avoid extra out-of-cache hash table deduplication for package namesJulian Andres Klode
We were de-duplicating package name strings in StoreString, but also deduplicating most of them by them being in groups, so we had extra hash table lookups that could be avoided in NewGroup(). To continue deduplicating names across binary packages and source packages, insert groups for source packages as well. This is also a good first step in allowing efficient lookup of packages by source package - we can extend Group later by a list of SourceVersion objects, or alternatively, simply add a by-source chain into pkgCache::Version. This change improves performance by about 10% (913 to 814 ms), while having no significant overhead on the cache size: --- before +++ after @@ -1,7 +1,7 @@ -Total package names: 109536 (2.191 k) -Total package structures: 118689 (4.748 k) +Total package names: 119642 (2.393 k) +Total package structures: 118687 (4.747 k) Normal packages: 83309 - Pure virtual packages: 3365 + Pure virtual packages: 3363 Single virtual packages: 17811 Mixed virtual packages: 1973 Missing: 12231 @@ -10,21 +10,21 @@ Total distinct descriptions: 149291 (3.583 k) Total dependencies: 484135/156650 (12,2 M) Total ver/file relations: 57421 (1.378 k) Total Desc/File relations: 18219 (437 k) -Total Provides mappings: 29963 (719 k) +Total Provides mappings: 29959 (719 k) Total globbed strings: 226993 (5.332 k) Total slack space: 26,8 k -Total space accounted for: 38,1 M +Total space accounted for: 38,3 M Total buckets in PkgHashTable: 50503 - Unused: 5727 - Used: 44776 - Utilization: 88.6601% - Average entries: 2.65073 + Unused: 5728 + Used: 44775 + Utilization: 88.6581% + Average entries: 2.65074 Longest: 60 Shortest: 1 Total buckets in GrpHashTable: 50503 - Unused: 5727 - Used: 44776 - Utilization: 88.6601% - Average entries: 2.44631 - Longest: 10 + Unused: 4649 + Used: 45854 + Utilization: 90.7946% + Average entries: 2.60919 + Longest: 11 Shortest: 1
2020-01-07Only define likely/unlikely if APT_COMPILING_APT setJulian Andres Klode
This ensures that we do not leak simple words like that.
2020-01-07Remove various unused macros like MAX/MIN/ABS/APT_CONSTJulian Andres Klode
We don't use them, APT_CONST is APT_PURE now, and MAX/MIN/etc are available as proper templates in the C++ standard library.
2020-01-07Rename _count() macro to APT_ARRAY_SIZE()Julian Andres Klode
2020-01-07Avoid #define _error, use anonymous C++ struct insteadJulian Andres Klode
Replace the macro with an anonymous struct that provides an inline operator->() returning the _error pointer. This change is ABI compatible, and the inline macro is not exported. We should consider if we want to avoid the function call and directly export the thread_local variable instead, when we do break ABI. Closes: #948338
2019-12-02Merge branch 'pu/patterns-phase2' into 'master'Julian Andres Klode
Pu/patterns phase2 See merge request apt-team/apt!85
2019-12-02netrc: Restrict auth.conf entries to https by defaultJulian Andres Klode
This avoids downgrade attacks where an attacker could inject Location: http://private.example/ and then (having access to raw data to private.example, for example, by opening a port there, or sniffing network traffic) read the credentials for the private repository. Closes: #945911
2019-11-27Remove failed trusted signature instead of index on IMS hitDavid Kalnischkies
While passing the combi Release and Release.gpg to the gpgv method for verification the filename of Release is placed where usually Release.gpg is assumed in the rest of the code. The "usual" cases like passing verification and failing verification ending in an error are taking care of this, but the code path dealing with a failed verification, but ignoring said failure (e.g. due to trusted=yes) was not which results in the wrong file being removed later on (in case the index happens to be unmodified since the last update call) leading us into the abyss of strange failures (fixed in the previous commit) were nothing should have changed. This is not a security issue in this form as the repository needs to fail verification & the user forcing apt to ignore the failure and carry on anyhow. It does show however how complicated the code and its various interconnected paths can become. Reported-By: Val "pinkieval" Lorentz on IRC
2019-11-27Use correct filename on IMS-hit reverify for indicesDavid Kalnischkies
If we have no old Release file, but old indices we can't compare hashsums with the new Release file and hence must request the indices again and have to react to IMS hits if they didn't change. We used to symlink the old index file to the partial directory, but that usually meant that we linked an uncompressed file to a compressed file, which not all uncompressors can deal with transparently resulting in strange failures. We could do without the symlink, but that would require changes in the codepaths dealing with failure as they would rename the file to FAILED.