From f4875fab9bbe3011446032bebcbe232448a3e8d7 Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Mon, 17 Oct 2011 09:47:06 -0400 Subject: dload: chmod tempfiles to respect umask Dan: fix mask calculation, add it to the success/fail block instead. Signed-off-by: Dave Reisner Signed-off-by: Dan McGee --- lib/libalpm/dload.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 9d919b0a..546329b3 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -178,6 +178,14 @@ static int utimes_long(const char *path, long seconds) return 0; } +/* prefix to avoid possible future clash with getumask(3) */ +static mode_t _getumask(void) +{ + mode_t mask = umask(0); + umask(mask); + return mask; +} + static size_t parse_headers(void *ptr, size_t size, size_t nmemb, void *user) { size_t realsize = size * nmemb; @@ -295,9 +303,12 @@ static FILE *create_tempfile(struct dload_payload *payload, const char *localpat MALLOC(randpath, len, RET_ERR(payload->handle, ALPM_ERR_MEMORY, NULL)); snprintf(randpath, len, "%salpmtmp.XXXXXX", localpath); if((fd = mkstemp(randpath)) == -1 || + fchmod(fd, ~(_getumask()) & 0666) || !(fp = fdopen(fd, payload->tempfile_openmode))) { unlink(randpath); - close(fd); + if(fd >= 0) { + close(fd); + } _alpm_log(payload->handle, ALPM_LOG_ERROR, _("failed to create temporary file for download\n")); return NULL; -- cgit v1.2.3-70-g09d2