// GetControlFileFromDsc reads control file from dsc package func GetControlFileFromDsc(dscFile string, verifier utils.Verifier) (Stanza, error) { file, err := os.Open(dscFile) if err != nil { return nil, err } defer file.Close() isClearSigned, err := verifier.IsClearSigned(file) file.Seek(0, 0) if err != nil { return nil, err } var text *os.File if isClearSigned { text, err = verifier.ExtractClearsigned(file) if err != nil { return nil, err } defer text.Close() } else { text = file } reader := NewControlFileReader(text) stanza, err := reader.ReadStanza(false) if err != nil { return nil, err } return stanza, nil }
// VerifyAndParse does optional signature verification and parses changes files func (c *Changes) VerifyAndParse(acceptUnsigned, ignoreSignature bool, verifier utils.Verifier) error { input, err := os.Open(filepath.Join(c.TempDir, c.ChangesName)) if err != nil { return err } defer input.Close() isClearSigned, err := verifier.IsClearSigned(input) if err != nil { return err } input.Seek(0, 0) if !isClearSigned && !acceptUnsigned { return fmt.Errorf(".changes file is not signed and unsigned processing hasn't been enabled") } if isClearSigned && !ignoreSignature { keyInfo, err := verifier.VerifyClearsigned(input, false) if err != nil { return err } input.Seek(0, 0) c.SignatureKeys = keyInfo.GoodKeys } var text *os.File if isClearSigned { text, err = verifier.ExtractClearsigned(input) if err != nil { return err } defer text.Close() } else { text = input } reader := NewControlFileReader(text) c.Stanza, err = reader.ReadStanza() if err != nil { return err } c.Distribution = c.Stanza["Distribution"] c.Changes = c.Stanza["Changes"] c.Source = c.Stanza["Source"] c.Binary = strings.Fields(c.Stanza["Binary"]) c.Architectures = strings.Fields(c.Stanza["Architecture"]) c.Files, err = c.Files.ParseSumFields(c.Stanza) if err != nil { return err } return nil }