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;
|
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)
|
static int finalize_download_locations(alpm_list_t *payloads, const char *localpath)
|
||||||
{
|
{
|
||||||
ASSERT(payloads != NULL, return -1);
|
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) {
|
if(payload->destfile_name) {
|
||||||
int ret = move_file(payload->destfile_name, localpath);
|
int ret = move_file(payload->destfile_name, localpath);
|
||||||
|
|
||||||
if(ret == -1) {
|
const char sig_suffix[] = ".sig";
|
||||||
returnvalue = -1;
|
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);
|
||||||
|
|
||||||
|
if(unlink_and_maybe_move_file(sig_filename, localpath, payload->download_signature) == -1 && !payload->signature_optional) {
|
||||||
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (payload->download_signature) {
|
FREE(sig_filename);
|
||||||
const char sig_suffix[] = ".sig";
|
|
||||||
char *sig_filename = NULL;
|
if(ret == -1) {
|
||||||
size_t sig_filename_len = strlen(payload->destfile_name) + sizeof(sig_suffix);
|
returnvalue = -1;
|
||||||
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);
|
|
||||||
FREE(sig_filename);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue