diff --git a/rust/src/detect/datasets.rs b/rust/src/detect/datasets.rs
index 7baa914632..66fa9c2855 100644
--- a/rust/src/detect/datasets.rs
+++ b/rust/src/detect/datasets.rs
@@ -278,14 +278,22 @@ fn read_or_create_file
(filename: P, fmode: &str) -> io::Result,
{
- let file: File = if fmode == "r" {
- File::open(filename)?
+ let mut opts = OpenOptions::new();
+ if fmode == "r" {
+ opts.read(true);
} else {
- OpenOptions::new()
- .append(true)
- .create(true)
- .read(true)
- .open(filename)?
+ opts.append(true).create(true).read(true);
};
+ #[cfg(unix)]
+ {
+ use std::os::unix::fs::OpenOptionsExt;
+ opts.custom_flags(libc::O_NONBLOCK);
+ }
+ let file = opts.open(filename)?;
+ let metadata = file.metadata()?;
+ if !metadata.file_type().is_file() {
+ return Err(io::Error::other("Can only read from a regular file"));
+ }
+
Ok(io::BufReader::new(file).lines())
}