func run()

in auparse/mk_audit_msg_types.go [246:318]


func run() error {
	tmp, err := os.MkdirTemp("", "mk_audit_msg_types")
	if err != nil {
		return err
	}
	defer os.RemoveAll(tmp)

	// Download header files from the Linux audit project.
	var files []string
	for _, url := range headers {
		f, err := DownloadFile(url, tmp)
		if err != nil {
			return fmt.Errorf("download failed for %v: %v", url, err)
		}
		files = append(files, f)
	}

	if err := os.Chdir(tmp); err != nil {
		return err
	}

	recordTypeToStringName, err := readMessageTypeTable()
	if err != nil {
		return err
	}

	recordTypeToNum, err := readRecordTypes()
	if err != nil {
		return err
	}

	numToRecordType := map[int]string{}
	for recordType := range recordTypeToStringName {
		num, found := recordTypeToNum[recordType]
		if !found {
			return fmt.Errorf("missing definition of %v", recordType)
		}
		numToRecordType[num] = recordType
	}

	for recordType, num := range recordTypeToNum {
		// Do not replace existing mappings.
		if _, found := numToRecordType[num]; found {
			continue
		}

		numToRecordType[num] = recordType

		matches := nameExtractorRegex.FindStringSubmatch(recordType)
		if len(matches) == 2 {
			recordTypeToStringName[recordType] = matches[1]
		}
	}

	// Create output file.
	f, err := os.Create(flagOut)
	if err != nil {
		return err
	}
	defer f.Close()

	// Evaluate template.
	r := TemplateParams{
		Command:     filepath.Base(os.Args[0]),
		RecordTypes: numToRecordType,
		RecordNames: recordTypeToStringName,
	}
	if err := tmpl.Execute(f, r); err != nil {
		return err
	}

	return nil
}