From c8433e32190ce8ce80f0bd39b481236c969e3312 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Wed, 12 Apr 2023 09:17:58 +0200 Subject: [PATCH] fix #4653: (In)Release file: improve handling of special suites MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit APT doesn't mind a repository with either "/" or "./" as suite/distribution, such as deb https://example.com/debian ./ in that case, the 'dists' part of the URL and the trailing slash (which would be encoded as '_') is dropped in the file name in '/var/lib/apt/lists/'. Other suite values with a trailing or leading '/' are rejected with an error by APT: E: Malformed entry 1 in sources file /etc/apt/sources.list.d/test.list (absolute Suite Component) E: The list of sources could not be read. so this should be the only special case requiring handling. Signed-off-by: Fabian Grünbichler --- proxmox-apt/src/repositories/repository.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/proxmox-apt/src/repositories/repository.rs b/proxmox-apt/src/repositories/repository.rs index 60e619c6..c2df2c74 100644 --- a/proxmox-apt/src/repositories/repository.rs +++ b/proxmox-apt/src/repositories/repository.rs @@ -373,12 +373,18 @@ fn release_filename(uri: &str, suite: &str, detached: bool) -> PathBuf { let encoded_uri = uri_to_filename(uri); let filename = if detached { "Release" } else { "InRelease" }; - path.push(format!( - "{}_dists_{}_{}", - encoded_uri, - suite.replace('/', "_"), // e.g. for buster/updates - filename, - )); + if suite == "/" { + path.push(format!("{encoded_uri}_{filename}")); + } else if suite == "./" { + path.push(format!("{encoded_uri}_._{filename}")); + } else { + path.push(format!( + "{}_dists_{}_{}", + encoded_uri, + suite.replace('/', "_"), // e.g. for buster/updates + filename, + )); + } path }