Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add a function to generate checksum for file in the new format
Baptiste Daroussin committed 10 years ago
commit 721b5a1cec64723dd41bd5731a324e3525ebf552
parent 9b24a8b
3 files changed +33 -0
modified libpkg/pkg_checksum.c
@@ -760,3 +760,29 @@ pkg_checksum_validate_file(const char *path, const char *sum)

	return (true);
}
+

+
char *
+
pkg_checksum_generate_file(const char *path, pkg_checksum_type_t type)
+
{
+
	struct stat st;
+
	unsigned char *sum;
+
	char *cksum;
+

+
	if (lstat(path, &st) == -1) {
+
		pkg_emit_errno("pkg_checksum_generate_file", "lstat");
+
		return (NULL);
+
	}
+

+
	if (S_ISLNK(st.st_mode))
+
		sum = pkg_checksum_symlink(path, NULL, type);
+
	else
+
		sum = pkg_checksum_file(path, type);
+

+
	if (sum == NULL)
+
		return (NULL);
+

+
	asprintf(&cksum, "%d%c%s", type, PKG_CKSUM_SEPARATOR, sum);
+
	free(sum);
+

+
	return (cksum);
+
}
modified libpkg/private/pkg.h
@@ -647,6 +647,7 @@ pkg_checksum_type_t pkg_checksum_type_from_string(const char *name);
const char* pkg_checksum_type_to_string(pkg_checksum_type_t type);
size_t pkg_checksum_type_size(pkg_checksum_type_t type);
int pkg_checksum_calculate(struct pkg *pkg, struct pkgdb *db);
+
char *pkg_checksum_generate_file(const char *path, pkg_checksum_type_t type);

int pkg_add_upgrade(struct pkgdb *db, const char *path, unsigned flags,
    struct pkg_manifest_key *keys, const char *location,
modified tests/lib/checksum.c
@@ -47,8 +47,14 @@ ATF_TC_BODY(check_symlinks, tc)
	ATF_REQUIRE_STREQ(sum, "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae");

	ATF_CHECK(pkg_checksum_validate_file("bar", "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"));
+
	free(sum);

+
	sum = pkg_checksum_generate_file("bar", PKG_HASH_TYPE_SHA256_HEX);
+
	ATF_REQUIRE_STREQ(sum, "1$2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae");
	free(sum);
+

+
	sum = pkg_checksum_generate_file("bar", PKG_HASH_TYPE_BLAKE2_BASE32);
+
	ATF_REQUIRE_STREQ(sum, "2$kgygnaah7wxsgn1wkuic4j78zq8dicmx53picmma99ogmkbd7k5nhuxr5xxemz6yzjab15oor3tjt7nupj8mh764y7kddbne7qw9agn");
}

ATF_TP_ADD_TCS(tp)