Beispiel #1
0
    def check(self, _file, stash):
        res = []
        items = stash.GetItemsFor(filename=_file,
                                  classifier=Variable.CLASSIFIER,
                                  attribute=Variable.ATTR_VAR,
                                  attributeValue='SRC_URI')
        _fetcher = []
        for item in items:
            if any([item.Flag.endswith(x) for x in ['md5sum', 'sha256sum']]):
                # These are just the hashes
                continue
            lines = [y.strip('"') for y in item.get_items() if y]

            for x in lines:
                if x == INLINE_BLOCK:
                    _fetcher.append(('inline', item.InFileLine))
                    continue
                _url = get_scr_components(x)
                if _url['scheme']:
                    _fetcher.append((_url['scheme'], item.InFileLine))
        if _fetcher:
            if any(x[0] != 'file'
                   for x in _fetcher) and _fetcher[0][0] == 'file':
                res += self.finding(item.Origin, _fetcher[0][1])
        return res
 def check(self, _file, stash):
     res = []
     items = stash.GetItemsFor(filename=_file,
                               classifier=Variable.CLASSIFIER,
                               attribute=Variable.ATTR_VAR,
                               attributeValue='SRC_URI')
     for item in items:
         if any([item.Flag.endswith(x) for x in ['md5sum', 'sha256sum']]):
             # These are just the hashes
             continue
         lines = [y.strip('"') for y in item.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(item.Origin, item.InFileLine)
     return res
Beispiel #3
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
 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 check(self, _file, stash):
     res = []
     items = stash.GetItemsFor(filename=_file,
                               classifier=Variable.CLASSIFIER,
                               attribute=Variable.ATTR_VAR)
     needles = ['SRC_URI', 'S']
     for i in [x for x in items if x.VarName in needles]:
         for x in i.get_items():
             if i.VarName == 'SRC_URI':
                 _haystack = get_scr_components(x)['src']
             else:
                 _haystack = x
             if '${P}' in _haystack:
                 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.strip('"') for x in i.get_items() if x]:
             if f == INLINE_BLOCK:
                 continue
             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
Beispiel #7
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 listitem in i.get_items():
             _comp = get_scr_components(listitem)
             _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
Beispiel #8
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
Beispiel #9
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
Beispiel #10
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
Beispiel #11
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"]:
                 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')

        _domains = set()
        for item in items:
            for u in [x.strip('\'').strip() for x in item.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(item.Origin, item.InFileLine)
        return res
Beispiel #13
0
 def __analyse(self, item, _input, _index):
     _url = get_scr_components(_input)
     res = []
     if 'scheme' not in _url:
         return res  # pragma: no cover
     # 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(item.Origin, item.InFileLine + _index,
                             'Fetcher \'{a}\' is not known'.format(a=_url['scheme']))
     else:
         for k, v in _url['options'].items():
             if _url['scheme'] not in self._valid_options:
                 continue  # pragma: no cover
             if k == 'type' and v == 'kmeta':
                 continue  # linux-yocto uses this option to indicate kernel metadata sources
             if k not in self._valid_options[_url['scheme']] + self._general_options:
                 res += self.finding(item.Origin, item.InFileLine + _index,
                                     'Option \'{a}\' is not known with this fetcher type'.format(a=k))
     return res
    def check(self, _file, stash):
        res = []
        items = stash.GetItemsFor(filename=_file, classifier=Variable.CLASSIFIER,
                                  attribute=Variable.ATTR_VAR, attributeValue='SRC_URI')

        _pv = expand_term(stash, _file, '${PV}') or guess_recipe_version(_file)

        for i in items:
            for item in [expand_term(stash, _file, x) for x in i.get_items()]:
                _scrcomp = get_scr_components(item)
                if _scrcomp.get('scheme', '') in ['https', 'http', 'ftp']:
                    _src = _scrcomp.get('src', '')
                    _dfn = _scrcomp.get('options', {}).get(
                        'downloadfilename', '')

                    if _pv not in _src:
                        if _dfn and _pv in _dfn:
                            continue
                        res += self.finding(i.Origin, i.InFileLine)
        return res
 def __analyse(self, item, _input, _index):
     _url = get_scr_components(_input)
     res = []
     if 'scheme' not in _url:
         return res  # pragma: no cover
     # 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(
             item.Origin, item.InFileLine + _index,
             'Fetcher \'{a}\' is not known'.format(a=_url['scheme']))
     else:
         for k, v in _url['options'].items():
             if _url['scheme'] not in self._valid_options:
                 continue  # pragma: no cover
             if k == 'type' and v == 'kmeta':
                 continue  # linux-yocto uses this option to indicate kernel metadata sources
             if k not in self._valid_options[
                     _url['scheme']] + self._general_options:
                 res += self.finding(
                     item.Origin, item.InFileLine + _index,
                     'Option \'{a}\' is not known with this fetcher type'.
                     format(a=k))
         for opt in self._required_might_options.get(_url['scheme'], []):
             if opt not in _url['options']:
                 res += self.finding(
                     item.Origin, item.InFileLine + _index,
                     'Fetcher \'{fetcher}\' might require option \'{option}\' to be set'
                     .format(fetcher=_url['scheme'], option=opt))
         for key, val in self._required_unless_options.get(
                 _url['scheme'], {}).items():
             if key not in _url['options'] and not any(x in _url['options']
                                                       for x in val):
                 res += self.finding(
                     item.Origin, item.InFileLine + _index,
                     'Fetcher \'{fetcher}\' requires option \'{option}\' or any of \'{other}\' to be set'
                     .format(fetcher=_url['scheme'],
                             option=key,
                             other=','.join(val)))
     return res
Beispiel #16
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
Beispiel #17
0
    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