summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAurelien Foret <aurelien@archlinux.org>2006-02-05 10:57:29 +0100
committerAurelien Foret <aurelien@archlinux.org>2006-02-05 10:57:29 +0100
commit298c1a8e9770de435c5fc8d50c6286e9b9279da8 (patch)
tree0f63665d7480d4ba66f1b433f9eebc8173846a6c
parentbcd7ce0dfdc773be440cae5f87b6b9538442aef3 (diff)
downloadpacman-298c1a8e9770de435c5fc8d50c6286e9b9279da8.tar.gz
pacman-298c1a8e9770de435c5fc8d50c6286e9b9279da8.tar.xz
added alpm_pkg_checkmd5sum() to check md5sums for package from the cache
-rw-r--r--lib/libalpm/alpm.c38
-rw-r--r--lib/libalpm/alpm.h1
2 files changed, 39 insertions, 0 deletions
diff --git a/lib/libalpm/alpm.c b/lib/libalpm/alpm.c
index 9336bc4c..d3eceefa 100644
--- a/lib/libalpm/alpm.c
+++ b/lib/libalpm/alpm.c
@@ -534,6 +534,44 @@ int alpm_pkg_free(pmpkg_t *pkg)
return(0);
}
+/** Check the integrity of a package from the sync cache.
+ * @param pkg package pointer
+ * @return 0 on success, -1 on error (pm_errno is set accordingly)
+ */
+int alpm_pkg_checkmd5sum(pmpkg_t *pkg)
+{
+ char *path = NULL;
+ char *md5sum = NULL;
+ int retval = 0;
+
+ ASSERT(pkg != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1));
+ ASSERT(pkg->md5sum[0] != 0, RET_ERR(PM_ERR_XXX, -1));
+
+ asprintf(&path, "%s%s/%s-%s" PM_EXT_PKG,
+ handle->root, handle->cachedir,
+ pkg->name, pkg->version);
+
+ md5sum = MDFile(path);
+ if(md5sum == NULL) {
+ _alpm_log(PM_LOG_ERROR, "could not get md5 checksum for package %s-%s\n",
+ pkg->name, pkg->version);
+ pm_errno = PM_ERR_NOT_A_FILE;
+ retval = -1;
+ } else {
+ if(strcmp(md5sum, pkg->md5sum) != 0) {
+ _alpm_log(PM_LOG_ERROR, "md5sums do not match for package %s-%s\n",
+ pkg->name, pkg->version);
+ pm_errno = PM_ERR_PKG_INVALID;
+ retval = -1;
+ }
+ }
+
+ FREE(path);
+ FREE(md5sum);
+
+ return(retval);
+}
+
/** Compare versions.
* @param ver1 first version
* @param ver2 secont version
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 47318ada..1980d89c 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -164,6 +164,7 @@ enum {
void *alpm_pkg_getinfo(PM_PKG *pkg, unsigned char parm);
int alpm_pkg_load(char *filename, PM_PKG **pkg);
int alpm_pkg_free(PM_PKG *pkg);
+int alpm_pkg_checkmd5sum(PM_PKG *pkg);
int alpm_pkg_vercmp(const char *ver1, const char *ver2);
/*