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:
parent
8af0aeea46
commit
dce3d1f4a7
2 changed files with 93 additions and 20 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue