Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=9d615d8f640044e7084f3bc03eea3b43c566c00d

commit 9d615d8f640044e7084f3bc03eea3b43c566c00d
Author: Michel Hermier <[email protected]>
Date:   Sat Jun 7 11:50:46 2014 +0200

libpacman: Move package integrity check to _pacman_cachedpkg_check_integrity 
function.

diff --git a/lib/libpacman/trans.cpp b/lib/libpacman/trans.cpp
index e1939e8..f9ed841 100644
--- a/lib/libpacman/trans.cpp
+++ b/lib/libpacman/trans.cpp
@@ -1405,6 +1405,72 @@ int _pacman_localpackage_remove(Package *pkg, pmtrans_t 
*trans, int howmany, int
return 0;
}

+static
+int _pacman_cachedpkg_check_integrity(Package *spkg, __pmtrans_t *trans, 
pmlist_t **data)
+{
+       char str[PATH_MAX], pkgname[PATH_MAX];
+       char *md5sum1, *md5sum2, *sha1sum1, *sha1sum2;
+       char *ptr=NULL;
+       int retval = 0;
+
+       spkg->filename(pkgname, sizeof(pkgname));
+       md5sum1 = spkg->md5sum;
+       sha1sum1 = spkg->sha1sum;
+
+       if((md5sum1 == NULL) && (sha1sum1 == NULL)) {
+               if((ptr = (char *)malloc(512)) == NULL) {
+                       RET_ERR(PM_ERR_MEMORY, -1);
+               }
+               snprintf(ptr, 512, _("can't get md5 or sha1 checksum for 
package %s\n"), pkgname);
+               *data = _pacman_list_add(*data, ptr);
+               retval = 1;
+               goto out;
+       }
+       snprintf(str, PATH_MAX, "%s/%s/%s", handle->root, handle->cachedir, 
pkgname);
+       md5sum2 = _pacman_MDFile(str);
+       sha1sum2 = _pacman_SHAFile(str);
+       if(md5sum2 == NULL && sha1sum2 == NULL) {
+               if((ptr = (char *)malloc(512)) == NULL) {
+                       RET_ERR(PM_ERR_MEMORY, -1);
+               }
+               snprintf(ptr, 512, _("can't get md5 or sha1 checksum for 
package %s\n"), pkgname);
+               *data = _pacman_list_add(*data, ptr);
+               retval = 1;
+               goto out;
+       }
+       if((strcmp(md5sum1, md5sum2) != 0) && (strcmp(sha1sum1, sha1sum2) != 
0)) {
+               int doremove = 0;
+
+               _pacman_log(PM_LOG_DEBUG, _("expected md5:  '%s'"), md5sum1);
+               _pacman_log(PM_LOG_DEBUG, _("actual md5:    '%s'"), md5sum2);
+               _pacman_log(PM_LOG_DEBUG, _("expected sha1: '%s'"), sha1sum1);
+               _pacman_log(PM_LOG_DEBUG, _("actual sha1:   '%s'"), sha1sum2);
+
+               if((ptr = (char *)malloc(512)) == NULL) {
+                       RET_ERR(PM_ERR_MEMORY, -1);
+               }
+               if(trans->flags & PM_TRANS_FLAG_ALLDEPS) {
+                       doremove=1;
+               } else {
+                       QUESTION(trans, PM_TRANS_CONV_CORRUPTED_PKG, pkgname, 
NULL, NULL, &doremove);
+               }
+               if(doremove) {
+                       snprintf(str, PATH_MAX, "%s%s/%s-%s-%s" PM_EXT_PKG, 
handle->root, handle->cachedir, spkg->name(), spkg->version(), spkg->arch);
+                       unlink(str);
+                       snprintf(ptr, 512, _("archive %s was corrupted (bad MD5 
or SHA1 checksum)\n"), pkgname);
+               } else {
+                       snprintf(ptr, 512, _("archive %s is corrupted (bad MD5 
or SHA1 checksum)\n"), pkgname);
+               }
+               *data = _pacman_list_add(*data, ptr);
+               retval = 1;
+       }
+
+out:
+       FREE(md5sum2);
+       FREE(sha1sum2);
+       return retval;
+}
+
/* Helper function for comparing strings
*/
static int str_cmp(const void *s1, const void *s2)
@@ -1458,7 +1524,7 @@ int __pmtrans_t::commit(pmlist_t **data)
if(m_type == PM_TRANS_TYPE_SYNC) {
pmlist_t *i, *j, *files = NULL;
char ldir[PATH_MAX];
-       int doremove, retval = 0, tries = 0;
+       int retval = 0, tries = 0;
int varcache = 1;

state = STATE_DOWNLOADING;
@@ -1541,63 +1607,8 @@ int __pmtrans_t::commit(pmlist_t **data)

for(i = syncpkgs; i; i = i->next) {
pmsyncpkg_t *ps = i->data;
-                               Package *spkg = ps->pkg_new;
-                               char str[PATH_MAX], pkgname[PATH_MAX];
-                               char *md5sum1, *md5sum2, *sha1sum1, *sha1sum2;
-                               char *ptr=NULL;
-
-                               spkg->filename(pkgname, sizeof(pkgname));
-                               md5sum1 = spkg->md5sum;
-                               sha1sum1 = spkg->sha1sum;

-                               if((md5sum1 == NULL) && (sha1sum1 == NULL)) {
-                                       if((ptr = (char *)malloc(512)) == NULL) 
{
-                                               RET_ERR(PM_ERR_MEMORY, -1);
-                                       }
-                                       snprintf(ptr, 512, _("can't get md5 or 
sha1 checksum for package %s\n"), pkgname);
-                                       *data = _pacman_list_add(*data, ptr);
-                                       retval = 1;
-                                       continue;
-                               }
-                               snprintf(str, PATH_MAX, "%s/%s/%s", 
handle->root, handle->cachedir, pkgname);
-                               md5sum2 = _pacman_MDFile(str);
-                               sha1sum2 = _pacman_SHAFile(str);
-                               if(md5sum2 == NULL && sha1sum2 == NULL) {
-                                       if((ptr = (char *)malloc(512)) == NULL) 
{
-                                               RET_ERR(PM_ERR_MEMORY, -1);
-                                       }
-                                       snprintf(ptr, 512, _("can't get md5 or 
sha1 checksum for package %s\n"), pkgname);
-                                       *data = _pacman_list_add(*data, ptr);
-                                       retval = 1;
-                                       continue;
-                               }
-                               if((strcmp(md5sum1, md5sum2) != 0) && 
(strcmp(sha1sum1, sha1sum2) != 0)) {
-                                       _pacman_log(PM_LOG_DEBUG, _("expected 
md5:  '%s'"), md5sum1);
-                                       _pacman_log(PM_LOG_DEBUG, _("actual 
md5:    '%s'"), md5sum2);
-                                       _pacman_log(PM_LOG_DEBUG, _("expected 
sha1: '%s'"), sha1sum1);
-                                       _pacman_log(PM_LOG_DEBUG, _("actual 
sha1:   '%s'"), sha1sum2);
-
-                                       doremove = 0;
-                                       if((ptr = (char *)malloc(512)) == NULL) 
{
-                                               RET_ERR(PM_ERR_MEMORY, -1);
-                                       }
-                                       if(flags & PM_TRANS_FLAG_ALLDEPS) {
-                                               doremove=1;
-                                       } else {
-                                               QUESTION(this, 
PM_TRANS_CONV_CORRUPTED_PKG, pkgname, NULL, NULL, &doremove);
-                                       }
-                                       if(doremove) {
-                                               snprintf(str, PATH_MAX, 
"%s%s/%s-%s-%s" PM_EXT_PKG, handle->root, handle->cachedir, spkg->name(), 
spkg->version(), spkg->arch);
-                                               unlink(str);
-                                               snprintf(ptr, 512, _("archive 
%s was corrupted (bad MD5 or SHA1 checksum)\n"), pkgname);
-                                       } else {
-                                               snprintf(ptr, 512, _("archive 
%s is corrupted (bad MD5 or SHA1 checksum)\n"), pkgname);
-                                       }
-                                       *data = _pacman_list_add(*data, ptr);
-                                       retval = 1;
-                               }
-                               FREE(md5sum2);
-                               FREE(sha1sum2);
+                               retval = 
_pacman_cachedpkg_check_integrity(ps->pkg_new, this, data);
}
if(!retval) {
break;
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to