tools/python/pkglint/userland.py
author April Chin <april.chin@oracle.com>
Wed, 12 Mar 2014 17:11:44 -0700
changeset 1756 3579365335ef
parent 1742 1bfc3321abb4
child 1846 df40919e04fa
permissions -rw-r--r--
17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
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
#
1742
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
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
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    32
import re
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    33
import os.path
1138
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
    34
import subprocess
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    35
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    36
class UserlandActionChecker(base.ActionChecker):
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    37
        """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
    38
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    39
        name = "userland.action"
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    40
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    41
        def __init__(self, config):
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    42
                self.description = _(
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    43
                    "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
    44
		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
    45
		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
    46
			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
    47
		else:
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
    48
			self.proto_path = None
1756
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    49
		solaris_ver = os.getenv('SOLARIS_VERSION')
1146
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    50
		#
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    51
		# These lists are used to check if a 32/64-bit binary
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    52
		# is in a proper 32/64-bit directory.
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    53
		#
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    54
		self.pathlist32 = [
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    55
			"i86",
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    56
			"sparcv7",
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    57
			"32",
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    58
			"i86pc-solaris-64int",  # perl path
1756
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    59
			"sun4-solaris-64int",   # perl path
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    60
			"i386-solaris" + solaris_ver,	# ruby path
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    61
			"sparc-solaris"	+ solaris_ver	# ruby path
1146
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    62
		]
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    63
		self.pathlist64 = [
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    64
			"amd64",
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    65
			"sparcv9",
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    66
			"64",
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    67
			"i86pc-solaris-64",     # perl path
1756
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    68
			"sun4-solaris-64",      # perl path
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    69
			"amd64-solaris" + solaris_ver,	# ruby path
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    70
			"sparcv9-solaris" + solaris_ver	# ruby path
1146
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    71
		]
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    72
		self.runpath_re = [
99
c15c9099bb44 6841644 OpenSolaris Python should support gdbm
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 84
diff changeset
    73
			re.compile('^/lib(/.*)?$'),
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    74
			re.compile('^/usr/'),
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    75
			re.compile('^\$ORIGIN/')
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    76
		]
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
    77
		self.runpath_64_re = [
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
    78
			re.compile('^.*/64(/.*)?$'),
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
    79
			re.compile('^.*/amd64(/.*)?$'),
1146
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    80
			re.compile('^.*/sparcv9(/.*)?$'),
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
    81
			re.compile('^.*/i86pc-solaris-64(/.*)?$'), # perl path
1756
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    82
			re.compile('^.*/sun4-solaris-64(/.*)?$'),  # perl path
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    83
			re.compile('^.*/amd64-solaris2\.[0-9]+(/.*)?$'),
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    84
				# ruby path
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    85
			re.compile('^.*/sparcv9-solaris2\.[0-9]+(/.*)?$')
3579365335ef 17591620 ruby 1.9 should not have its *.rb text files under amd64/sparcv9 directories
April Chin <april.chin@oracle.com>
parents: 1742
diff changeset
    86
				# ruby path
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
    87
		]
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
    88
		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
    89
3adedf0f9f4d 7034764 dangling link check fails when links and targets are in different packages
Danek Duvall <danek.duvall@oracle.com>
parents: 181
diff changeset
    90
                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
    91
                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
    92
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    93
                super(UserlandActionChecker, self).__init__(config)
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
    94
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
    95
        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
    96
                """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
    97
                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
    98
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
                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
   100
                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
   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
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
                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
   104
                        """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
   105
                        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
   106
                        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
   107
                        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
   108
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
                        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
   110
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
                        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
   112
                                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
   113
                        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
   114
                                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
   115
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
                        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
   117
                                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
   118
                                        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
   119
                                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
   120
                                        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
   121
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
                                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
   123
                                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
   124
                                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
   125
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
                                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
   127
                                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
   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
                # 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
   130
                # 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
   131
                # 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
   132
                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
   133
                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
   134
                    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
   135
                        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
   136
                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
   137
                        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
   138
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
                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
   140
                    _("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
   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
                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
   143
                    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
   144
                        # 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
   145
                        # 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
   146
                        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
   147
                            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
   148
                            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
   149
                            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
   150
                        ):
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
                                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
   152
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
                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
   154
                    _("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
   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
                # 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
   157
                # 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
   158
                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
   159
                    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
   160
                        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
   161
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
                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
   163
                    _("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
   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
                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
   166
                        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
   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
                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
   169
                    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
   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
        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
   172
                """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
   173
                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
   174
                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
   175
                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
   176
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
                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
   178
                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
   179
                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
   180
                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
   181
                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
   182
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
                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
   184
                        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
   185
                                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
   186
                                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
   187
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
                        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
   189
                                """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
   190
                                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
   191
                                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
   192
                                        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
   193
                                                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
   194
                                        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
   195
                                                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
   196
                                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
   197
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
                        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
   199
                        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
   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
                        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
   202
                                # 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
   203
                                # 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
   204
                                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
   205
                                        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
   206
                                        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
   207
                                        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
   208
                                            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
   209
                                            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
   210
                                                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
   211
                        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
   212
                        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
   213
                        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
   214
                                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
   215
                                        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
   216
                        target[p] = l
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   217
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   218
        def __realpath(self, path, target):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   219
		"""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
   220
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   221
		result = os.path.dirname(path)
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   222
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   223
		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
   224
			if frag == '..':
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   225
				result = os.path.dirname(result)
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   226
			elif frag == '.':
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   227
				pass
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   228
			else:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   229
				result = os.path.join(result, frag)
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   230
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   231
		return result
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   232
1138
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   233
	def __elf_aslr_check(self, path, engine):
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   234
		result = None
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   235
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   236
		ei = elf.get_info(path)
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   237
		type = ei.get("type");
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   238
		if type != "exe":
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   239
			return result
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   240
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   241
		# get the ASLR tag string for this binary
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   242
		aslr_tag_process = subprocess.Popen(
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   243
			"/usr/bin/elfedit -r -e 'dyn:sunw_aslr' "
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   244
			+ path, shell=True,
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   245
			stdout=subprocess.PIPE, stderr=subprocess.PIPE)
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   246
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   247
		# aslr_tag_string will get stdout; err will get stderr
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   248
		aslr_tag_string, err = aslr_tag_process.communicate()
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   249
1742
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   250
		# No ASLR tag was found; everything must be tagged
1138
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   251
		if aslr_tag_process.returncode != 0:
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   252
			engine.error(
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   253
				_("'%s' is not tagged for aslr") % (path),
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   254
				msgid="%s%s.5" % (self.name, "001"))
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   255
			return result
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   256
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   257
		# look for "ENABLE" anywhere in the string;
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   258
		# warn about binaries which are not ASLR enabled
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   259
		if re.search("ENABLE", aslr_tag_string) is not None:
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   260
			return result
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   261
		engine.warning(
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   262
			_("'%s' does not have aslr enabled") % (path),
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   263
			msgid="%s%s.6" % (self.name, "001"))
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   264
		return result
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   265
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   266
	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
   267
		result = None
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   268
		list = []
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   269
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   270
		ed = elf.get_dynamic(path)
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   271
		ei = elf.get_info(path)
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   272
		bits = ei.get("bits")
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   273
		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
   274
			if dir == None or dir == '':
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   275
				continue
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   276
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   277
			match = False
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   278
			for expr in self.runpath_re:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   279
				if expr.match(dir):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   280
					match = True
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   281
					break
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   282
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   283
			if match == False:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   284
				list.append(dir)
1742
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   285
			# Make sure RUNPATH matches against a packaged path.
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   286
			# Don't check runpaths starting with $ORIGIN, which
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   287
			# is specially handled by the linker.
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   288
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   289
			elif not dir.startswith('$ORIGIN/'):
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   290
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   291
			# Strip out leading and trailing '/' in the 
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   292
			# runpath, since the reference paths don't start 
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   293
			# with '/' and trailing '/' could cause mismatches.
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   294
			# Check first if there is an exact match, then check
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   295
			# if any reference path starts with this runpath
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   296
			# plus a trailing slash, since it may still be a link
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   297
			# to a directory that has no action because it uses
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   298
			# the default attributes.
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   299
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   300
				relative_dir = dir.strip('/')
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   301
				if not relative_dir in self.ref_paths and \
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   302
				    not any(key.startswith(relative_dir + '/')
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   303
				        for key in self.ref_paths):
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   304
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   305
			# If still no match, if the runpath contains
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   306
			# an embedded symlink, emit a warning; it may or may
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   307
			# not resolve to a legitimate path.
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   308
			# E.g., for usr/openwin/lib, usr/openwin->X11 and
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   309
			# usr/X11/lib are packaged, but usr/openwin/lib is not.
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   310
			# Otherwise, runpath is bad; add it to list.
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   311
					embedded_link = False
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   312
					pdir = os.path.dirname(relative_dir)
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   313
					while pdir != '':
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   314
						if (pdir in self.ref_paths and 
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   315
						    self.ref_paths[pdir][0][1].name == "link"):
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   316
							embedded_link = True
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   317
							engine.warning(
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   318
								_("runpath '%s' in '%s' not found in reference paths but contains symlink at '%s'") % (dir, path, pdir),
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   319
								msgid="%s%s.3" % (self.name, "001"))
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   320
							break
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   321
						pdir = os.path.dirname(pdir)
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   322
					if not embedded_link:
1bfc3321abb4 18202547 memcached lib comes with erroneous RPATH and RUNPATH
April Chin <april.chin@oracle.com>
parents: 1512
diff changeset
   323
						list.append(dir)
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   324
623
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   325
			if bits == 32:
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   326
				for expr in self.runpath_64_re:
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   327
					if expr.search(dir):
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   328
						engine.warning(
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   329
							_("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
   330
							msgid="%s%s.3" % (self.name, "001"))
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   331
			else:
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   332
				match = False
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   333
				for expr in self.runpath_64_re:
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   334
					if expr.search(dir):
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   335
						match = True
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   336
						break
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   337
				if match == False:
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   338
					engine.warning(
15f87c23a86e 7109831 userland pkglint should audit runpaths
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 495
diff changeset
   339
						_("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
   340
						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
   341
		if len(list) > 0:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   342
			result = _("bad RUNPATH, '%%s' includes '%s'" %
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   343
				   ":".join(list))
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   344
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   345
		return result
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   346
1512
f57514e19ede 17596443 nm -p output change breaks userland
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 1251
diff changeset
   347
	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
   348
		result = None
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   349
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   350
		ei = elf.get_info(path)
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   351
		bits = ei.get("bits")
495
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   352
		type = ei.get("type");
1512
f57514e19ede 17596443 nm -p output change breaks userland
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 1251
diff changeset
   353
                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
   354
1146
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
   355
                path64 = False
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
   356
		for p in self.pathlist64:
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
   357
		    if (p in elems):
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
   358
		    	path64 = True
168
5884bc1edfdf 7026850 move ImageMagick to userland
Lukas Rovensky <Lukas.Rovensky@oracle.com>
parents: 145
diff changeset
   359
1146
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
   360
		path32 = False
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
   361
		for p in self.pathlist32:
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
   362
		    if (p in elems):
94088715b2bf PSARC/2012/379 Add Perl 5.16 64-bit and make it the system default
Craig Mohrman <craig.mohrman@oracle.com>
parents: 1138
diff changeset
   363
		    	path32 = True
495
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   364
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   365
		# 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
   366
		# locations, that's ok now.
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   367
		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
   368
			return result
4153db6738f5 7083378 clean up some unneeded pkg.linted attributes
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 464
diff changeset
   369
168
5884bc1edfdf 7026850 move ImageMagick to userland
Lukas Rovensky <Lukas.Rovensky@oracle.com>
parents: 145
diff changeset
   370
		if bits == 32 and path64:
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   371
			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
   372
		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
   373
			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
   374
		return result
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   375
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   376
	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
   377
		"""Checks for existence in the proto area."""
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   378
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   379
		if action.name not in ["file"]:
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   380
			return
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   381
1512
f57514e19ede 17596443 nm -p output change breaks userland
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 1251
diff changeset
   382
		inspath=action.attrs["path"]
f57514e19ede 17596443 nm -p output change breaks userland
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 1251
diff changeset
   383
117
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
   384
		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
   385
		if path == None or path == 'NOHASH':
1512
f57514e19ede 17596443 nm -p output change breaks userland
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 1251
diff changeset
   386
			path = inspath
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   387
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   388
		# 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
   389
		if "mode" in action.attrs:
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   390
			mode = action.attrs["mode"]
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   391
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   392
			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
   393
				engine.error(
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   394
				_("%(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
   395
				  " attribute") %  {"path": path, "mode": mode},
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   396
				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
   397
		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
   398
			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
   399
				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
   400
				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
   401
					engine.error(
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   402
					_("%(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
   403
				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
   404
			else:
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   405
				engine.error(
1e2390f5555e 7020836 revert workaround in 7014413 now that pkglint doesn't complain
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 117
diff changeset
   406
				_("%(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
   407
				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
   408
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   409
		# 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
   410
		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
   411
			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
   412
				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
   413
8f634eb6f66b 7023683 userland pkglint checks should look in more places for content
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 99
diff changeset
   414
				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
   415
					break
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   416
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   417
			if not os.path.exists(fullpath):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   418
				engine.info(
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   419
					_("%s missing from proto area, skipping"
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   420
					  " content checks") % path, 
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   421
					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
   422
			elif elf.is_elf_object(fullpath):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   423
				# 32/64 bit in wrong place
1512
f57514e19ede 17596443 nm -p output change breaks userland
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 1251
diff changeset
   424
				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
   425
				if result != None:
1512
f57514e19ede 17596443 nm -p output change breaks userland
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 1251
diff changeset
   426
					engine.error(result % inspath, 
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   427
						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
   428
				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
   429
				if result != None:
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   430
					engine.error(result % path, 
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   431
						msgid="%s%s.3" % (self.name, pkglint_id))
1138
6e1f85fa0151 15801420 SUNBT7180909 tag the Userland consolidation binaries for ASLR
April Chin <april.chin@oracle.com>
parents: 1020
diff changeset
   432
				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
   433
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   434
	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
   435
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   436
	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
   437
		"""Checks for link resolution."""
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
		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
   440
			return
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
		path = action.attrs["path"]
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   443
		target = action.attrs["target"]
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   444
		realtarget = self.__realpath(path, target)
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   445
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
   446
		# 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
   447
		# 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
   448
		# component.
1251
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   449
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   450
		# links to files should directly match a patch in the reference
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   451
		# repo.
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   452
		if self.ref_paths.get(realtarget, None):
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   453
			return
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   454
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   455
		# If it didn't match a path in the reference repo, it may still
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   456
		# be a link to a directory that has no action because it uses
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   457
		# the default attributes.  Look for a path that starts with
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   458
		# this value plus a trailing slash to be sure this it will be
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   459
		# resolvable on a fully installed system.
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   460
		realtarget += '/'
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   461
		for key in self.ref_paths:
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   462
			if key.startswith(realtarget):
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   463
				return
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   464
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   465
		engine.error(_("%s %s has unresolvable target '%s'") %
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   466
				(action.name, path, target),
f1fb66b52f41 16611225 foomatic-rip delivers obsolete LP functionality
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 1146
diff changeset
   467
			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
   468
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   469
	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
   470
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   471
	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
   472
		"""Checks for SVR4 startup scripts."""
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   473
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   474
		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
   475
			return
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   476
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   477
		path = action.attrs["path"]
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   478
		if self.initscript_re.match(path):
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   479
			engine.warning(
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   480
				_("SVR4 startup '%s', deliver SMF"
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   481
				  " service instead") % path,
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   482
				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
   483
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   484
	init_script.pkglint_desc = _(
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   485
		"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
   486
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   487
class UserlandManifestChecker(base.ManifestChecker):
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   488
        """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
   489
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   490
        name = "userland.manifest"
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   491
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   492
	def __init__(self, config):
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   493
		super(UserlandManifestChecker, self).__init__(config)
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   494
181
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   495
	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
   496
		manifest_paths = []
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   497
		files = False
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   498
		license = False
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   499
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   500
		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
   501
			files = True
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   502
			break
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   503
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   504
		if files == False:
45
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   505
			return
536ea324b223 initial content validation check extension for pkglint
Norm Jacobs <Norm.Jacobs@Sun.COM>
parents:
diff changeset
   506
84
b80cfd4e0a16 7000952 Userland package validation needs some love
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 45
diff changeset
   507
		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
   508
			license = True
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   509
			break
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   510
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   511
		if license == False:
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   512
			engine.error( _("missing license action"),
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   513
				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
   514
464
08f94c414553 7073736 need to turn _ into -
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 186
diff changeset
   515
		if 'org.opensolaris.arc-caseid' not in manifest:
08f94c414553 7073736 need to turn _ into -
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 186
diff changeset
   516
			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
   517
				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
   518
181
87e11e685b1f 7003927 userland should postprocess packaged files
Norm Jacobs <Norm.Jacobs@Oracle.COM>
parents: 168
diff changeset
   519
	component_check.pkglint_dest = _(
464
08f94c414553 7073736 need to turn _ into -
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents: 186
diff changeset
   520
		"license actions and ARC information are required if you deliver files.")
1020
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   521
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   522
        def publisher_in_fmri(self, manifest, engine, pkglint_id="002"):
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   523
                lint_id = "%s%s" % (self.name, pkglint_id)
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   524
                allowed_pubs = engine.get_param(
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   525
                    "%s.allowed_pubs" % lint_id).split(" ") 
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   526
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   527
                fmri = manifest.fmri
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   528
                if fmri.publisher and fmri.publisher not in allowed_pubs:
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   529
                        engine.error(_("package %s has a publisher set!") %
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   530
                            manifest.fmri,
4740049105f5 7030489 userland pkglint should check for publisher information in pkg.fmris
Rich Burridge <rich.burridge@oracle.com>
parents: 623
diff changeset
   531
                            msgid="%s%s.2" % (self.name, pkglint_id))