19483340 driver action policy update displays false failure messages s11u3-sru
authorsaurabh.vyas@oracle.com
Fri, 23 Sep 2016 11:47:00 +0530
branchs11u3-sru
changeset 3432 489e5c945d1d
parent 3431 986e4ec518b8
child 3433 d0b61c46c39b
19483340 driver action policy update displays false failure messages
src/modules/actions/driver.py
src/tests/cli/t_pkg_install.py
--- a/src/modules/actions/driver.py	Fri Sep 23 11:46:56 2016 +0530
+++ b/src/modules/actions/driver.py	Fri Sep 23 11:47:00 2016 +0530
@@ -21,7 +21,7 @@
 #
 
 #
-# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
 #
 
 """module describing a driver packaging object.
@@ -573,21 +573,16 @@
                 # with it.
                 for i in rem_policy:
                         spec = i.split()
+                        if not spec:
+                                continue
+
                         # Test if there is a minor node and if so use it
                         # for the policy removal. Otherwise, if none is
                         # supplied, then use the wild card to match.
-                        if len(spec) == 3:
+                        if "=" not in spec[0]:
                                 minornode = spec[0]
-                        elif len(spec) == 2:
-                                # This can happen when the policy is defined
-                                # in the package manifest without an associated
-                                # minor node.
+                        else:
                                 minornode = "*"
-                        else:
-                                print "driver (%s) update (removal of " \
-                                    "policy '%s') failed: invalid policy " \
-                                    "spec." % (self.attrs["name"], i)
-                                continue
 
                         args = rem_base + ("-p", minornode, self.attrs["name"])
                         self.__call(args, "driver (%(name)s) upgrade (removal "
--- a/src/tests/cli/t_pkg_install.py	Fri Sep 23 11:46:56 2016 +0530
+++ b/src/tests/cli/t_pkg_install.py	Fri Sep 23 11:47:00 2016 +0530
@@ -2583,7 +2583,7 @@
             add file tmp/dricon2_da path=/etc/driver_aliases mode=644 owner=root group=sys preserve=true
             add file tmp/dricon_n2m path=/etc/name_to_major mode=644 owner=root group=sys preserve=true
             add file tmp/dripol1_dp path=/etc/security/device_policy mode=644 owner=root group=sys preserve=true
-            add driver name=frigit policy="read_priv_set=net_rawaccess write_priv_set=net_rawaccess"
+            add driver name=frigit policy="read_priv_set=net_rawaccess write_priv_set=net_rawaccess tpd_member=true"
             close
         """
 
