RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Ralf S. Engelschall
Root: /v/rpm/cvs Email: rse@rpm5.org
Module: rpm Date: 26-Dec-2007 11:40:45
Branch: HEAD Handle: 2007122610404401
Modified files:
rpm CHANGES
rpm/lib depends.c
rpm/rpmio rpmpgp.c rpmpgp.h
Log:
Support arbitrary hash algorithm via the originally intended syntax
"digest([<algorithm>:]/path) = hex". The default still is "md5", of
course.
Summary:
Revision Changes Path
1.2019 +1 -0 rpm/CHANGES
1.373 +15 -3 rpm/lib/depends.c
2.82 +15 -0 rpm/rpmio/rpmpgp.c
2.66 +9 -0 rpm/rpmio/rpmpgp.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.2018 -r1.2019 CHANGES
--- rpm/CHANGES 26 Dec 2007 10:32:07 -0000 1.2018
+++ rpm/CHANGES 26 Dec 2007 10:40:44 -0000 1.2019
@@ -1,4 +1,5 @@
5.0b3 -> 5.0b4:
+ - rse: support arbitrary hash algorithm via the originally intended syntax "digest([<algorithm>:]/path) = hex"
- rse: compare MD5 hex value on "digest(/path) = hex" dependency case-insensitive to be less restrictive in syntax
- rse: merge scripts/lua-dump.lua directly into lua/local/llocal.lua to make it always easily available
- rse: add local Lua functions util.rmatch() and util.rsubst() for regex matching/substitution
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/depends.c
============================================================================
$ cvs diff -u -r1.372 -r1.373 depends.c
--- rpm/lib/depends.c 26 Dec 2007 09:58:41 -0000 1.372
+++ rpm/lib/depends.c 26 Dec 2007 10:40:45 -0000 1.373
@@ -781,11 +781,23 @@
if (NSType == RPMNS_TYPE_DIGEST) {
const char * EVR = rpmdsEVR(dep);
- FD_t fd = Fopen(Name, "r.fdio");
-
+ const char *filename;
+ pgpHashAlgo digestHashAlgo;
+ FD_t fd;
+ char *cp;
+ int algo;
+
+ filename = Name;
+ digestHashAlgo = PGPHASHALGO_MD5;
+ if ((cp = strchr(filename, ':')) != NULL) {
+ if ((algo = pgpHashAlgoStringToNumber(filename, cp-filename)) != -1) {
+ digestHashAlgo = algo;
+ filename = cp + 1;
+ }
+ }
rc = 1; /* XXX assume failure */
+ fd = Fopen(filename, "r.fdio");
if (fd && !Ferror(fd)) {
- pgpHashAlgo digestHashAlgo = PGPHASHALGO_MD5;
DIGEST_CTX ctx = rpmDigestInit(digestHashAlgo, RPMDIGEST_NONE);
const char * digest = NULL;
size_t digestlen = 0;
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/rpmpgp.c
============================================================================
$ cvs diff -u -r2.81 -r2.82 rpmpgp.c
--- rpm/rpmio/rpmpgp.c 12 Dec 2007 02:21:09 -0000 2.81
+++ rpm/rpmio/rpmpgp.c 26 Dec 2007 10:40:45 -0000 2.82
@@ -1461,3 +1461,18 @@
return val;
/*@=globstate@*/
}
+
+int pgpHashAlgoStringToNumber(const char *name, size_t name_len)
+{
+ int i;
+
+ if (name == NULL)
+ return -1;
+ if (name_len == 0)
+ name_len = strlen(name);
+ for (i = 0; i < sizeof(pgpHashTbl)/sizeof(pgpHashTbl[0]); i++)
+ if (xstrncasecmp(name, pgpHashTbl[i].str, name_len) == 0)
+ return pgpHashTbl[i].val;
+ return -1;
+}
+
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmio/rpmpgp.h
============================================================================
$ cvs diff -u -r2.65 -r2.66 rpmpgp.h
--- rpm/rpmio/rpmpgp.h 8 Dec 2007 16:30:50 -0000 2.65
+++ rpm/rpmio/rpmpgp.h 26 Dec 2007 10:40:45 -0000 2.66
@@ -1440,6 +1440,15 @@
char * pgpArmorWrap(int atype, const unsigned char * s, size_t ns)
/*@*/;
+/** \ingroup rpmpgp
+ * Convert a hash algorithm <name> to the internal PGPHASHALGO_<name> number
+ * @param name name of hash algorithm
+ * @param name_len length of name or 0 for strlen(name)
+ * @return PGPHASHALGO_<name> or -1 in case of error
+ */
+int pgpHashAlgoStringToNumber(const char *name, size_t name_len)
+ /*@*/;
+
/**
* Disabler bits(s) for signature/digest checking.
*/
@@ .
Received on Wed Dec 26 11:40:45 2007