Пример #1
0
    def verify(self, entry, modlist):
        ondisk = self._exists(entry)
        if not ondisk:
            return False

        if not stat.S_ISDIR(ondisk[stat.ST_MODE]):
            self.logger.info("POSIX: %s is not a directory" %
                             entry.get('name'))
            return False

        prune = True
        if entry.get('prune', 'false').lower() == 'true':
            # check for any extra entries when prune='true' attribute is set
            try:
                extras = [os.path.join(entry.get('name'), ent)
                          for ent in os.listdir(entry.get('name'))
                          if os.path.join(entry.get('name'),
                                          ent) not in modlist]
                if extras:
                    prune = False
                    msg = "Directory %s contains extra entries: %s" % \
                        (entry.get('name'), "; ".join(extras))
                    self.logger.info("POSIX: " + msg)
                    entry.set('qtext', entry.get('qtext', '') + '\n' + msg)
                    for extra in extras:
                        Bcfg2.Client.XML.SubElement(entry, 'Prune', path=extra)
            except OSError:
                prune = True

        return POSIXTool.verify(self, entry, modlist) and prune
Пример #2
0
    def verify(self, entry, modlist):
        """Verify device entry."""
        ondisk = self._exists(entry)
        if not ondisk:
            return False

        # attempt to verify device properties as specified in config
        rv = True
        dev_type = entry.get('dev_type')
        if dev_type in ['block', 'char']:
            major = int(entry.get('major'))
            minor = int(entry.get('minor'))
            if major != os.major(ondisk.st_rdev):
                msg = ("Major number for device %s is incorrect. "
                       "Current major is %s but should be %s" %
                       (entry.get("name"), os.major(ondisk.st_rdev), major))
                self.logger.debug('POSIX: ' + msg)
                entry.set('qtext', entry.get('qtext', '') + "\n" + msg)
                rv = False

            if minor != os.minor(ondisk.st_rdev):
                msg = ("Minor number for device %s is incorrect. "
                       "Current minor is %s but should be %s" %
                       (entry.get("name"), os.minor(ondisk.st_rdev), minor))
                self.logger.debug('POSIX: ' + msg)
                entry.set('qtext', entry.get('qtext', '') + "\n" + msg)
                rv = False
        return POSIXTool.verify(self, entry, modlist) and rv
Пример #3
0
    def verify(self, entry, modlist):
        ondisk = self._exists(entry)
        tempdata, is_binary = self._get_data(entry)
        if isinstance(tempdata, str) and str != unicode:
            tempdatasize = len(tempdata)
        else:
            tempdatasize = len(tempdata.encode(Bcfg2.Options.setup.encoding))

        different = False
        content = None
        if not ondisk:
            # first, see if the target file exists at all; if not,
            # they're clearly different
            different = True
            content = ""
        elif tempdatasize != ondisk[stat.ST_SIZE]:
            # next, see if the size of the target file is different
            # from the size of the desired content
            different = True
        else:
            # finally, read in the target file and compare them
            # directly. comparison could be done with a checksum,
            # which might be faster for big binary files, but slower
            # for everything else
            try:
                content = open(entry.get('name')).read()
            except UnicodeDecodeError:
                content = open(entry.get('name'),
                               encoding=Bcfg2.Options.setup.encoding).read()
            except IOError:
                self.logger.error("POSIX: Failed to read %s: %s" %
                                  (entry.get("name"), sys.exc_info()[1]))
                return False
            different = content != tempdata

        if different:
            self.logger.debug("POSIX: %s has incorrect contents" %
                              entry.get("name"))
            self._get_diffs(entry,
                            interactive=Bcfg2.Options.setup.interactive,
                            sensitive=entry.get('sensitive',
                                                'false').lower() == 'true',
                            is_binary=is_binary,
                            content=content)
        return POSIXTool.verify(self, entry, modlist) and not different