@@ -2603,6 +2603,54 @@
             close
         """
 
+        dripol3 = """
+            open dripol@3
+            add dir path=var mode=755 owner=root group=root
+            add dir path=var/run mode=755 owner=root group=root
+            add dir mode=0755 owner=root group=root path=system
+            add dir mode=0755 owner=root group=root path=system/volatile
+            add dir path=/tmp mode=755 owner=root group=root
+            add dir path=/etc mode=755 owner=root group=root
+            add dir path=/etc/security mode=755 owner=root group=root
+            add file tmp/dricon2_da path=/etc/driver_aliases mode=644 owner=root group=sys preserve=true
+            add file tmp/dricon_n2m path=/etc/name_to_major mode=644 owner=root group=sys preserve=true
+            add file tmp/dripol1_dp path=/etc/security/device_policy mode=644 owner=root group=sys preserve=true
+            add driver name=frigit policy="tpd_member=true"
+            close
+        """
+
+        dripol4 = """
+            open dripol@4
+            add dir path=var mode=755 owner=root group=root
+            add dir path=var/run mode=755 owner=root group=root
+            add dir mode=0755 owner=root group=root path=system
+            add dir mode=0755 owner=root group=root path=system/volatile
+            add dir path=/tmp mode=755 owner=root group=root
+            add dir path=/etc mode=755 owner=root group=root
+            add dir path=/etc/security mode=755 owner=root group=root
+            add file tmp/dricon2_da path=/etc/driver_aliases mode=644 owner=root group=sys preserve=true
+            add file tmp/dricon_n2m path=/etc/name_to_major mode=644 owner=root group=sys preserve=true
+            add file tmp/dripol1_dp path=/etc/security/device_policy mode=644 owner=root group=sys preserve=true
+            add driver name=frigit
+            close
+        """
+
+        dripol5 = """
+            open dripol@5
+            add dir path=var mode=755 owner=root group=root
+            add dir path=var/run mode=755 owner=root group=root
+            add dir mode=0755 owner=root group=root path=system
+            add dir mode=0755 owner=root group=root path=system/volatile
+            add dir path=/tmp mode=755 owner=root group=root
+            add dir path=/etc mode=755 owner=root group=root
+            add dir path=/etc/security mode=755 owner=root group=root
+            add file tmp/dricon2_da path=/etc/driver_aliases mode=644 owner=root group=sys preserve=true
+            add file tmp/dricon_n2m path=/etc/name_to_major mode=644 owner=root group=sys preserve=true
+            add file tmp/dripol1_dp path=/etc/security/device_policy mode=644 owner=root group=sys preserve=true
+            add driver name=frigit perms="node1 0666 root sys" policy="node1 read_priv_set=all write_priv_set=all tpd_member=true"
+            close
+        """
+
         liveroot10 = """
             open [email protected]
             add dir path=/etc mode=755 owner=root group=root
@@ -3234,7 +3282,8 @@
                 self.driver_policy_removal_helper("exact-install")
 
         def driver_policy_removal_helper(self, install_cmd):
-                self.pkgsend_bulk(self.rurl, (self.dripol1, self.dripol2))
+                self.pkgsend_bulk(self.rurl, (self.dripol1, self.dripol2,
+                    self.dripol3, self.dripol4, self.dripol5))
 
                 self.image_create(self.rurl)
 
@@ -3247,7 +3296,9 @@
                 # device in /etc/security/device_policy
                 dp_contents = file(os.path.join(self.get_img_path(),
                     "etc/security/device_policy")).readlines()
-                self.assert_("frigit:*\tread_priv_set=net_rawaccess\twrite_priv_set=net_rawaccess\n" in dp_contents)
+                self.assert_("frigit:*\tread_priv_set=net_rawaccess\t"
+                    "write_priv_set=net_rawaccess\ttpd_member=true\n"
+                    in dp_contents)
 
                 # Should reinstall the frigit driver without a policy.
                 self.pkg("%s dripol@2" % install_cmd)
@@ -3256,7 +3307,27 @@
                 # device in /etc/security/device_policy
                 dp_contents = file(os.path.join(self.get_img_path(),
                     "etc/security/device_policy")).readlines()
-                self.assert_("frigit:*\tread_priv_set=net_rawaccess\twrite_priv_set=net_rawaccess\n" not in dp_contents)
+                self.assert_("frigit:*\tread_priv_set=net_rawaccess\t"
+                    "write_priv_set=net_rawaccess\ttpd_member=true\n"
+                    not in dp_contents)
+
+                self.pkg("update dripol@3")
+                dp_contents = open(os.path.join(self.get_img_path(),
+                    "etc/security/device_policy")).readlines()
+                self.assert_("frigit:*\ttpd_member=true\n"
+                    in dp_contents)
+
+                self.pkg("update dripol@5")
+                dp_contents = open(os.path.join(self.get_img_path(),
+                    "etc/security/device_policy")).readlines()
+                self.assert_("frigit:node1\tread_priv_set=all"
+                    "\twrite_priv_set=all\ttpd_member=true\n"
+                    in dp_contents)
+
+                self.pkg("update dripol@4")
+                dp_contents = open(os.path.join(self.get_img_path(),
+                    "etc/security/device_policy")).readlines()
+                self.assert_("frigit:node1" not in dp_contents)
 
         def test_file_preserve(self):
                 """Verify that file preserve=true works as expected during