summaryrefslogtreecommitdiff
path: root/lib/libalpm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libalpm')
-rw-r--r--lib/libalpm/alpm.h9
-rw-r--r--lib/libalpm/be_local.c7
-rw-r--r--lib/libalpm/be_sync.c3
-rw-r--r--lib/libalpm/package.c11
-rw-r--r--lib/libalpm/package.h2
5 files changed, 29 insertions, 3 deletions
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 6d696ec8..3febd0ec 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -609,12 +609,19 @@ time_t alpm_pkg_get_installdate(alpm_pkg_t *pkg);
const char *alpm_pkg_get_packager(alpm_pkg_t *pkg);
/** Returns the package's MD5 checksum as a string.
- * The returned string is a sequence of lowercase hexadecimal digits.
+ * The returned string is a sequence of 32 lowercase hexadecimal digits.
* @param pkg a pointer to package
* @return a reference to an internal string
*/
const char *alpm_pkg_get_md5sum(alpm_pkg_t *pkg);
+/** Returns the package's SHA256 checksum as a string.
+ * The returned string is a sequence of 64 lowercase hexadecimal digits.
+ * @param pkg a pointer to package
+ * @return a reference to an internal string
+ */
+const char *alpm_pkg_get_sha256sum(alpm_pkg_t *pkg);
+
/** Returns the architecture for which the package was built.
* @param pkg a pointer to package
* @return a reference to an internal string
diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c
index 5d136c9e..67b66f28 100644
--- a/lib/libalpm/be_local.c
+++ b/lib/libalpm/be_local.c
@@ -99,6 +99,12 @@ static const char *_cache_get_md5sum(alpm_pkg_t *pkg)
return pkg->md5sum;
}
+static const char *_cache_get_sha256sum(alpm_pkg_t *pkg)
+{
+ LAZY_LOAD(INFRQ_DESC, NULL);
+ return pkg->sha256sum;
+}
+
static const char *_cache_get_arch(alpm_pkg_t *pkg)
{
LAZY_LOAD(INFRQ_DESC, NULL);
@@ -251,6 +257,7 @@ static struct pkg_operations local_pkg_ops = {
.get_installdate = _cache_get_installdate,
.get_packager = _cache_get_packager,
.get_md5sum = _cache_get_md5sum,
+ .get_sha256sum = _cache_get_sha256sum,
.get_arch = _cache_get_arch,
.get_size = _cache_get_size,
.get_isize = _cache_get_isize,
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index d4c71a8e..069e39dd 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -543,8 +543,7 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
} else if(strcmp(line, "%MD5SUM%") == 0) {
READ_AND_STORE(pkg->md5sum);
} else if(strcmp(line, "%SHA256SUM%") == 0) {
- /* we don't do anything with this value right now */
- READ_NEXT();
+ READ_AND_STORE(pkg->sha256sum);
} else if(strcmp(line, "%PGPSIG%") == 0) {
READ_AND_STORE(pkg->base64_sig);
} else if(strcmp(line, "%REPLACES%") == 0) {
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index e5136c77..a1bcb7a1 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -92,6 +92,7 @@ static time_t _pkg_get_builddate(alpm_pkg_t *pkg) { return pkg->builddate
static time_t _pkg_get_installdate(alpm_pkg_t *pkg) { return pkg->installdate; }
static const char *_pkg_get_packager(alpm_pkg_t *pkg) { return pkg->packager; }
static const char *_pkg_get_md5sum(alpm_pkg_t *pkg) { return pkg->md5sum; }
+static const char *_pkg_get_sha256sum(alpm_pkg_t *pkg) { return pkg->sha256sum; }
static const char *_pkg_get_arch(alpm_pkg_t *pkg) { return pkg->arch; }
static off_t _pkg_get_size(alpm_pkg_t *pkg) { return pkg->size; }
static off_t _pkg_get_isize(alpm_pkg_t *pkg) { return pkg->isize; }
@@ -139,6 +140,7 @@ struct pkg_operations default_pkg_ops = {
.get_installdate = _pkg_get_installdate,
.get_packager = _pkg_get_packager,
.get_md5sum = _pkg_get_md5sum,
+ .get_sha256sum = _pkg_get_sha256sum,
.get_arch = _pkg_get_arch,
.get_size = _pkg_get_size,
.get_isize = _pkg_get_isize,
@@ -229,6 +231,13 @@ const char SYMEXPORT *alpm_pkg_get_md5sum(alpm_pkg_t *pkg)
return pkg->ops->get_md5sum(pkg);
}
+const char SYMEXPORT *alpm_pkg_get_sha256sum(alpm_pkg_t *pkg)
+{
+ ASSERT(pkg != NULL, return NULL);
+ pkg->handle->pm_errno = 0;
+ return pkg->ops->get_sha256sum(pkg);
+}
+
const char SYMEXPORT *alpm_pkg_get_base64_sig(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
@@ -483,6 +492,7 @@ alpm_pkg_t *_alpm_pkg_dup(alpm_pkg_t *pkg)
newpkg->installdate = pkg->installdate;
STRDUP(newpkg->packager, pkg->packager, goto cleanup);
STRDUP(newpkg->md5sum, pkg->md5sum, goto cleanup);
+ STRDUP(newpkg->sha256sum, pkg->md5sum, goto cleanup);
STRDUP(newpkg->arch, pkg->arch, goto cleanup);
newpkg->size = pkg->size;
newpkg->isize = pkg->isize;
@@ -548,6 +558,7 @@ void _alpm_pkg_free(alpm_pkg_t *pkg)
FREE(pkg->url);
FREE(pkg->packager);
FREE(pkg->md5sum);
+ FREE(pkg->sha256sum);
FREE(pkg->base64_sig);
FREE(pkg->arch);
FREELIST(pkg->licenses);
diff --git a/lib/libalpm/package.h b/lib/libalpm/package.h
index d19d8332..b60bbf76 100644
--- a/lib/libalpm/package.h
+++ b/lib/libalpm/package.h
@@ -55,6 +55,7 @@ struct pkg_operations {
time_t (*get_installdate) (alpm_pkg_t *);
const char *(*get_packager) (alpm_pkg_t *);
const char *(*get_md5sum) (alpm_pkg_t *);
+ const char *(*get_sha256sum) (alpm_pkg_t *);
const char *(*get_arch) (alpm_pkg_t *);
off_t (*get_size) (alpm_pkg_t *);
off_t (*get_isize) (alpm_pkg_t *);
@@ -100,6 +101,7 @@ struct __alpm_pkg_t {
char *url;
char *packager;
char *md5sum;
+ char *sha256sum;
char *base64_sig;
char *arch;