Date: Mon, 4 Feb 2002 21:54:02 -0500 (EST) From: Mikhail Teterin <mi@aldan.algebra.com> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/34628: pkg-routines ignore the recorded md5 checksums Message-ID: <200202050254.g152s2K41050@aldan.algebra.com>
next in thread | raw e-mail | index | archive | help
>Number: 34628
>Category: bin
>Synopsis: pkg-routines ignore the recorded md5 checksums
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Mon Feb 04 19:00:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator: Mikhail Teterin
>Release: FreeBSD 5.0-CURRENT i386
>Organization:
Virtual Estates, Inc.
>Environment:
System: FreeBSD aldan.algebra.com 5.0-CURRENT FreeBSD 5.0-CURRENT #1: Thu Jan 3 21:38:15 EST 2002 mi@aldan.algebra.com:/ccd/obj/ccd/src/sys/DEBUG i386
>Description:
Currently the pkg-plist handling code in pkg_install/lib and
elsewhere ignores the recorded md5 checksums recorded for various
files.
Upgrading ports from source can often result in different versions
of the same port claiming the same files and confusing things like
``pkg_info -W'', which is when md5 checksum
can be helpful. There could be other uses.
>How-To-Repeat:
cd /var/db/pkg
cp -Rp <some package> test-<some package>
vi test-<some package>/+CONTENTS
[modify a checksum of a file]
pkg_info -W <that file>
>Fix:
The patch below makes pkg_install/lib parse and record the md5
checksums, and pkg_info's -W option -- use them if the same file is
claimed by multiple packages -- the last one having the correct checksum
wins. There could be other usages, I suppose.
Requesting permission to commit this change myself.
Index: info/perform.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pkg_install/info/perform.c,v
retrieving revision 1.44
diff -U2 -r1.44 perform.c
--- info/perform.c 10 Oct 2001 08:21:41 -0000 1.44
+++ info/perform.c 5 Feb 2002 02:53:43 -0000
@@ -27,4 +27,5 @@
#include "info.h"
#include <err.h>
+#include <md5.h>
#include <signal.h>
@@ -381,4 +382,5 @@
} else if (itr->type == PLIST_FILE) {
TAILQ_FOREACH(wp, which_list, next) {
+ char chsum[33] = "\0";
if (wp->skip == TRUE)
continue;
@@ -388,4 +390,14 @@
warnx("both %s and %s claim to have installed %s\n",
wp->package, installed[i], wp->file);
+ if (chsum[0] == '\0' && itr->chsum[0] != '\0' &&
+ MD5File(wp->file, chsum) == NULL)
+ warnx("can not get %s's md5-sum\n", wp->file);
+ if (chsum[0] != '\0' &&
+ memcmp(chsum, itr->chsum, 32) == 0) {
+ warnx("%s has the right checksum "
+ "recorded for %s (%s)\n",
+ installed[i], wp->file, chsum);
+ strlcpy(wp->package, installed[i], PATH_MAX);
+ }
} else {
strlcpy(wp->package, installed[i], PATH_MAX);
cvs server: Diffing lib
Index: lib/lib.h
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pkg_install/lib/lib.h,v
retrieving revision 1.40
diff -U2 -r1.40 lib.h
--- lib/lib.h 10 Oct 2001 08:21:41 -0000 1.40
+++ lib/lib.h 5 Feb 2002 02:53:43 -0000
@@ -109,4 +109,5 @@
Boolean marked;
plist_t type;
+ char chsum[33];
};
typedef struct _plist *PackingList;
Index: lib/plist.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pkg_install/lib/plist.c,v
retrieving revision 1.36
diff -U2 -r1.36 plist.c
--- lib/plist.c 10 Oct 2001 08:21:41 -0000 1.36
+++ lib/plist.c 5 Feb 2002 02:53:43 -0000
@@ -280,4 +280,7 @@
}
}
+ /* This may be the MD5 sum of the last entry: */
+ if (cmd == PLIST_COMMENT)
+ sscanf(cp, "MD5:%32s", pkg->tail->chsum);
bottom:
add_plist(pkg, cmd, cp);
cvs server: Diffing pkg
cvs server: Diffing sign
cvs server: Diffing update
cvs server: Diffing version
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200202050254.g152s2K41050>
