Compare commits
2 commits
master
...
morganamil
Author | SHA1 | Date | |
---|---|---|---|
![]() |
14b9ae7657 | ||
![]() |
d1b66cf4be |
1 changed files with 13 additions and 8 deletions
|
@ -73,7 +73,7 @@ static mode_t _getumask(void)
|
|||
return mask;
|
||||
}
|
||||
|
||||
static int finalize_download_file(const char *filename)
|
||||
static int finalize_download_file(const char *sandboxuser, const char *filename)
|
||||
{
|
||||
struct stat st;
|
||||
ASSERT(filename != NULL, return -1);
|
||||
|
@ -82,7 +82,9 @@ static int finalize_download_file(const char *filename)
|
|||
unlink(filename);
|
||||
return 1;
|
||||
}
|
||||
ASSERT(chown(filename, 0, 0) != -1, return -1);
|
||||
if(sandboxuser) {
|
||||
ASSERT(chown(filename, 0, 0) != -1, return -1);
|
||||
}
|
||||
ASSERT(chmod(filename, ~(_getumask()) & 0666) != -1, return -1);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1079,11 +1081,11 @@ static int payload_download_fetchcb(struct dload_payload *payload,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int move_file(const char *filepath, const char *directory)
|
||||
static int move_file(const char* sandboxuser, const char *filepath, const char *directory)
|
||||
{
|
||||
ASSERT(filepath != NULL, return -1);
|
||||
ASSERT(directory != NULL, return -1);
|
||||
int ret = finalize_download_file(filepath);
|
||||
int ret = finalize_download_file(sandboxuser, filepath);
|
||||
if(ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
@ -1105,15 +1107,18 @@ static int finalize_download_locations(alpm_list_t *payloads, const char *localp
|
|||
int returnvalue = 0;
|
||||
for(p = payloads; p; p = p->next) {
|
||||
struct dload_payload *payload = p->data;
|
||||
alpm_handle_t *handle = payload->handle;
|
||||
if(payload->tempfile_name) {
|
||||
move_file(payload->tempfile_name, localpath);
|
||||
move_file(handle->sandboxuser, payload->tempfile_name, localpath);
|
||||
}
|
||||
if(payload->destfile_name) {
|
||||
int ret = move_file(payload->destfile_name, localpath);
|
||||
int ret = move_file(handle->sandboxuser, payload->destfile_name, localpath);
|
||||
|
||||
if(ret == -1) {
|
||||
/* ignore error if the file already existed - only signature file was downloaded */
|
||||
if(payload->mtime_existing_file == 0) {
|
||||
_alpm_log(handle, ALPM_LOG_ERROR, _("could not move %s into %s (%s)\n"),
|
||||
payload->destfile_name, localpath, strerror(errno));
|
||||
returnvalue = -1;
|
||||
}
|
||||
}
|
||||
|
@ -1124,7 +1129,7 @@ static int finalize_download_locations(alpm_list_t *payloads, const char *localp
|
|||
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);
|
||||
move_file(handle->sandboxuser, sig_filename, localpath);
|
||||
FREE(sig_filename);
|
||||
}
|
||||
}
|
||||
|
@ -1265,7 +1270,7 @@ download_signature:
|
|||
}
|
||||
|
||||
if (finalize_download_locations(payloads, localpath) != 0 && ret == 0) {
|
||||
return -1;
|
||||
RET_ERR(handle, ALPM_ERR_RETRIEVE, -1);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue