1#!/usr/bin/env python 2# 3# Copyright (C) 2012 The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17import sys 18import os 19 20try: 21 from hashlib import sha1 22except ImportError: 23 from sha import sha as sha1 24 25if len(sys.argv) < 2: 26 sys.exit(0) 27 28build_info = {} 29f = open(sys.argv[1]) 30for line in f: 31 line = line.strip() 32 if line.startswith("require"): 33 key, value = line.split()[1].split("=", 1) 34 build_info[key] = value 35f.close() 36 37bad = False 38 39for item in sys.argv[2:]: 40 key, fn = item.split(":", 1) 41 42 values = build_info.get(key, None) 43 if not values: 44 continue 45 values = values.split("|") 46 47 f = open(fn, "rb") 48 digest = sha1(f.read()).hexdigest() 49 f.close() 50 51 versions = {} 52 try: 53 f = open(fn + ".sha1") 54 except IOError: 55 if not bad: print 56 print "*** Error opening \"%s.sha1\"; can't verify %s" % (fn, key) 57 bad = True 58 continue 59 for line in f: 60 line = line.strip() 61 if not line or line.startswith("#"): continue 62 h, v = line.split() 63 versions[h] = v 64 65 if digest not in versions: 66 if not bad: print 67 print "*** SHA-1 hash of \"%s\" doesn't appear in \"%s.sha1\"" % (fn, fn) 68 bad = True 69 continue 70 71 if versions[digest] not in values: 72 if not bad: print 73 print "*** \"%s\" is version %s; not any %s allowed by \"%s\"." % ( 74 fn, versions[digest], key, sys.argv[1]) 75 bad = True 76 77if bad: 78 print 79 sys.exit(1) 80