From 98de5353550b1750591d4469429563f5537519ed Mon Sep 17 00:00:00 2001 From: Timo Teras Date: Fri, 6 Nov 2009 16:16:49 +0200 Subject: archive: overwrite protection needs to use real filename otherwise we always extract the file as .apk-new and the database side just overwrites. --- src/archive.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/archive.c b/src/archive.c index 0ba17c5..a2707cd 100644 --- a/src/archive.c +++ b/src/archive.c @@ -344,8 +344,14 @@ int apk_archive_entry_extract(int atfd, const struct apk_file_info *ae, (ae->link_target != NULL)) { /* non-standard entries need to be deleted first */ if (apk_flags & APK_NEVER_OVERWRITE) { - if (faccessat(atfd, fn, F_OK, AT_SYMLINK_NOFOLLOW) == 0) + if (faccessat(atfd, ae->name, F_OK, + AT_SYMLINK_NOFOLLOW) == 0) { + /* destination exists, but we are not supposed + * to overwrite, just clean the temp file */ + if (suffix != NULL) + unlinkat(atfd, fn, 0); return 0; + } } else { unlinkat(atfd, fn, 0); } -- cgit v1.2.3