#ifdef PAKFIRE_PRIVATE
+#include <pwd.h>
#include <stdio.h>
#include <time.h>
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);
}
// 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);
#include <ftw.h>
#include <libgen.h>
#include <math.h>
+#include <pwd.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
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;