Пример #4
0
    def verify(self, entry, modlist):
        ondisk = self._exists(entry)
        tempdata, is_binary = self._get_data(entry)
        if isinstance(tempdata, str) and str != unicode:
            tempdatasize = len(tempdata)
        else:
            tempdatasize = len(tempdata.encode(Bcfg2.Options.setup.encoding))

        different = False
        content = None
        if not ondisk:
            # first, see if the target file exists at all; if not,
            # they're clearly different
            different = True
            content = ""
        elif tempdatasize != ondisk[stat.ST_SIZE]:
            # next, see if the size of the target file is different
            # from the size of the desired content
            different = True
        else:
            # finally, read in the target file and compare them
            # directly. comparison could be done with a checksum,
            # which might be faster for big binary files, but slower
            # for everything else
            try:
                content = open(entry.get('name')).read()
            except UnicodeDecodeError:
                content = open(entry.get('name'),
                               encoding=Bcfg2.Options.setup.encoding).read()
            except IOError:
                self.logger.error("POSIX: Failed to read %s: %s" %
                                  (entry.get("name"), sys.exc_info()[1]))
                return False
            different = content != tempdata

        if different:
            self.logger.debug("POSIX: %s has incorrect contents" %
                              entry.get("name"))
            self._get_diffs(
                entry, interactive=Bcfg2.Options.setup.interactive,
                sensitive=entry.get('sensitive', 'false').lower() == 'true',
                is_binary=is_binary, content=content)
        return POSIXTool.verify(self, entry, modlist) and not different
Пример #5
0
 def verify(self, entry, modlist):
     rv = True
     for cmd in self.get_commands(entry):
         try:
             if not cmd.verify():
                 err = "Augeas: Command has not been applied to %s: %s" % \
                       (entry.get("name"), cmd)
                 self.logger.debug(err)
                 entry.set('qtext', "\n".join([entry.get('qtext', ''),
                                               err]))
                 rv = False
                 cmd.command.set("verified", "false")
             else:
                 cmd.command.set("verified", "true")
         except:  # pylint: disable=W0702
             err = "Augeas: Unexpected error verifying %s: %s: %s" % \
                   (entry.get("name"), cmd, sys.exc_info()[1])
             self.logger.error(err)
             entry.set('qtext', "\n".join([entry.get('qtext', ''), err]))
             rv = False
             cmd.command.set("verified", "false")
     return POSIXTool.verify(self, entry, modlist) and rv
Пример #6
0
 def verify(self, entry, modlist):
     rv = True
     for cmd in self.get_commands(entry):
         try:
             if not cmd.verify():
                 err = "Augeas: Command has not been applied to %s: %s" % \
                       (entry.get("name"), cmd)
                 self.logger.debug(err)
                 entry.set('qtext', "\n".join([entry.get('qtext', ''),
                                               err]))
                 rv = False
                 cmd.command.set("verified", "false")
             else:
                 cmd.command.set("verified", "true")
         except:  # pylint: disable=W0702
             err = "Augeas: Unexpected error verifying %s: %s: %s" % \
                   (entry.get("name"), cmd, sys.exc_info()[1])
             self.logger.error(err)
             entry.set('qtext', "\n".join([entry.get('qtext', ''), err]))
             rv = False
             cmd.command.set("verified", "false")
     return POSIXTool.verify(self, entry, modlist) and rv
Пример #7
0
    def verify(self, entry, modlist):
        ondisk = self._exists(entry)
        tempdata, is_binary = self._get_data(entry)

        different = False
        content = None
        if not ondisk:
            # first, see if the target file exists at all; if not,
            # they're clearly different
            different = True
            content = ""
        elif len(tempdata) != ondisk[stat.ST_SIZE]:
            # next, see if the size of the target file is different
            # from the size of the desired content
            different = True
        else:
            # finally, read in the target file and compare them
            # directly. comparison could be done with a checksum,
            # which might be faster for big binary files, but slower
            # for everything else
            try:
                content = open(entry.get("name")).read()
            except IOError:
                self.logger.error("POSIX: Failed to read %s: %s" % (entry.get("name"), sys.exc_info()[1]))
                return False
            different = content != tempdata

        if different:
            self.logger.debug("POSIX: %s has incorrect contents" % entry.get("name"))
            self._get_diffs(
                entry,
                interactive=self.setup["interactive"],
                sensitive=entry.get("sensitive", "false").lower() == "true",
                is_binary=is_binary,
                content=content,
            )
        return POSIXTool.verify(self, entry, modlist) and not different