github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/pkg/cataloger/deb/parse_dpkg_info_files.go (about)

     1  package deb
     2  
     3  import (
     4  	"bufio"
     5  	"io"
     6  	"strings"
     7  
     8  	"github.com/anchore/syft/syft/file"
     9  	"github.com/anchore/syft/syft/pkg"
    10  )
    11  
    12  func parseDpkgMD5Info(reader io.Reader) (findings []pkg.DpkgFileRecord) {
    13  	scanner := bufio.NewScanner(reader)
    14  
    15  	for scanner.Scan() {
    16  		line := scanner.Text()
    17  		fields := strings.SplitN(line, " ", 2)
    18  		if len(fields) == 2 {
    19  			path := strings.TrimSpace(fields[1])
    20  			if !strings.HasPrefix(path, "/") {
    21  				path = "/" + path
    22  			}
    23  			findings = append(findings, pkg.DpkgFileRecord{
    24  				Path: path,
    25  				Digest: &file.Digest{
    26  					Algorithm: "md5",
    27  					Value:     strings.TrimSpace(fields[0]),
    28  				},
    29  			})
    30  		}
    31  	}
    32  	return findings
    33  }
    34  
    35  func parseDpkgConffileInfo(reader io.Reader) (findings []pkg.DpkgFileRecord) {
    36  	scanner := bufio.NewScanner(reader)
    37  
    38  	for scanner.Scan() {
    39  		line := strings.Trim(scanner.Text(), " \n")
    40  		fields := strings.SplitN(line, " ", 2)
    41  
    42  		if line == "" {
    43  			continue
    44  		}
    45  
    46  		var path string
    47  		if len(fields) >= 1 {
    48  			path = strings.TrimSpace(fields[0])
    49  			if !strings.HasPrefix(path, "/") {
    50  				path = "/" + path
    51  			}
    52  		}
    53  
    54  		var digest *file.Digest
    55  		if len(fields) >= 2 {
    56  			digest = &file.Digest{
    57  				Algorithm: "md5",
    58  				Value:     strings.TrimSpace(fields[1]),
    59  			}
    60  		}
    61  
    62  		if path != "" {
    63  			record := pkg.DpkgFileRecord{
    64  				Path:         path,
    65  				IsConfigFile: true,
    66  			}
    67  			if digest != nil {
    68  				record.Digest = digest
    69  			}
    70  			findings = append(findings, record)
    71  		}
    72  	}
    73  	return findings
    74  }