diff options
author | Brian Harring <ferringb@gentoo.org> | 2005-09-24 02:53:14 +0000 |
---|---|---|
committer | Brian Harring <ferringb@gentoo.org> | 2005-09-24 02:53:14 +0000 |
commit | 415435eafe50a9063f712d8b81a3b803644beda5 (patch) | |
tree | db0d4f9af68d8d3ad90ab61b0d728b4598092914 | |
parent | 13217137d361d28aa29919bd09bd3317d494ea02 (diff) | |
download | portage-415435eafe50a9063f712d8b81a3b803644beda5.tar.gz portage-415435eafe50a9063f712d8b81a3b803644beda5.tar.bz2 portage-415435eafe50a9063f712d8b81a3b803644beda5.zip |
bug 106544 , glep31 enforcement checks
svn path=/main/branches/2.0/; revision=2020
-rw-r--r-- | ChangeLog | 3 | ||||
-rwxr-xr-x | bin/repoman | 41 |
2 files changed, 44 insertions, 0 deletions
@@ -7,6 +7,9 @@ 2. /var/cache/edb/world is now /var/lib/portage/world. 3. /etc/portage/profile/virtuals is _USER_ configs only. + 23 Sep 2005; Brian Harring <ferringb@gentoo.org> bin/repoman: + bug 106544, glep31 enforcement checks. + 20 Sep 2005; Brian Harring <ferringb@gentoo.org> pym/portage.py: Cleanup after python, remove module from sys.modules that was a failed import for selinux code- identified by Tudor Alexandru Dragos in bug #106363 . diff --git a/bin/repoman b/bin/repoman index 1554f0bdb..6f0f5c32d 100755 --- a/bin/repoman +++ b/bin/repoman @@ -13,6 +13,13 @@ os.environ["PORTAGE_CALLER"]="repoman" sys.path = ["/usr/lib/portage/pym"]+sys.path version="1.2" +allowed_filename_chars="a-zA-Z0-9._-+:" +allowed_filename_chars_set = {} +map(allowed_filename_chars_set.setdefault, map(chr, range(ord('a'), ord('z')+1))) +map(allowed_filename_chars_set.setdefault, map(chr, range(ord('A'), ord('Z')+1))) +map(allowed_filename_chars_set.setdefault, map(chr, range(ord('0'), ord('9')+1))) +map(allowed_filename_chars_set.setdefault, map(chr, map(ord, [".", "-", "_", "+", ":"]))) + import string,signal,re,pickle,tempfile import portage @@ -21,6 +28,8 @@ import portage_const import portage_dep import cvstree import time +import codecs + from output import * #bold, darkgreen, darkred, green, red, turquoise, yellow @@ -85,6 +94,8 @@ qahelp={ "filedir.missing":"Package lacks a files directory", "file.executable":"Ebuilds, digests, metadata.xml, Manifest, and ChangeLog do note need the executable bit", "file.size":"Files in the files directory must be under 20k", + "file.name":"File/dir name must be composed of only the following chars: %s " % allowed_filename_chars, + "file.UTF8":"File is not UTF8 compliant", "KEYWORDS.missing":"Ebuilds that have a missing KEYWORDS variable", "LICENSE.missing":"Ebuilds that have a missing LICENSE variable", "DESCRIPTION.missing":"Ebuilds that have a missing DESCRIPTION variable", @@ -663,6 +674,29 @@ for x in scanlist: stats["file.executable"] += 1 fails["file.executable"].append(checkdir+"/"+y) digestlist=[] + + for y in checkdirlist: + for c in y.strip(os.path.sep): + if c not in allowed_filename_chars_set: + stats["file.name"] += 1 + fails["file.name"].append("%s/%s: char '%s'" % (checkdir, y, c)) + break + + if not (y in ("ChangeLog", "metadata.xml") or y.endswith(".ebuild")): + continue + try: + line = 1 + for l in codecs.open(y, "r", "utf8"): + line +=1 + except UnicodeDecodeError, ue: + stats["file.UTF8"] += 1 + s = ue.object[:ue.start] + l2 = s.count("\n") + line += l2 + if l2 != 0: + s = s[s.rfind("\n") + 1:] + fails["file.UTF8"].append("%s/%s: line %i, just after: '%s'" % (checkdir, y, line, s)) + if isCvs: try: mystat=os.stat(checkdir+"/files")[0] @@ -799,6 +833,13 @@ for x in scanlist: stats["file.size"] += 1 fails["file.size"].append("("+ str(mystat.st_size/1024) + "K) "+x+"/files/"+y) + for c in y.strip(os.path.sep): + if c not in allowed_filename_chars_set: + stats["file.name"] += 1 + fails["file.name"].append("%s/%s: char '%s'" % (checkdir, y, c)) + break + + if "ChangeLog" not in checkdirlist: stats["changelog.missing"]+=1 fails["changelog.missing"].append(x+"/ChangeLog") |