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
}