{"record":{"id":"28466816d094330c","repo":"crowdsecurity/crowdsec","slug":"no-filename-or-filenames-configuration-provided","errorCode":null,"errorMessage":"no filename or filenames configuration provided","messagePattern":"no filename or filenames configuration provided","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/acquisition/modules/file/config.go","lineNumber":52,"sourceCode":"\nfunc (s *Source) UnmarshalConfig(yamlConfig []byte) error {\n\ts.config = Configuration{}\n\n\terr := yaml.UnmarshalWithOptions(yamlConfig, &s.config, yaml.Strict())\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot parse FileAcquisition configuration: %s\", yaml.FormatError(err, false, false))\n\t}\n\n\tif s.logger != nil {\n\t\ts.logger.Tracef(\"FileAcquisition configuration: %+v\", s.config)\n\t}\n\n\tif s.config.Filename != \"\" {\n\t\ts.config.Filenames = append(s.config.Filenames, s.config.Filename)\n\t}\n\n\tif len(s.config.Filenames) == 0 {\n\t\treturn errors.New(\"no filename or filenames configuration provided\")\n\t}\n\n\tif s.config.Mode == \"\" {\n\t\ts.config.Mode = configuration.TAIL_MODE\n\t}\n\n\tif s.config.Mode != configuration.CAT_MODE && s.config.Mode != configuration.TAIL_MODE {\n\t\treturn fmt.Errorf(\"unsupported mode %s for file source\", s.config.Mode)\n\t}\n\n\tfor _, exclude := range s.config.ExcludeRegexps {\n\t\tre, err := regexp.Compile(exclude)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"could not compile regexp %s: %w\", exclude, err)\n\t\t}\n\n\t\ts.exclude_regexps = append(s.exclude_regexps, re)\n\t}","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/crowdsecurity/crowdsec/blob/909b5157986a2b2c2163300fdaef5ed01289f7d2/pkg/acquisition/modules/file/config.go#L34-L70","documentation":"Validation guard in the file datasource's UnmarshalConfig: after strict YAML parsing, neither filename nor filenames yields any entry (a lone filename is folded into Filenames first). A file source with nothing to read is a configuration mistake, so it is rejected immediately.","triggerScenarios":"Thrown at pkg/acquisition/modules/file/config.go:52 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a filename: /var/log/foo.log entry or a filenames: [...] list to the datasource stanza","Use glob patterns in filenames for rotation-friendly matching","Remove the empty datasource stanza if it is leftover"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"909b5157986a2b2c2163300fdaef5ed01289f7d2","analyzedAt":"2026-09-06T12:27:26.012Z","contentChangedAt":"2026-09-06T12:27:26.012Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}