fix #4653: (In)Release file: improve handling of special suites

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 <f.gruenbichler@proxmox.com>
This commit is contained in:
Fabian Grünbichler 2023-04-12 09:17:58 +02:00 committed by Thomas Lamprecht
parent 27cd025053
commit c8433e3219

View File

@ -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
}