diff -uNr apk-tools-2.10.3/src/database.c apk-tools-2.10.3.mod/src/database.c --- apk-tools-2.10.3/src/database.c 2018-11-15 15:09:07.000000000 +0200 +++ apk-tools-2.10.3.mod/src/database.c 2018-11-19 17:45:05.469750983 +0200 @@ -37,6 +37,8 @@ #include "apk_print.h" #include "apk_openssl.h" +#include "termux_prefix.h" + static const apk_spn_match_def apk_spn_repo_separators = { [4] = (1<<0) /* */, [7] = (1<<2) /*:*/, @@ -54,22 +56,22 @@ static const char * const apkindex_tar_gz = "APKINDEX.tar.gz"; -static const char * const apk_static_cache_dir = "var/cache/apk"; +static const char * const apk_static_cache_dir = TERMUX_PREFIX_RELATIVE"var/cache/apk"; -static const char * const apk_world_file = "etc/apk/world"; -static const char * const apk_world_file_tmp = "etc/apk/world.new"; -static const char * const apk_arch_file = "etc/apk/arch"; +static const char * const apk_world_file = TERMUX_PREFIX_RELATIVE"etc/apk/world"; +static const char * const apk_world_file_tmp = TERMUX_PREFIX_RELATIVE"etc/apk/world.new"; +static const char * const apk_arch_file = TERMUX_PREFIX_RELATIVE"etc/apk/arch"; -static const char * const apk_lock_file = "lib/apk/db/lock"; +static const char * const apk_lock_file = TERMUX_PREFIX_RELATIVE"lib/apk/db/lock"; -static const char * const apk_scripts_file = "lib/apk/db/scripts.tar"; -static const char * const apk_scripts_file_tmp = "lib/apk/db/scripts.tar.new"; +static const char * const apk_scripts_file = TERMUX_PREFIX_RELATIVE"lib/apk/db/scripts.tar"; +static const char * const apk_scripts_file_tmp = TERMUX_PREFIX_RELATIVE"lib/apk/db/scripts.tar.new"; -static const char * const apk_triggers_file = "lib/apk/db/triggers"; -static const char * const apk_triggers_file_tmp = "lib/apk/db/triggers.new"; +static const char * const apk_triggers_file = TERMUX_PREFIX_RELATIVE"lib/apk/db/triggers"; +static const char * const apk_triggers_file_tmp = TERMUX_PREFIX_RELATIVE"lib/apk/db/triggers.new"; -const char * const apk_installed_file = "lib/apk/db/installed"; -static const char * const apk_installed_file_tmp = "lib/apk/db/installed.new"; +const char * const apk_installed_file = TERMUX_PREFIX_RELATIVE"lib/apk/db/installed"; +static const char * const apk_installed_file_tmp = TERMUX_PREFIX_RELATIVE"lib/apk/db/installed.new"; static struct apk_db_acl *apk_default_acl_dir, *apk_default_acl_file; @@ -1332,19 +1334,20 @@ static int apk_db_create(struct apk_database *db) { int fd; - - mkdirat(db->root_fd, "tmp", 01777); + mkdirat(db->root_fd, TERMUX_PREFIX_RELATIVE"tmp", 01777); mkdirat(db->root_fd, "dev", 0755); +#ifndef __ANDROID__ mknodat(db->root_fd, "dev/null", S_IFCHR | 0666, makedev(1, 3)); - mkdirat(db->root_fd, "etc", 0755); - mkdirat(db->root_fd, "etc/apk", 0755); - mkdirat(db->root_fd, "lib", 0755); - mkdirat(db->root_fd, "lib/apk", 0755); - mkdirat(db->root_fd, "lib/apk/db", 0755); - mkdirat(db->root_fd, "var", 0755); - mkdirat(db->root_fd, "var/cache", 0755); - mkdirat(db->root_fd, "var/cache/apk", 0755); - mkdirat(db->root_fd, "var/cache/misc", 0755); +#endif + mkdirat(db->root_fd, TERMUX_PREFIX_RELATIVE"etc", 0755); + mkdirat(db->root_fd, TERMUX_PREFIX_RELATIVE"etc/apk", 0755); + mkdirat(db->root_fd, TERMUX_PREFIX_RELATIVE"lib", 0755); + mkdirat(db->root_fd, TERMUX_PREFIX_RELATIVE"lib/apk", 0755); + mkdirat(db->root_fd, TERMUX_PREFIX_RELATIVE"lib/apk/db", 0755); + mkdirat(db->root_fd, TERMUX_PREFIX_RELATIVE"var", 0755); + mkdirat(db->root_fd, TERMUX_PREFIX_RELATIVE"var/cache", 0755); + mkdirat(db->root_fd, TERMUX_PREFIX_RELATIVE"var/cache/apk", 0755); + mkdirat(db->root_fd, TERMUX_PREFIX_RELATIVE"var/cache/misc", 0755); fd = openat(db->root_fd, apk_world_file, O_CREAT|O_RDWR|O_TRUNC|O_CLOEXEC, 0644); if (fd < 0) @@ -1533,7 +1536,7 @@ !(dbopts->open_flags & APK_OPENF_NO_AUTOUPDATE) && !(apk_flags & APK_NO_NETWORK)) db->autoupdate = 1; - if (!dbopts->cache_dir) dbopts->cache_dir = "etc/apk/cache"; + if (!dbopts->cache_dir) dbopts->cache_dir = TERMUX_PREFIX_RELATIVE"etc/apk/cache"; apk_db_setup_repositories(db, dbopts->cache_dir); @@ -1625,7 +1628,7 @@ blob = APK_BLOB_STR("+etc\n" "@etc/init.d\n" "!etc/apk\n"); apk_blob_for_each_segment(blob, "\n", add_protected_path, db); - apk_dir_foreach_file(openat(db->root_fd, "etc/apk/protected_paths.d", O_RDONLY | O_CLOEXEC), + apk_dir_foreach_file(openat(db->root_fd, TERMUX_PREFIX_RELATIVE"etc/apk/protected_paths.d", O_RDONLY | O_CLOEXEC), add_protected_paths_from_file, db); /* figure out where to have the cache */ @@ -1655,7 +1658,7 @@ } db->keys_fd = openat(db->root_fd, - dbopts->keys_dir ?: "etc/apk/keys", + dbopts->keys_dir ?: TERMUX_PREFIX_RELATIVE"etc/apk/keys", O_RDONLY | O_CLOEXEC); if (apk_flags & APK_OVERLAY_FROM_STDIN) { @@ -1693,8 +1696,8 @@ apk_db_add_repository(db, APK_BLOB_STR(repo->url)); if (dbopts->repositories_file == NULL) { - add_repos_from_file(db, db->root_fd, "etc/apk/repositories"); - apk_dir_foreach_file(openat(db->root_fd, "etc/apk/repositories.d", O_RDONLY | O_CLOEXEC), + add_repos_from_file(db, db->root_fd, TERMUX_PREFIX_RELATIVE"etc/apk/repositories"); + apk_dir_foreach_file(openat(db->root_fd, TERMUX_PREFIX_RELATIVE"etc/apk/repositories.d", O_RDONLY | O_CLOEXEC), add_repos_from_file, db); } else { add_repos_from_file(db, db->root_fd, dbopts->repositories_file); @@ -1931,7 +1934,7 @@ int status; pid_t pid; static char * const environment[] = { - "PATH=/usr/sbin:/usr/bin:/sbin:/bin", + "PATH=@TERMUX_PREFIX@/bin:@TERMUX_PREFIX@/bin/applets", NULL }; @@ -1968,9 +1971,10 @@ r = fstatat(db->root_fd, dir->name, &st, AT_SYMLINK_NOFOLLOW); if (r < 0 || (st.st_mode & 07777) != (dir->mode & 07777)) fchmodat(db->root_fd, dir->name, dir->mode, 0); +#ifndef __ANDROID__ if (r < 0 || st.st_uid != dir->uid || st.st_gid != dir->gid) fchownat(db->root_fd, dir->name, dir->uid, dir->gid, 0); - +#endif return 0; }