예제 #1
0
 def check(self, _file, stash):
     res = []
     items = stash.GetItemsFor(filename=_file,
                               classifier=Variable.CLASSIFIER,
                               attribute=Variable.ATTR_VAR,
                               attributeValue="SRC_URI")
     for i in items:
         if any([i.Flag.endswith(x) for x in ["md5sum", "sha256sum"]]):
             # These are just the hashes
             continue
         lines = [y.strip('"') for y in i.get_items() if y]
         for x in lines:
             if x == INLINE_BLOCK:
                 continue
             _url = get_scr_components(x)
             if _url["scheme"] in ["git"] and "tag" in _url["options"]:
                 _srcrevs = stash.GetItemsFor(
                     filename=_file,
                     classifier=Variable.CLASSIFIER,
                     attribute=Variable.ATTR_VAR,
                     attributeValue="SRCREV")
                 if "name" in _url["options"]:
                     _srcrevs = [
                         x for x in _srcrevs
                         if _url["options"]["name"] in x.SubItems
                     ]
                 else:
                     _srcrevs = [x for x in _srcrevs if not x.SubItems]
                 if any(_srcrevs):
                     res += self.finding(i.Origin, i.InFileLine)
     return res
예제 #2
0
 def check(self, _file, stash):
     res = []
     items = stash.GetItemsFor(filename=_file, classifier=Variable.CLASSIFIER,
                               attribute=Variable.ATTR_VAR)
     needles = ["SRC_URI"]
     for i in [x for x in items if x.VarName in needles]:
         for x in i.get_items():
             _comp = get_scr_components(x)
             if "${PN}" in _comp["src"]:
                 res += self.finding(i.Origin, i.InFileLine)
     return res
예제 #3
0
 def check(self, _file, stash):
     res = []
     _items = stash.GetItemsFor(filename=_file,
                                classifier=Variable.CLASSIFIER,
                                attribute=Variable.ATTR_VAR,
                                attributeValue="LIC_FILES_CHKSUM")
     for i in _items:
         components = get_scr_components(i.VarValueStripped)
         if any(components) and components["scheme"] == "file":
             if "${" in components["src"]:
                 res += self.finding(i.Origin, i.InFileLine)
     return res
예제 #4
0
 def check(self, _file, stash):
     res = []
     _items = stash.GetItemsFor(filename=_file,
                                classifier=Variable.CLASSIFIER,
                                attribute=Variable.ATTR_VAR,
                                attributeValue="SRC_URI")
     for i in _items:
         for f in [x for x in i.VarValueStripped.split(" ") if x]:
             components = get_scr_components(f)
             if components["scheme"] == "file":
                 if any([x for x in ["*"] if x in components["src"]]):
                     res += self.finding(i.Origin, i.InFileLine)
     return res
 def check(self, _file, stash):
     res = []
     items = stash.GetItemsFor(filename=_file, classifier=Variable.CLASSIFIER,
                               attribute=Variable.ATTR_VAR, attributeValue="BUGTRACKER")
     for i in items:
         val = i.VarValueStripped
         try:
             result = get_scr_components(val)
             if not result["scheme"] or not result["src"]:
                 raise Exception()
         except Exception:
             res += self.finding(i.Origin, i.InFileLine)
     return res
예제 #6
0
 def __analyse(self, i, _input):
     _url = get_scr_components(_input)
     res = []
     if _url["scheme"] not in self._valid_options.keys():
         self.OverrideMsg(
             "Fetcher '{}' is not known".format(_url["scheme"]))
         res += self.finding(i.Origin, i.InFileLine)
     else:
         for k, _ in _url["options"].items():
             if k not in self._valid_options[_url["scheme"]] + self._general_options:
                 self.OverrideMsg(
                     "Option '{}' is not known with this fetcher type".format(k))
                 res += self.finding(i.Origin, i.InFileLine)
     return res
예제 #7
0
 def check(self, _file, stash):
     res = []
     _items = stash.GetItemsFor(filename=_file, classifier=Variable.CLASSIFIER,
                                attribute=Variable.ATTR_VAR, attributeValue="LIC_FILES_CHKSUM")
     _var_whitelist = ["${WORKDIR}", "${S}", "${B}"]
     for i in _items:
         components = get_scr_components(expand_term(stash, _file, i.VarValueStripped))
         if any(components) and components["scheme"] == "file":
             _clean = components["src"]
             for x in _var_whitelist:
                 _clean = _clean.replace(x, "")
             if "${" in _clean:
                 res += self.finding(i.Origin, i.InFileLine)
     return res
예제 #8
0
 def check(self, _file, stash):
     res = []
     items = stash.GetItemsFor(filename=_file,
                               classifier=Variable.CLASSIFIER,
                               attribute=Variable.ATTR_VAR,
                               attributeValue="LIC_FILES_CHKSUM")
     for i in items:
         for l in i.get_items():
             _comp = get_scr_components(l)
             _prefix = os.path.dirname(_comp["src"])
             if _prefix in ["${S}"]:
                 res += self.finding(
                     i.Origin,
                     i.InFileLine,
                     override_msg=self.Msg.format(PATH=_prefix))
     return res
예제 #9
0
    def check(self, _file, stash):
        res = []
        items = stash.GetItemsFor(filename=_file,
                                  classifier=Variable.CLASSIFIER,
                                  attribute=Variable.ATTR_VAR,
                                  attributeValue="SRC_URI")

        _domains = set()
        for i in items:
            for u in [x.strip('"').strip() for x in i.get_items()]:
                if u == INLINE_BLOCK:
                    continue
                _url = get_scr_components(u)
                if _url["scheme"] and _url["scheme"] not in ["file"]:
                    _domains.add(_url["src"].split("/")[0])
        if len(_domains) > 1:
            res += self.finding(i.Origin, i.InFileLine)
        return res
예제 #10
0
 def __analyse(self, i, _input, _index):
     _url = get_scr_components(_input)
     res = []
     if "scheme" not in _url:
         return res
     # For certain types of file:// url parsing fails
     # ignore those
     if _url["scheme"] not in self._valid_options.keys() and \
        not _input.strip().startswith("file://") and _url["scheme"]:
         res += self.finding(i.Origin, i.InFileLine + _index,
                             "Fetcher '{}' is not known".format(_url["scheme"]))
     else:
         for k, _ in _url["options"].items():
             if _url["scheme"] not in self._valid_options:
                 continue
             if k not in self._valid_options[_url["scheme"]] + self._general_options:
                 res += self.finding(i.Origin, i.InFileLine + _index,
                                     "Option '{}' is not known with this fetcher type".format(k))
     return res
    def check(self, _file, stash):
        res = []
        items = stash.GetItemsFor(filename=_file,
                                  classifier=Variable.CLASSIFIER,
                                  attribute=Variable.ATTR_VAR,
                                  attributeValue="SRC_URI")
        _fetcher = []
        for i in items:
            if any([i.Flag.endswith(x) for x in ["md5sum", "sha256sum"]]):
                # These are just the hashes
                continue
            lines = [y.strip('"') for y in i.get_items() if y]

            for x in lines:
                if x == INLINE_BLOCK:
                    _fetcher.append(("inline", i.InFileLine))
                    continue
                _url = get_scr_components(x)
                _fetcher.append((_url["scheme"], i.InFileLine))
        if _fetcher:
            if any(x[0] != "file"
                   for x in _fetcher) and _fetcher[0][0] == "file":
                res += self.finding(i.Origin, _fetcher[0][1])
        return res