tools/python/pkglint/userland.py
author April Chin <april.chin@oracle.com>
Fri, 03 Oct 2014 08:19:15 -0700
branchs11u2-sru
changeset 3361 a4a50df947fd
parent 3113 49fd14223e17
child 4306 b3252d71faa0
permissions -rw-r--r--
PSARC/2013/269 Add Ruby 1.9.3 and EOF and Remove Ruby 1.8.7 19624365 create runtime/ruby package that includes any ruby version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
     1
#!/usr/bin/python
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
     2
#
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
     3
# CDDL HEADER START
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
     4
#
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
     8
#
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    12
# and limitations under the License.
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    13
#
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    19
#
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    20
# CDDL HEADER END
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    21
#
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    22
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    23
#
2910
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
    24
# Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    25
#
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    26
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    27
# Some userland consolidation specific lint checks
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    28
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    29
import pkg.lint.base as base
186
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
    30
from pkg.lint.engine import lint_fmri_successor
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
    31
import pkg.elf as elf
3113
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
    32
import pkg.fmri
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
    33
import platform
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    34
import re
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    35
import os.path
2910
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
    36
import subprocess
3113
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
    37
import sys
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    38
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    39
class UserlandActionChecker(base.ActionChecker):
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    40
        """An opensolaris.org-specific class to check actions."""
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    41
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    42
        name = "userland.action"
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    43
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    44
        def __init__(self, config):
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    45
                self.description = _(
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    46
                    "checks Userland packages for common content errors")
117
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
    47
		path = os.getenv('PROTO_PATH')
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
    48
		if path != None:
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
    49
			self.proto_path = path.split()
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
    50
		else:
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
    51
			self.proto_path = None
3113
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
    52
		solaris_ver = os.getenv('SOLARIS_VERSION', '')
2528
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    53
		#
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    54
		# These lists are used to check if a 32/64-bit binary
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    55
		# is in a proper 32/64-bit directory.
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    56
		#
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    57
		self.pathlist32 = [
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    58
			"i86",
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    59
			"sparcv7",
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    60
			"32",
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    61
			"i86pc-solaris-64int",  # perl path
2994
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    62
			"sun4-solaris-64int",   # perl path
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    63
			"i386-solaris" + solaris_ver,	# ruby path
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    64
			"sparc-solaris" + solaris_ver	# ruby path
2528
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    65
		]
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    66
		self.pathlist64 = [
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    67
			"amd64",
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    68
			"sparcv9",
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    69
			"64",
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    70
			"i86pc-solaris-64",     # perl path
2994
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    71
			"sun4-solaris-64",      # perl path
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    72
			"amd64-solaris" + solaris_ver,	# ruby path
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    73
			"sparcv9-solaris" + solaris_ver	# ruby path
2528
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    74
		]
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    75
		self.runpath_re = [
99
c15c9099bb44 6841644 OpenSolaris Python should support gdbm
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 84
diff changeset
    76
			re.compile('^/lib(/.*)?$'),
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    77
			re.compile('^/usr/'),
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    78
			re.compile('^\$ORIGIN/')
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    79
		]
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
    80
		self.runpath_64_re = [
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
    81
			re.compile('^.*/64(/.*)?$'),
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
    82
			re.compile('^.*/amd64(/.*)?$'),
2528
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    83
			re.compile('^.*/sparcv9(/.*)?$'),
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
    84
			re.compile('^.*/i86pc-solaris-64(/.*)?$'), # perl path
2994
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    85
			re.compile('^.*/sun4-solaris-64(/.*)?$'),  # perl path
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    86
			re.compile('^.*/amd64-solaris2\.[0-9]+(/.*)?$'),
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    87
				# ruby path
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    88
			re.compile('^.*/sparcv9-solaris2\.[0-9]+(/.*)?$')
3705b92dce6a 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 2977
diff changeset
    89
				# ruby path
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
    90
		]
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
    91
		self.initscript_re = re.compile("^etc/(rc.|init)\.d")
186
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
    92
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
    93
                self.lint_paths = {}
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
    94
                self.ref_paths = {}
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
    95
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    96
                super(UserlandActionChecker, self).__init__(config)
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    97
186
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
    98
        def startup(self, engine):
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
    99
                """Initialize the checker with a dictionary of paths, so that we
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   100
                can do link resolution.
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   101
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   102
                This is copied from the core pkglint code, but should eventually
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   103
                be made common.
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   104
                """
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   105
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   106
                def seed_dict(mf, attr, dic, atype=None, verbose=False):
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   107
                        """Updates a dictionary of { attr: [(fmri, action), ..]}
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   108
                        where attr is the value of that attribute from
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   109
                        actions of a given type atype, in the given
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   110
                        manifest."""
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   111
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   112
                        pkg_vars = mf.get_all_variants()
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   113
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   114
                        if atype:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   115
                                mfg = (a for a in mf.gen_actions_by_type(atype))
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   116
                        else:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   117
                                mfg = (a for a in mf.gen_actions())
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   118
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   119
                        for action in mfg:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   120
                                if atype and action.name != atype:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   121
                                        continue
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   122
                                if attr not in action.attrs:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   123
                                        continue
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   124
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   125
                                variants = action.get_variant_template()
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   126
                                variants.merge_unknown(pkg_vars)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   127
                                action.attrs.update(variants)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   128
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   129
                                p = action.attrs[attr]
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   130
                                dic.setdefault(p, []).append((mf.fmri, action))
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   131
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   132
                # construct a set of FMRIs being presented for linting, and
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   133
                # avoid seeding the reference dictionary with any for which
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   134
                # we're delivering new packages.
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   135
                lint_fmris = {}
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   136
                for m in engine.gen_manifests(engine.lint_api_inst,
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   137
                    release=engine.release, pattern=engine.pattern):
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   138
                        lint_fmris.setdefault(m.fmri.get_name(), []).append(m.fmri)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   139
                for m in engine.lint_manifests:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   140
                        lint_fmris.setdefault(m.fmri.get_name(), []).append(m.fmri)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   141
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   142
                engine.logger.debug(
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   143
                    _("Seeding reference action path dictionaries."))
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   144
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   145
                for manifest in engine.gen_manifests(engine.ref_api_inst,
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   146
                    release=engine.release):
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   147
                        # Only put this manifest into the reference dictionary
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   148
                        # if it's not an older version of the same package.
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   149
                        if not any(
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   150
                            lint_fmri_successor(fmri, manifest.fmri)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   151
                            for fmri
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   152
                            in lint_fmris.get(manifest.fmri.get_name(), [])
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   153
                        ):
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   154
                                seed_dict(manifest, "path", self.ref_paths)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   155
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   156
                engine.logger.debug(
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   157
                    _("Seeding lint action path dictionaries."))
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   158
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   159
                # we provide a search pattern, to allow users to lint a
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   160
                # subset of the packages in the lint_repository
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   161
                for manifest in engine.gen_manifests(engine.lint_api_inst,
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   162
                    release=engine.release, pattern=engine.pattern):
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   163
                        seed_dict(manifest, "path", self.lint_paths)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   164
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   165
                engine.logger.debug(
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   166
                    _("Seeding local action path dictionaries."))
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   167
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   168
                for manifest in engine.lint_manifests:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   169
                        seed_dict(manifest, "path", self.lint_paths)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   170
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   171
                self.__merge_dict(self.lint_paths, self.ref_paths,
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   172
                    ignore_pubs=engine.ignore_pubs)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   173
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   174
        def __merge_dict(self, src, target, ignore_pubs=True):
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   175
                """Merges the given src dictionary into the target
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   176
                dictionary, giving us the target content as it would appear,
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   177
                were the packages in src to get published to the
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   178
                repositories that made up target.
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   179
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   180
                We need to only merge packages at the same or successive
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   181
                version from the src dictionary into the target dictionary.
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   182
                If the src dictionary contains a package with no version
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   183
                information, it is assumed to be more recent than the same
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   184
                package with no version in the target."""
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   185
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   186
                for p in src:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   187
                        if p not in target:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   188
                                target[p] = src[p]
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   189
                                continue
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   190
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   191
                        def build_dic(arr):
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   192
                                """Builds a dictionary of fmri:action entries"""
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   193
                                dic = {}
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   194
                                for (pfmri, action) in arr:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   195
                                        if pfmri in dic:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   196
                                                dic[pfmri].append(action)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   197
                                        else:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   198
                                                dic[pfmri] = [action]
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   199
                                return dic
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   200
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   201
                        src_dic = build_dic(src[p])
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   202
                        targ_dic = build_dic(target[p])
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   203
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   204
                        for src_pfmri in src_dic:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   205
                                # we want to remove entries deemed older than
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   206
                                # src_pfmri from targ_dic.
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   207
                                for targ_pfmri in targ_dic.copy():
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   208
                                        sname = src_pfmri.get_name()
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   209
                                        tname = targ_pfmri.get_name()
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   210
                                        if lint_fmri_successor(src_pfmri,
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   211
                                            targ_pfmri,
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   212
                                            ignore_pubs=ignore_pubs):
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   213
                                                targ_dic.pop(targ_pfmri)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   214
                        targ_dic.update(src_dic)
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   215
                        l = []
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   216
                        for pfmri in targ_dic:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   217
                                for action in targ_dic[pfmri]:
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   218
                                        l.append((pfmri, action))
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   219
                        target[p] = l
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   220
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   221
        def __realpath(self, path, target):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   222
		"""Combine path and target to get the real path."""
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   223
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   224
		result = os.path.dirname(path)
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   225
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   226
		for frag in target.split(os.sep):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   227
			if frag == '..':
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   228
				result = os.path.dirname(result)
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   229
			elif frag == '.':
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   230
				pass
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   231
			else:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   232
				result = os.path.join(result, frag)
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   233
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   234
		return result
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   235
2910
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   236
	def __elf_aslr_check(self, path, engine):
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   237
		result = None
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   238
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   239
		ei = elf.get_info(path)
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   240
		type = ei.get("type");
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   241
		if type != "exe":
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   242
			return result
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   243
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   244
		# get the ASLR tag string for this binary
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   245
		aslr_tag_process = subprocess.Popen(
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   246
			"/usr/bin/elfedit -r -e 'dyn:sunw_aslr' "
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   247
			+ path, shell=True,
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   248
			stdout=subprocess.PIPE, stderr=subprocess.PIPE)
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   249
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   250
		# aslr_tag_string will get stdout; err will get stderr
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   251
		aslr_tag_string, err = aslr_tag_process.communicate()
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   252
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   253
		# No ASLR tag was found; everything must be tagged
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   254
		if aslr_tag_process.returncode != 0:
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   255
			engine.error(
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   256
				_("'%s' is not tagged for aslr") % (path),
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   257
				msgid="%s%s.5" % (self.name, "001"))
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   258
			return result
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   259
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   260
		# look for "ENABLE" anywhere in the string;
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   261
		# warn about binaries which are not ASLR enabled
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   262
		if re.search("ENABLE", aslr_tag_string) is not None:
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   263
			return result
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   264
		engine.warning(
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   265
			_("'%s' does not have aslr enabled") % (path),
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   266
			msgid="%s%s.6" % (self.name, "001"))
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   267
		return result
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   268
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   269
	def __elf_runpath_check(self, path, engine):
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   270
		result = None
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   271
		list = []
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   272
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   273
		ed = elf.get_dynamic(path)
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   274
		ei = elf.get_info(path)
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   275
		bits = ei.get("bits")
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   276
		for dir in ed.get("runpath", "").split(":"):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   277
			if dir == None or dir == '':
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   278
				continue
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   279
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   280
			match = False
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   281
			for expr in self.runpath_re:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   282
				if expr.match(dir):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   283
					match = True
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   284
					break
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   285
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   286
			if match == False:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   287
				list.append(dir)
2977
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   288
			# Make sure RUNPATH matches against a packaged path.
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   289
			# Don't check runpaths starting with $ORIGIN, which
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   290
			# is specially handled by the linker.
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   291
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   292
			elif not dir.startswith('$ORIGIN/'):
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   293
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   294
			# Strip out leading and trailing '/' in the 
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   295
			# runpath, since the reference paths don't start 
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   296
			# with '/' and trailing '/' could cause mismatches.
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   297
			# Check first if there is an exact match, then check
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   298
			# if any reference path starts with this runpath
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   299
			# plus a trailing slash, since it may still be a link
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   300
			# to a directory that has no action because it uses
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   301
			# the default attributes.
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   302
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   303
				relative_dir = dir.strip('/')
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   304
				if not relative_dir in self.ref_paths and \
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   305
				    not any(key.startswith(relative_dir + '/')
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   306
				        for key in self.ref_paths):
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   307
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   308
			# If still no match, if the runpath contains
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   309
			# an embedded symlink, emit a warning; it may or may
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   310
			# not resolve to a legitimate path.
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   311
			# E.g., for usr/openwin/lib, usr/openwin->X11 and
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   312
			# usr/X11/lib are packaged, but usr/openwin/lib is not.
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   313
			# Otherwise, runpath is bad; add it to list.
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   314
					embedded_link = False
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   315
					pdir = os.path.dirname(relative_dir)
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   316
					while pdir != '':
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   317
						if (pdir in self.ref_paths and 
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   318
						    self.ref_paths[pdir][0][1].name == "link"):
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   319
							embedded_link = True
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   320
							engine.warning(
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   321
								_("runpath '%s' in '%s' not found in reference paths but contains symlink at '%s'") % (dir, path, pdir),
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   322
								msgid="%s%s.3" % (self.name, "001"))
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   323
							break
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   324
						pdir = os.path.dirname(pdir)
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   325
					if not embedded_link:
ad3b1b35e66d 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 2910
diff changeset
   326
						list.append(dir)
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   327
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   328
			if bits == 32:
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   329
				for expr in self.runpath_64_re:
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   330
					if expr.search(dir):
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   331
						engine.warning(
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   332
							_("64-bit runpath in 32-bit binary, '%s' includes '%s'") % (path, dir),
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   333
							msgid="%s%s.3" % (self.name, "001"))
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   334
			else:
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   335
				match = False
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   336
				for expr in self.runpath_64_re:
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   337
					if expr.search(dir):
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   338
						match = True
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   339
						break
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   340
				if match == False:
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   341
					engine.warning(
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   342
						_("32-bit runpath in 64-bit binary, '%s' includes '%s'") % (path, dir),
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   343
						msgid="%s%s.3" % (self.name, "001"))
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   344
		if len(list) > 0:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   345
			result = _("bad RUNPATH, '%%s' includes '%s'" %
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   346
				   ":".join(list))
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   347
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   348
		return result
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   349
2818
ff3cbef81e88 17510747 change puppet and facter to use ruby 1.9 instead of ruby 1.8
April Chin <april.chin@oracle.com>
parents: 2723
diff changeset
   350
	def __elf_wrong_location_check(self, path, inspath):
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   351
		result = None
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   352
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   353
		ei = elf.get_info(path)
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   354
		bits = ei.get("bits")
495
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   355
		type = ei.get("type");
2818
ff3cbef81e88 17510747 change puppet and facter to use ruby 1.9 instead of ruby 1.8
April Chin <april.chin@oracle.com>
parents: 2723
diff changeset
   356
                elems = os.path.dirname(inspath).split("/")
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   357
2528
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
   358
                path64 = False
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
   359
		for p in self.pathlist64:
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
   360
		    if (p in elems):
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
   361
			path64 = True
168
5884bc1edfdf 7026850 move ImageMagick to userland
Lukas Rovensky <Lukas.Rovensky@oracle.com>
parents: 145
diff changeset
   362
2528
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
   363
                path32 = False
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
   364
		for p in self.pathlist32:
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
   365
		    if (p in elems):
788328aeec2a PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 623
diff changeset
   366
			path32 = True
495
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   367
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   368
		# ignore 64-bit executables in normal (non-32-bit-specific)
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   369
		# locations, that's ok now.
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   370
		if (type == "exe" and bits == 64 and path32 == False and path64 == False):
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   371
			return result
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   372
168
5884bc1edfdf 7026850 move ImageMagick to userland
Lukas Rovensky <Lukas.Rovensky@oracle.com>
parents: 145
diff changeset
   373
		if bits == 32 and path64:
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   374
			result = _("32-bit object '%s' in 64-bit path")
168
5884bc1edfdf 7026850 move ImageMagick to userland
Lukas Rovensky <Lukas.Rovensky@oracle.com>
parents: 145
diff changeset
   375
		elif bits == 64 and not path64:
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   376
			result = _("64-bit object '%s' in 32-bit path")
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   377
		return result
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   378
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   379
	def file_action(self, action, manifest, engine, pkglint_id="001"):
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   380
		"""Checks for existence in the proto area."""
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   381
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   382
		if action.name not in ["file"]:
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   383
			return
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   384
2818
ff3cbef81e88 17510747 change puppet and facter to use ruby 1.9 instead of ruby 1.8
April Chin <april.chin@oracle.com>
parents: 2723
diff changeset
   385
		inspath=action.attrs["path"]
ff3cbef81e88 17510747 change puppet and facter to use ruby 1.9 instead of ruby 1.8
April Chin <april.chin@oracle.com>
parents: 2723
diff changeset
   386
117
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
   387
		path = action.hash
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
   388
		if path == None or path == 'NOHASH':
2818
ff3cbef81e88 17510747 change puppet and facter to use ruby 1.9 instead of ruby 1.8
April Chin <april.chin@oracle.com>
parents: 2723
diff changeset
   389
			path = inspath
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   390
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   391
		# check for writable files without a preserve attribute
145
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   392
		if "mode" in action.attrs:
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   393
			mode = action.attrs["mode"]
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   394
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   395
			if (int(mode, 8) & 0222) != 0 and "preserve" not in action.attrs:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   396
				engine.error(
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   397
				_("%(path)s is writable (%(mode)s), but missing a preserve"
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   398
				  " attribute") %  {"path": path, "mode": mode},
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   399
				msgid="%s%s.0" % (self.name, pkglint_id))
145
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   400
		elif "preserve" in action.attrs:
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   401
			if "mode" in action.attrs:
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   402
				mode = action.attrs["mode"]
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   403
				if (int(mode, 8) & 0222) == 0:
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   404
					engine.error(
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   405
					_("%(path)s has a preserve action, but is not writable (%(mode)s)") %  {"path": path, "mode": mode},
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   406
				msgid="%s%s.4" % (self.name, pkglint_id))
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   407
			else:
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   408
				engine.error(
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   409
				_("%(path)s has a preserve action, but no mode") %  {"path": path, "mode": mode},
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   410
				msgid="%s%s.3" % (self.name, pkglint_id))
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   411
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   412
		# checks that require a physical file to look at
117
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
   413
		if self.proto_path is not None:
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
   414
			for directory in self.proto_path:
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
   415
				fullpath = directory + "/" + path
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
   416
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
   417
				if os.path.exists(fullpath):
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
   418
					break
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   419
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   420
			if not os.path.exists(fullpath):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   421
				engine.info(
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   422
					_("%s missing from proto area, skipping"
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   423
					  " content checks") % path, 
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   424
					msgid="%s%s.1" % (self.name, pkglint_id))
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   425
			elif elf.is_elf_object(fullpath):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   426
				# 32/64 bit in wrong place
2818
ff3cbef81e88 17510747 change puppet and facter to use ruby 1.9 instead of ruby 1.8
April Chin <april.chin@oracle.com>
parents: 2723
diff changeset
   427
				result = self.__elf_wrong_location_check(fullpath, inspath)
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   428
				if result != None:
2818
ff3cbef81e88 17510747 change puppet and facter to use ruby 1.9 instead of ruby 1.8
April Chin <april.chin@oracle.com>
parents: 2723
diff changeset
   429
					engine.error(result % inspath, 
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   430
						msgid="%s%s.2" % (self.name, pkglint_id))
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   431
				result = self.__elf_runpath_check(fullpath, engine)
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   432
				if result != None:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   433
					engine.error(result % path, 
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   434
						msgid="%s%s.3" % (self.name, pkglint_id))
2910
f8b8cbc43356 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 2818
diff changeset
   435
				result = self.__elf_aslr_check(fullpath, engine)
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   436
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   437
	file_action.pkglint_desc = _("Paths should exist in the proto area.")
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   438
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   439
	def link_resolves(self, action, manifest, engine, pkglint_id="002"):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   440
		"""Checks for link resolution."""
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   441
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   442
		if action.name not in ["link", "hardlink"]:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   443
			return
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   444
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   445
		path = action.attrs["path"]
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   446
		target = action.attrs["target"]
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   447
		realtarget = self.__realpath(path, target)
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   448
186
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   449
		# Check against the target image (ref_paths), since links might
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   450
		# resolve outside the packages delivering a particular
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
   451
		# component.
2723
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   452
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   453
		# links to files should directly match a patch in the reference
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   454
		# repo.
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   455
		if self.ref_paths.get(realtarget, None):
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   456
			return
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   457
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   458
		# If it didn't match a path in the reference repo, it may still
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   459
		# be a link to a directory that has no action because it uses
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   460
		# the default attributes.  Look for a path that starts with
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   461
		# this value plus a trailing slash to be sure this it will be
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   462
		# resolvable on a fully installed system.
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   463
		realtarget += '/'
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   464
		for key in self.ref_paths:
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   465
			if key.startswith(realtarget):
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   466
				return
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   467
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   468
		engine.error(_("%s %s has unresolvable target '%s'") %
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   469
				(action.name, path, target),
138732f62341 17219320 Various Userland components should be back-ported to 11.2
Rich Burridge <rich.burridge@oracle.com>
parents: 2528
diff changeset
   470
			msgid="%s%s.0" % (self.name, pkglint_id))
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   471
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   472
	link_resolves.pkglint_desc = _("links should resolve.")
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   473
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   474
	def init_script(self, action, manifest, engine, pkglint_id="003"):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   475
		"""Checks for SVR4 startup scripts."""
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   476
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   477
		if action.name not in ["file", "dir", "link", "hardlink"]:
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   478
			return
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   479
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   480
		path = action.attrs["path"]
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   481
		if self.initscript_re.match(path):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   482
			engine.warning(
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   483
				_("SVR4 startup '%s', deliver SMF"
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   484
				  " service instead") % path,
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   485
				msgid="%s%s.0" % (self.name, pkglint_id))
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   486
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   487
	init_script.pkglint_desc = _(
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   488
		"SVR4 startup scripts should not be delivered.")
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   489
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   490
class UserlandManifestChecker(base.ManifestChecker):
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   491
        """An opensolaris.org-specific class to check manifests."""
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   492
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   493
        name = "userland.manifest"
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   494
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   495
	def __init__(self, config):
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   496
		super(UserlandManifestChecker, self).__init__(config)
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   497
181
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   498
	def component_check(self, manifest, engine, pkglint_id="001"):
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   499
		manifest_paths = []
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   500
		files = False
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   501
		license = False
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   502
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   503
		for action in manifest.gen_actions_by_type("file"):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   504
			files = True
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   505
			break
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   506
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   507
		if files == False:
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   508
			return
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   509
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   510
		for action in manifest.gen_actions_by_type("license"):
181
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   511
			license = True
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   512
			break
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   513
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   514
		if license == False:
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   515
			engine.error( _("missing license action"),
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   516
				msgid="%s%s.0" % (self.name, pkglint_id))
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   517
464
08f94c414553 7073736 need to turn _ into -
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 186
diff changeset
   518
		if 'org.opensolaris.arc-caseid' not in manifest:
