diff options
author | Timo Teras <timo.teras@iki.fi> | 2009-07-30 11:55:59 +0300 |
---|---|---|
committer | Timo Teras <timo.teras@iki.fi> | 2009-07-30 11:55:59 +0300 |
commit | c1fe6d08f3ba77bf13b098216fc5e5bcd4ba23f7 (patch) | |
tree | ca38a4df58d627d6b1973e93ff810ac27abde7ea | |
parent | 02cb0d2f8f3fa7e2bc8005160f0baec81bed69d2 (diff) | |
download | apk-tools-c1fe6d08f3ba77bf13b098216fc5e5bcd4ba23f7.tar.gz apk-tools-c1fe6d08f3ba77bf13b098216fc5e5bcd4ba23f7.tar.bz2 apk-tools-c1fe6d08f3ba77bf13b098216fc5e5bcd4ba23f7.tar.xz apk-tools-c1fe6d08f3ba77bf13b098216fc5e5bcd4ba23f7.zip |
db: fix checksum storing to db
also take precautions in audit code if the db is missing the
checksum.
-rw-r--r-- | src/audit.c | 7 | ||||
-rw-r--r-- | src/database.c | 8 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/audit.c b/src/audit.c index 31965df..76bd492 100644 --- a/src/audit.c +++ b/src/audit.c @@ -69,10 +69,9 @@ static int audit_directory(apk_hash_item item, void *ctx) } else { dbf = apk_db_file_query(db, bdir, APK_BLOB_STR(de->d_name)); if (dbf != NULL) { - if (apk_file_get_info(tmp, dbf->csum.type, &fi) < 0) - continue; - - if (apk_checksum_compare(&fi.csum, &dbf->csum) == 0) + if (dbf->csum.type != APK_CHECKSUM_NONE && + apk_file_get_info(tmp, dbf->csum.type, &fi) == 0 && + apk_checksum_compare(&fi.csum, &dbf->csum) == 0) continue; reason = 'U'; diff --git a/src/database.c b/src/database.c index 968d55e..16ae94b 100644 --- a/src/database.c +++ b/src/database.c @@ -1458,6 +1458,7 @@ static int apk_db_install_archive_entry(void *_ctx, diri->dir->name, file->name); r = apk_archive_entry_extract(ae, is, alt_name, extract_cb, ctx); + memcpy(&file->csum, &ae->csum, sizeof(file->csum)); } else { if (apk_verbosity >= 3) apk_message("%s", ae->name); @@ -1502,7 +1503,8 @@ static void apk_db_purge_pkg(struct apk_database *db, struct apk_package *pkg, hash = apk_blob_hash_seed(key.filename, diri->dir->hash); if (!(diri->dir->flags & APK_DBDIRF_PROTECTED) || (apk_flags & APK_PURGE) || - (apk_file_get_info(name, file->csum.type, &fi) == 0 && + (file->csum.type != APK_CHECKSUM_NONE && + apk_file_get_info(name, file->csum.type, &fi) == 0 && apk_checksum_compare(&file->csum, &fi.csum) == 0)) unlink(name); if (apk_verbosity >= 3) @@ -1565,6 +1567,7 @@ static void apk_db_migrate_files(struct apk_database *db, if ((diri->dir->flags & APK_DBDIRF_PROTECTED) && (r == 0) && (ofile == NULL || + ofile->csum.type == APK_CHECKSUM_NONE || apk_checksum_compare(&ofile->csum, &fi.csum) != 0)) { /* Protected directory, with file without * db entry, or local modifications. @@ -1575,7 +1578,8 @@ static void apk_db_migrate_files(struct apk_database *db, ofile->csum.type != file->csum.type) apk_file_get_info(name, file->csum.type, &fi); if ((apk_flags & APK_CLEAN_PROTECTED) || - apk_checksum_compare(&file->csum, &fi.csum) == 0) + (file->csum.type != APK_CHECKSUM_NONE && + apk_checksum_compare(&file->csum, &fi.csum) == 0)) unlink(tmpname); } else { /* Overwrite the old file */ |