1
0
Fork 0
mirror of https://github.com/gocsaf/csaf.git synced 2025-12-22 18:15:42 +01:00

load advisories via directory_urls

This commit is contained in:
Sascha L. Teichmann 2022-08-01 06:46:05 +02:00
parent 8af0aeea46
commit dce3d1f4a7
2 changed files with 93 additions and 20 deletions

View file

@ -877,6 +877,16 @@ func (p *processor) processROLIEFeeds(domain string, feeds [][]csaf.Feed) error
return nil
}
// empty checks if list of strings contains at least one none empty string.
func empty(arr []string) bool {
for _, s := range arr {
if s != "" {
return false
}
}
return true
}
func (p *processor) checkCSAFs(domain string) error {
// Check for ROLIE
rolie, err := p.expr.Eval("$.distributions[*].rolie.feeds", p.pmd)
@ -898,22 +908,46 @@ func (p *processor) checkCSAFs(domain string) error {
}
}
// No rolie feeds
pmdURL, err := url.Parse(p.pmdURL)
// No rolie feeds -> try directory_urls.
directoryURLs, err := p.expr.Eval(
"$.distributions[*].directory_url", p.pmd)
var dirURLs []string
if err != nil {
return err
}
base, err := util.BaseURL(pmdURL)
if err != nil {
return err
p.badProviderMetadata.warn("extracting directory URLs failed: %v.", err)
} else {
var ok bool
dirURLs, ok = directoryURLs.([]string)
if !ok {
p.badProviderMetadata.warn("directory URLs are not strings.")
}
}
if err := p.checkIndex(base, indexMask); err != nil && err != errContinue {
return err
// Not found -> fall back to PMD url
if empty(dirURLs) {
pmdURL, err := url.Parse(p.pmdURL)
if err != nil {
return err
}
baseURL, err := util.BaseURL(pmdURL)
if err != nil {
return err
}
dirURLs = []string{baseURL}
}
if err := p.checkChanges(base, changesMask); err != nil && err != errContinue {
return err
for _, base := range dirURLs {
if base == "" {
continue
}
if err := p.checkIndex(base, indexMask); err != nil && err != errContinue {
return err
}
if err := p.checkChanges(base, changesMask); err != nil && err != errContinue {
return err
}
}
return nil