Esempio n. 1
0
    def testGroup4(self):
        """ Test with a group name line in the group file that
                starts with a "+". (See bug #4470 for more details). """
        if not os.path.exists("/etc/group"):
            return

        grpfile = file(os.path.join(self.test_root, "etc", "group"), "w")
        grpfile.write(
            """root::0:
gk::0:
bin::2:root,daemon
+plusgrp
adm::4:root,daemon
uucp::5:root
mail::6:root
tty::7:root,adm
+"""
        )
        grpfile.close()
        self.assert_("root" == portable.get_name_by_gid(0, self.test_root, True))
        self.assert_(0 == portable.get_group_by_name("root", self.test_root, True))
        self.assert_(0 == portable.get_group_by_name("gk", self.test_root, True))
        self.assert_(7 == portable.get_group_by_name("tty", self.test_root, True))

        self.assertRaises(KeyError, portable.get_group_by_name, "plusgrp", self.test_root, True)
Esempio n. 2
0
    def testGroup3(self):
        """ Test with corrupt/oddball group file """
        if not os.path.exists("/etc/group"):
            return

        grpfile = file(os.path.join(self.test_root, "etc", "group"), "w")
        grpfile.write(
            """root::0:
blorg
bin::2:root,daemon

corrupt:x
adm::4:root,daemon
uucp::5:root
mail::6:root
tty::7:root,adm
gk::0:
+"""
        )
        grpfile.close()
        self.assert_("root" == portable.get_name_by_gid(0, self.test_root, True))
        self.assert_(0 == portable.get_group_by_name("root", self.test_root, True))
        self.assert_(0 == portable.get_group_by_name("gk", self.test_root, True))
        self.assert_(7 == portable.get_group_by_name("tty", self.test_root, True))

        self.assertRaises(KeyError, portable.get_group_by_name, "ThisShouldNotExist", self.test_root, True)

        self.assertRaises(KeyError, portable.get_group_by_name, "corrupt", self.test_root, True)

        self.assertRaises(KeyError, portable.get_group_by_name, 570, self.test_root, True)
Esempio n. 3
0
    def testGroup4(self):
        """ Test with a group name line in the group file that
                starts with a "+". (See bug #4470 for more details). """
        if not os.path.exists("/etc/group"):
            return

        grpfile = open(os.path.join(self.test_root, "etc", "group"), "w")
        grpfile.write( \
"""root::0:
gk::0:
bin::2:root,daemon
+plusgrp
adm::4:root,daemon
uucp::5:root
mail::6:root
tty::7:root,adm
+""")
        grpfile.close()
        self.assertTrue("root" == \
            portable.get_name_by_gid(0, self.test_root, True))
        self.assertTrue(0 == \
            portable.get_group_by_name("root", self.test_root, True))
        self.assertTrue(0 == \
            portable.get_group_by_name("gk", self.test_root, True))
        self.assertTrue(7 == \
            portable.get_group_by_name("tty", self.test_root, True))

        self.assertRaises(KeyError, portable.get_group_by_name, "plusgrp",
                          self.test_root, True)
Esempio n. 4
0
    def testGroup1(self):
        if not os.path.exists("/etc/group"):
            return

        grpfile = open(os.path.join(self.test_root, "etc", "group"), "w")
        grpfile.write( \
"""root::0:
gk::0:
other::1:root
bin::2:root,daemon
sys::3:root,bin,adm
adm::4:root,daemon
uucp::5:root
mail::6:root
tty::7:root,adm""")
        grpfile.close()

        self.assertRaises(KeyError, portable.get_group_by_name,
                          "ThisShouldNotExist", self.test_root, True)

        self.assertTrue(0 == \
            portable.get_group_by_name("root", self.test_root, True))
        self.assertTrue(0 == \
            portable.get_group_by_name("gk", self.test_root, True))

        self.assertRaises(KeyError, portable.get_name_by_gid, 12345,
                          self.test_root, True)
Esempio n. 5
0
        def __do_alter_only_verify(self, pfmri, verbose=False, quiet=False, exit=0,
            parsable=False, debug=""):
                # Alter the owner, group, mode of all files (and
                # directories) to something different than the package declares.
                m = manifest.Manifest()
                m.set_content(self.get_img_manifest(pfmri))
                for a in m.gen_actions():
                        if a.name not in ("file", "dir"):
                                # Only want file or dir actions.
                                continue

                        ubin = portable.get_user_by_name("bin", None, False)
                        groot = portable.get_group_by_name("root", None, False)

                        fname = a.attrs["path"]
                        fpath = os.path.join(self.get_img_path(), fname)
                        os.chown(fpath, ubin, groot)
                        os.chmod(fpath, misc.PKG_RO_FILE_MODE)

                verify_cmd = "verify"
                if verbose:
                        verify_cmd += " -v"
                if quiet:
                        verify_cmd += " -q"
                if parsable:
                        verify_cmd += " --parsable=0"

                self.pkg("{0}{1} {2}".format(debug, verify_cmd, pfmri),
                    exit=exit)
                if exit == 0:
                        self.assertTrue("OK" in self.output and "ERROR" not
                            in self.output)
                return exit
Esempio n. 6
0
 def damage_all_files(self):
         ubin = portable.get_user_by_name("bin", None, False)
         groot = portable.get_group_by_name("root", None, False)
         for path in self.misc_files:
                 file_path = os.path.join(self.get_img_path(), path)
                 with open(file_path, "a+") as f:
                         f.write("\nbogus\n")
                 os.chown(file_path, ubin, groot)
                 os.chmod(file_path, misc.PKG_RO_FILE_MODE)
Esempio n. 7
0
 def damage_files(self, paths):
     ubin = portable.get_user_by_name("bin", None, False)
     groot = portable.get_group_by_name("root", None, False)
     for path in paths:
         file_path = os.path.join(self.get_img_path(), path)
         with open(file_path, "a+") as f:
             f.write("\nbogus\n")
         os.chown(file_path, ubin, groot)
         os.chmod(file_path, misc.PKG_RO_FILE_MODE)
Esempio n. 8
0
	def create_some_files(self, paths):
                ubin = portable.get_user_by_name("bin", None, False)
                groot = portable.get_group_by_name("root", None, False)
		for p in paths:
			file_path = os.path.join(self.get_img_path(), p)
			dirpath = os.path.dirname(file_path)
			if not os.path.exists(dirpath):
				os.mkdir(dirpath)
			with open(file_path, "a+") as f:
				f.write("\ncontents\n")
			os.chown(file_path, ubin, groot)
			os.chmod(file_path, misc.PKG_RO_FILE_MODE)
Esempio n. 9
0
    def testGroup2(self):
        """ Test with a missing group file """
        if not os.path.exists("/etc/group"):
            return

        self.assertRaises(KeyError, portable.get_group_by_name, "ThisShouldNotExist", self.test_root, True)

        # This should work on unix systems, since we'll "bootstrap"
        # out to the OS's version.  And AFAIK all unix systems have
        # a group with gid 0.
        grpname = portable.get_name_by_gid(0, self.test_root, True)
        self.assert_(0 == portable.get_group_by_name(grpname, self.test_root, True))
Esempio n. 10
0
def _chown_cache_dir(dir):
    """Sets ownership for cache directory as pkg5srv:bin"""

    uid = portable.get_user_by_name(SYSREPO_USER, None, False)
    gid = portable.get_group_by_name("bin", None, False)
    try:
        os.chown(dir, uid, gid)
    except OSError as err:
        if not os.environ.get("PKG5_TEST_ENV", None):
            raise SysrepoException(
                _("Unable to chown to {user}:{group}: "
                  "{err}").format(user=SYSREPO_USER, group="bin", err=err))
Esempio n. 11
0
def _chown_dir(dir):
        """Sets ownership for the given directory to pkg5srv:pkg5srv"""

        uid = portable.get_user_by_name(DEPOT_USER, None, False)
        gid = portable.get_group_by_name(DEPOT_GROUP, None, False)
        try:
                os.chown(dir, uid, gid)
        except OSError as err:
                if not os.environ.get("PKG5_TEST_ENV", None):
                        raise DepotException(_("Unable to chown {dir} to "
                            "{user}:{group}: {err}").format(
                            dir=dir, user=DEPOT_USER,
                            group=DEPOT_GROUP, err=err))
Esempio n. 12
0
def _chown_dir(dir):
        """Sets ownership for the given directory to pkg5srv:pkg5srv"""

        uid = portable.get_user_by_name(DEPOT_USER, None, False)
        gid = portable.get_group_by_name(DEPOT_GROUP, None, False)
        try:
                os.chown(dir, uid, gid)
        except OSError, err:
                if not os.environ.get("PKG5_TEST_ENV", None):
                        raise DepotException(_("Unable to chown %(dir)s to "
                            "%(user)s:%(group)s: %(err)s") %
                            {"dir": dir, "user": DEPOT_USER,
                            "group": DEPOT_GROUP, "err": err})
Esempio n. 13
0
    def testGroup2(self):
        """ Test with a missing group file """
        if not os.path.exists("/etc/group"):
            return

        self.assertRaises(KeyError, portable.get_group_by_name,
                          "ThisShouldNotExist", self.test_root, True)

        # This should work on unix systems, since we'll "bootstrap"
        # out to the OS's version.  And AFAIK all unix systems have
        # a group with gid 0.
        grpname = portable.get_name_by_gid(0, self.test_root, True)
        self.assertTrue(0 == \
            portable.get_group_by_name(grpname, self.test_root, True))
Esempio n. 14
0
def _chown_cache_dir(dir):
        """Sets ownership for cache directory as pkg5srv:bin"""

        uid = portable.get_user_by_name(SYSREPO_USER, None, False)
        gid = portable.get_group_by_name("bin", None, False)
        try:
                os.chown(dir, uid, gid)
        except OSError, err:
                if not os.environ.get("PKG5_TEST_ENV", None):
                        raise SysrepoException(
                            _("Unable to chown to %(user)s:%(group)s: "
                            "%(err)s") %
                            {"user": SYSREPO_USER, "group": "bin",
                            "err": err})
Esempio n. 15
0
    def testGroup3(self):
        """ Test with corrupt/oddball group file """
        if not os.path.exists("/etc/group"):
            return

        grpfile = open(os.path.join(self.test_root, "etc", "group"), "w")
        grpfile.write( \
"""root::0:
blorg
bin::2:root,daemon

corrupt:x
adm::4:root,daemon
uucp::5:root
mail::6:root
tty::7:root,adm
gk::0:
+""")
        grpfile.close()
        self.assertTrue("root" == \
            portable.get_name_by_gid(0, self.test_root, True))
        self.assertTrue(0 == \
            portable.get_group_by_name("root", self.test_root, True))
        self.assertTrue(0 == \
            portable.get_group_by_name("gk", self.test_root, True))
        self.assertTrue(7 == \
            portable.get_group_by_name("tty", self.test_root, True))

        self.assertRaises(KeyError, portable.get_group_by_name,
                          "ThisShouldNotExist", self.test_root, True)

        self.assertRaises(KeyError, portable.get_group_by_name, "corrupt",
                          self.test_root, True)

        self.assertRaises(KeyError, portable.get_group_by_name, 570,
                          self.test_root, True)
Esempio n. 16
0
    def testGroup1(self):
        if not os.path.exists("/etc/group"):
            return

        grpfile = file(os.path.join(self.test_root, "etc", "group"), "w")
        grpfile.write(
            """root::0:
gk::0:
other::1:root
bin::2:root,daemon
sys::3:root,bin,adm
adm::4:root,daemon
uucp::5:root
mail::6:root
tty::7:root,adm"""
        )
        grpfile.close()

        self.assertRaises(KeyError, portable.get_group_by_name, "ThisShouldNotExist", self.test_root, True)

        self.assert_(0 == portable.get_group_by_name("root", self.test_root, True))
        self.assert_(0 == portable.get_group_by_name("gk", self.test_root, True))

        self.assertRaises(KeyError, portable.get_name_by_gid, 12345, self.test_root, True)
Esempio n. 17
0
def _chown_runtime_dir(runtime_dir):
    """Change the ownership of all files under runtime_dir to our sysrepo
        user/group"""

    uid = portable.get_user_by_name(SYSREPO_USER, None, False)
    gid = portable.get_group_by_name(SYSREPO_GROUP, None, False)
    try:
        misc.recursive_chown_dir(runtime_dir, uid, gid)
    except OSError as err:
        if not os.environ.get("PKG5_TEST_ENV", None):
            raise SysrepoException(
                _("Unable to chown to {user}:{group}: "
                  "{err}").format(user=SYSREPO_USER,
                                  group=SYSREPO_GROUP,
                                  err=err))
Esempio n. 18
0
def _chown_runtime_dir(runtime_dir):
        """Change the ownership of all files under runtime_dir to our sysrepo
        user/group"""

        uid = portable.get_user_by_name(SYSREPO_USER, None, False)
        gid = portable.get_group_by_name(SYSREPO_GROUP, None, False)
        try:
                misc.recursive_chown_dir(runtime_dir, uid, gid)
        except OSError, err:
                if not os.environ.get("PKG5_TEST_ENV", None):
                        raise SysrepoException(
                            _("Unable to chown to %(user)s:%(group)s: "
                            "%(err)s") %
                            {"user": SYSREPO_USER, "group": SYSREPO_GROUP,
                            "err": err})
Esempio n. 19
0
    def __do_alter_verify(self,
                          pfmri,
                          verbose=False,
                          quiet=False,
                          exit=0,
                          parsable=False):
        # Alter the owner, group, mode, and timestamp of all files (and
        # directories) to something different than the package declares.
        m = manifest.Manifest()
        m.set_content(self.get_img_manifest(pfmri))
        ctime = time.time() - 1000
        for a in m.gen_actions():
            if a.name not in ("file", "dir"):
                # Only want file or dir actions.
                continue

            ubin = portable.get_user_by_name("bin", None, False)
            groot = portable.get_group_by_name("root", None, False)

            fname = a.attrs["path"]
            fpath = os.path.join(self.get_img_path(), fname)
            os.chown(fpath, ubin, groot)
            os.chmod(fpath, misc.PKG_RO_FILE_MODE)
            os.utime(fpath, (ctime, ctime))

        # Call pkg fix to fix them.
        fix_cmd = "fix"
        if verbose:
            fix_cmd += " -v"
        if quiet:
            fix_cmd += " -q"
        if parsable:
            fix_cmd += " --parsable=0"

        self.pkg("{0} {1}".format(fix_cmd, pfmri), exit=exit)
        if exit != 0:
            return exit

        editables = []
        # Now verify that fix actually fixed them.
        for a in m.gen_actions():
            if a.name not in ("file", "dir"):
                # Only want file or dir actions.
                continue

            # Validate standard attributes.
            self.validate_fsobj_attrs(a)

            # Now validate attributes that require special handling.
            fname = a.attrs["path"]
            fpath = os.path.join(self.get_img_path(), fname)
            lstat = os.lstat(fpath)

            # Verify that preserved files don't get renamed, and
            # the new ones are not installed if the file wasn't
            # missing already.
            preserve = a.attrs.get("preserve")
            if preserve == "renamenew":
                self.assert_(not os.path.exists(fpath + ".new"))
            elif preserve == "renameold":
                self.assert_(not os.path.exists(fpath + ".old"))

            if preserve:
                editables.append("{0}".format(a.attrs["path"]))

            # Verify timestamp (if applicable).
            ts = a.attrs.get("timestamp")
            if ts:
                expected = misc.timestamp_to_time(ts)
                actual = lstat.st_mtime
                if preserve:
                    self.assertNotEqual(
                        expected, actual, "timestamp expected {expected} == "
                        "actual {actual} for "
                        "{fname}".format(expected=expected,
                                         actual=actual,
                                         fname=fname))
                else:
                    self.assertEqual(
                        expected, actual, "timestamp expected {expected} != "
                        "actual {actual} for "
                        "{fname}".format(expected=expected,
                                         actual=actual,
                                         fname=fname))

        # Verify the parsable output (if applicable).
        if parsable:
            if editables:
                self.assertEqualParsable(
                    self.output,
                    affect_packages=["{0}".format(pfmri)],
                    change_editables=[["updated", editables]])
            else:
                self.assertEqualParsable(self.output,
                                         affect_packages=["{0}".format(pfmri)])