]> git.ipfire.org Git - pakfire.git/commitdiff
pakfire: Move cache directory into user's home
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 18 Jul 2022 09:24:54 +0000 (09:24 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 18 Jul 2022 09:25:20 +0000 (09:25 +0000)
This is only happening when running as an unprivileged user.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/util.h
src/libpakfire/pakfire.c
src/libpakfire/util.c

index f0ad5c0e53ea02ca28521e89e13c9e97ec893a6e..46929bc6eb8559bcdbaf3326d9219baf1f85924a 100644 (file)
@@ -23,6 +23,7 @@
 
 #ifdef PAKFIRE_PRIVATE
 
+#include <pwd.h>
 #include <stdio.h>
 #include <time.h>
 
@@ -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);
 
index 4dffb7328681718f5370ef63d920f922fdf1689b..345be179eaf14027e2bfcc00a80c0b672e744505 100644 (file)
@@ -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);
index 6f3231c2e4d8956d9bdd40eecd4695133e6707b5..fd3a014d8afdace7345e9a66ae1c7ca075c3533c 100644 (file)
@@ -24,6 +24,7 @@
 #include <ftw.h>
 #include <libgen.h>
 #include <math.h>
+#include <pwd.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -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;