mirror of
https://github.com/anchore/syft.git
synced 2026-10-30 14:02:26 +01:00
This PR adds DependencyOf relationships when ELF packages have been discovered by the binary cataloger. The discovered file.Executable type has a []ImportedLibraries that's read from the file when discovered by syft. By mapping these imported libraries back to the package collection, syft is able to create relationships showing which packages are dependencies of other packages by just reading metadata from the ELF executable. --------- Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> Signed-off-by: Brian Ebarb <ebarb.brian@sers.noreply.github.com> Co-authored-by: Alex Goodman <wagoodman@users.noreply.github.com>
42 lines
1.2 KiB
Go
42 lines
1.2 KiB
Go
package file
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/anchore/syft/internal/log"
|
|
"github.com/anchore/syft/syft/artifact"
|
|
)
|
|
|
|
// Coordinates contains the minimal information needed to describe how to find a file within any possible source object (e.g. image and directory sources)
|
|
type Coordinates struct {
|
|
RealPath string `json:"path" cyclonedx:"path"` // The path where all path ancestors have no hardlinks / symlinks
|
|
FileSystemID string `json:"layerID,omitempty" cyclonedx:"layerID"` // An ID representing the filesystem. For container images, this is a layer digest. For directories or a root filesystem, this is blank.
|
|
}
|
|
|
|
func NewCoordinates(realPath, fsID string) Coordinates {
|
|
return Coordinates{
|
|
RealPath: realPath,
|
|
FileSystemID: fsID,
|
|
}
|
|
}
|
|
|
|
func (c Coordinates) ID() artifact.ID {
|
|
f, err := artifact.IDByHash(c)
|
|
if err != nil {
|
|
// TODO: what to do in this case?
|
|
log.Warnf("unable to get fingerprint of location coordinate=%+v: %+v", c, err)
|
|
return ""
|
|
}
|
|
|
|
return f
|
|
}
|
|
|
|
func (c Coordinates) String() string {
|
|
str := fmt.Sprintf("RealPath=%q", c.RealPath)
|
|
|
|
if c.FileSystemID != "" {
|
|
str += fmt.Sprintf(" Layer=%q", c.FileSystemID)
|
|
}
|
|
return fmt.Sprintf("Location<%s>", str)
|
|
}
|