From: Michael Tremer Date: Mon, 18 Jul 2022 09:24:54 +0000 (+0000) Subject: pakfire: Move cache directory into user's home X-Git-Tag: 0.9.28~683 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd446c47966da1e0b2ccd18cf69b54cb01737040;p=pakfire.git pakfire: Move cache directory into user's home This is only happening when running as an unprivileged user. Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/util.h b/src/libpakfire/include/pakfire/util.h index f0ad5c0e5..46929bc6e 100644 --- a/src/libpakfire/include/pakfire/util.h +++ b/src/libpakfire/include/pakfire/util.h @@ -23,6 +23,7 @@ #ifdef PAKFIRE_PRIVATE +#include #include #include @@ -68,6 +69,7 @@ char* pakfire_dirname(const char* path); char* pakfire_remove_trailing_newline(char* str); const char* pakfire_hostname(void); +const char* pakfire_get_home(struct pakfire* pakfire, uid_t uid); int pakfire_read_file_into_buffer(FILE* f, char** buffer, size_t* len); diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 4dffb7328..345be179e 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -724,8 +724,20 @@ PAKFIRE_EXPORT int pakfire_create(struct pakfire** pakfire, const char* path, } // Set cache path - pakfire_string_format(p->cache_path, "%s/%s/%s/%s", - PAKFIRE_CACHE_DIR, p->distro.id, p->distro.version_id, p->arch); + if (p->uid) { + const char* home = pakfire_get_home(p, p->uid); + if (!home) { + ERROR(p, "Could not find home directory\n"); + errno = ENOENT; + goto ERROR; + } + + pakfire_string_format(p->cache_path, "%s/.pakfire/cache/%s/%s/%s", + home, p->distro.id, p->distro.version_id, p->arch); + } else { + pakfire_string_format(p->cache_path, "%s/%s/%s/%s", + PAKFIRE_CACHE_DIR, p->distro.id, p->distro.version_id, p->arch); + } // Set keystore path r = pakfire_make_path(p, p->keystore_path, KEYSTORE_DIR); diff --git a/src/libpakfire/util.c b/src/libpakfire/util.c index 6f3231c2e..fd3a014d8 100644 --- a/src/libpakfire/util.c +++ b/src/libpakfire/util.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -787,6 +788,14 @@ const char* pakfire_hostname() { return __hostname; } +const char* pakfire_get_home(struct pakfire* pakfire, uid_t uid) { + struct passwd* entry = getpwuid(uid); + if (!entry) + return NULL; + + return entry->pw_dir; +} + int pakfire_read_file_into_buffer(FILE* f, char** buffer, size_t* len) { if (!f) return -EBADF;