From 628e33c0c15615f328a5bddc64969a727d154358 Mon Sep 17 00:00:00 2001 From: Thijs van Dijk Date: Wed, 8 Jan 2025 11:12:59 +0100 Subject: [PATCH] Add an error message if the sandbox user account does not exist --- lib/libalpm/be_sync.c | 2 +- lib/libalpm/dload.c | 2 +- lib/libalpm/sync.c | 2 +- lib/libalpm/util.c | 13 +++++++++---- lib/libalpm/util.h | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c index 35bee7eb..bea45922 100644 --- a/lib/libalpm/be_sync.c +++ b/lib/libalpm/be_sync.c @@ -153,7 +153,7 @@ int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force) syncpath = get_sync_dir(handle); ASSERT(syncpath != NULL, return -1); - temporary_syncpath = _alpm_temporary_download_dir_setup(syncpath, handle->sandboxuser); + temporary_syncpath = _alpm_temporary_download_dir_setup(handle, syncpath); ASSERT(temporary_syncpath != NULL, FREE(syncpath); return -1); /* make sure we have a sane umask */ diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 03807fa0..5b495e98 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -1301,7 +1301,7 @@ int SYMEXPORT alpm_fetch_pkgurl(alpm_handle_t *handle, const alpm_list_t *urls, /* find a valid cache dir to download to */ cachedir = _alpm_filecache_setup(handle); - temporary_cachedir = _alpm_temporary_download_dir_setup(cachedir, handle->sandboxuser); + temporary_cachedir = _alpm_temporary_download_dir_setup(handle, cachedir); ASSERT(temporary_cachedir != NULL, return -1); for(i = urls; i; i = i->next) { diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 821e75a3..d90e6a56 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -780,7 +780,7 @@ static int download_files(alpm_handle_t *handle) alpm_list_t *payloads = NULL; cachedir = _alpm_filecache_setup(handle); - temporary_cachedir = _alpm_temporary_download_dir_setup(cachedir, handle->sandboxuser); + temporary_cachedir = _alpm_temporary_download_dir_setup(handle, cachedir); if(temporary_cachedir == NULL) { ret = -1; goto finish; diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c index feb38284..b8ff2fd3 100644 --- a/lib/libalpm/util.c +++ b/lib/libalpm/util.c @@ -949,17 +949,22 @@ const char *_alpm_filecache_setup(alpm_handle_t *handle) /** Create a temporary directory under the supplied directory. * The new directory is writable by the download user, and will be * removed after the download operation has completed. + * @param handle the context handle * @param dir existing sync or cache directory - * @param user download user name * @return pointer to a sub-directory writable by the download user inside the existing directory. */ -char *_alpm_temporary_download_dir_setup(const char *dir, const char *user) +char *_alpm_temporary_download_dir_setup(alpm_handle_t *handle, const char *dir) { struct passwd const *pw = NULL; ASSERT(dir != NULL, return NULL); - if(user != NULL) { - ASSERT((pw = getpwnam(user)) != NULL, return NULL); + if(handle->sandboxuser != NULL) { + pw = getpwnam(handle->sandboxuser); + if ( pw == NULL ) { + _alpm_log(handle, ALPM_LOG_ERROR, + _("could not create temporary download dir: user '%s' does not exist\n"), handle->sandboxuser); + return NULL; + } } const char template[] = "download-XXXXXX"; diff --git a/lib/libalpm/util.h b/lib/libalpm/util.h index 1af4a57c..faed6191 100644 --- a/lib/libalpm/util.h +++ b/lib/libalpm/util.h @@ -139,7 +139,7 @@ char *_alpm_filecache_find(alpm_handle_t *handle, const char *filename); /* Checks whether a file exists in cache */ int _alpm_filecache_exists(alpm_handle_t *handle, const char *filename); const char *_alpm_filecache_setup(alpm_handle_t *handle); -char *_alpm_temporary_download_dir_setup(const char *dir, const char *user); +char *_alpm_temporary_download_dir_setup(alpm_handle_t *handle, const char *dir); void _alpm_remove_temporary_download_dir(const char *dir); /* Unlike many uses of alpm_pkgvalidation_t, _alpm_test_checksum expects