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
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
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
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
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
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
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
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
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