+++ /dev/null
-#!/usr/bin/python
-# Copyright 1999-2006 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-# Very simple program to compare the md5sums of a package as listed
-# in VDB_PATH/category/package/CONTENTS with the md5sums of the
-# actual programs on the system (and makes sure that symlinks point to
-# the right files).
-
-import os.path, os, sys
-try:
- import portage
-except ImportError:
- from os import path as osp
- sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
- import portage
-
-def CONTENTScheck(path):
- try:
- contents = open(path, "r")
- except IOError, e:
- print "Unable to open %s: %s" % (path, e)
- sys.exit(1)
- lines = contents.readlines()
- for line in lines:
- items = line.split()
- # items is a list w/ size depending on the type of item listed in item[0]
- # if items[0] = 'dir' then items[1] is the path of a directory
- # if items[0] = 'obj' then items[1] is the path of a file,
- # items[2] is the file's md5sum,
- # items[3] is the file's size
- # if items[0] = 'sym' then items[1] is the path of a symbolic link,
- # items[2] is '->'
- # items[3] is the file the symlink should point to
- # items[4] is the symlink mtime
- if (items[0] == 'obj'):
- md5stored = items[2].lower()
- # fchksum.fmdft(file) returns the file's md5sum and the file's size
- md5real = portage.perform_checksum(items[1])[0].lower()
- if (md5stored != md5real):
- if md5real:
- print "%s has md5sum of %s instead of %s" % (items[1], md5real, md5stored)
- else:
- print "%s is missing!" % items[1]
- elif (items[0] == 'sym'):
- link = items[1]
- target = items[3]
- if (not os.path.islink(link)):
- print "%s is not a symbolic link" % link
- continue
- actualtarget = os.readlink(link)
- if (os.path.normpath(actualtarget) != os.path.normpath(target)):
- print "%s points to %s, not %s" % (link, actualtarget, target)
-
-
-if __name__ == '__main__':
- import sys
- if (len(sys.argv) != 2 or sys.argv[1] == "--help"):
- print "This program compares md5sums in the file VDB_PATH/category/package/CONTENTS"
- print "with the md5sums of the actual files on the filesystem"
- print "(and makes sure that symlinks point to the right files)."
- print "\nUsage: chkcontents path/to/CONTENTS"
- sys.exit(1)
- CONTENTScheck(sys.argv[1])
-