08f94c414553 7073736 need to turn _ into -
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 186
diff changeset
   519
			engine.error( _("missing ARC data (org.opensolaris.arc-caseid)"),
181
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   520
				msgid="%s%s.0" % (self.name, pkglint_id))
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   521
3113
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   522
	component_check.pkglint_desc = _(
464
08f94c414553 7073736 need to turn _ into -
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 186
diff changeset
   523
		"license actions and ARC information are required if you deliver files.")
3113
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   524
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   525
        # CFFI names the modules it creates with a hash that includes the
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   526
        # version of CFFI (since the schema may change from one version to
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   527
        # another).  This means that if a package depends on CFFI, then it must
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   528
        # also incorporate the version it builds with, which should be the
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   529
        # version in the gate.
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   530
        def uses_cffi(self, manifest, engine, pkglint_id="003"):
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   531
                cffi_match = {"fmri": "*/cffi*"}
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   532
                cffi_require = None
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   533
                cffi_incorp = None
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   534
                for action in manifest.gen_actions_by_type("depend"):
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   535
                        if not any(
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   536
                            f
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   537
                            for f in action.attrlist("fmri")
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   538
                            if "/cffi-" in pkg.fmri.PkgFmri(f, "5.11").pkg_name):
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   539
                                continue
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   540
                        if action.attrs["type"] in ("require", "require-any"):
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   541
                                cffi_require = action
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   542
                        elif action.attrs["type"] == "incorporate":
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   543
                                cffi_incorp = action
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   544
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   545
                try:
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   546
                        sys.path[0:0] = [os.path.join(os.getenv("WS_TOP", ""),
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   547
                            "components/python/cffi/build/prototype/"
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   548
                            "%s/usr/lib/python%d.%d/vendor-packages" %
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   549
                            ((platform.processor(),) + sys.version_info[:2]))]
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   550
                        import cffi
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   551
                        cffi_version = cffi.__version__
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   552
                        del sys.path[0]
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   553
                except ImportError:
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   554
                        cffi_version = None
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   555
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   556
                if not cffi_require:
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   557
                        return
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   558
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   559
                if not cffi_version:
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   560
                        engine.warning(_("package %s depends on CFFI, but we "
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   561
                            "cannot determine the version of CFFI needed") %
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   562
                            manifest.fmri,
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   563
                            msgid="%s%s.1" % (self.name, pkglint_id))
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   564
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   565
                if not cffi_incorp:
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   566
                        engine.error(_("package %(pkg)s depends on CFFI, but "
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   567
                            "does not incorporate it (should be at %(should)s)")
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   568
                            % {"pkg": manifest.fmri, "should": cffi_version},
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   569
                            msgid="%s%s.2" % (self.name, pkglint_id))
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   570
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   571
                # The final check can only be done if neither of the previous
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   572
                # checks have fired.
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   573
                if not cffi_version or not cffi_incorp:
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   574
                    return
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   575
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   576
                cffi_incorp_ver = str(pkg.fmri.PkgFmri(
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   577
                    cffi_incorp.attrs["fmri"], "5.11").version.release)
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   578
                if cffi_incorp_ver != cffi_version:
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   579
                        engine.error(_("package %(pkg)s depends on CFFI, but "
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   580
                            "incorporates it at the wrong version (%(actual)s "
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   581
                            "instead of %(should)s)") % {"pkg": manifest.fmri,
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   582
                            "actual": cffi_incorp_ver, "should": cffi_version},
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   583
                            msgid="%s%s.3" % (self.name, pkglint_id))
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   584
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   585
        uses_cffi.pkglint_desc = _(
49fd14223e17 PSARC/2014/110 CFFI: foreign function interface for Python calling C code
Danek Duvall <danek.duvall@oracle.com>
parents: 2994
diff changeset
   586
            "Packages using CFFI incorporate CFFI at the correct version.")