Remove stale signature files and fail if moving a required signature file fails.
This commit is contained in:
parent
8aba032de4
commit
dcad869c6e
1 changed files with 31 additions and 10 deletions
|
@ -1094,6 +1094,25 @@ static int move_file(const char *filepath, const char *directory)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int unlink_and_maybe_move_file(const char *filepath, const char *directory, const bool do_move)
|
||||
{
|
||||
ASSERT(filepath != NULL, return -1);
|
||||
ASSERT(directory != NULL, return -1);
|
||||
int ret = finalize_download_file(filepath);
|
||||
if(ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
const char *filename = mbasename(filepath);
|
||||
char *dest = _alpm_get_fullpath(directory, filename, "");
|
||||
unlink(dest);
|
||||
if(do_move && rename(filepath, dest)) {
|
||||
FREE(dest);
|
||||
return -1;
|
||||
}
|
||||
FREE(dest);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int finalize_download_locations(alpm_list_t *payloads, const char *localpath)
|
||||
{
|
||||
ASSERT(payloads != NULL, return -1);
|
||||
|
@ -1108,18 +1127,20 @@ static int finalize_download_locations(alpm_list_t *payloads, const char *localp
|
|||
if(payload->destfile_name) {
|
||||
int ret = move_file(payload->destfile_name, localpath);
|
||||
|
||||
if(ret == -1) {
|
||||
returnvalue = -1;
|
||||
}
|
||||
|
||||
if (payload->download_signature) {
|
||||
const char sig_suffix[] = ".sig";
|
||||
char *sig_filename = NULL;
|
||||
size_t sig_filename_len = strlen(payload->destfile_name) + sizeof(sig_suffix);
|
||||
MALLOC(sig_filename, sig_filename_len, continue);
|
||||
snprintf(sig_filename, sig_filename_len, "%s%s", payload->destfile_name, sig_suffix);
|
||||
move_file(sig_filename, localpath);
|
||||
|
||||
if(unlink_and_maybe_move_file(sig_filename, localpath, payload->download_signature) == -1 && !payload->signature_optional) {
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
FREE(sig_filename);
|
||||
|
||||
if(ret == -1) {
|
||||
returnvalue = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue