mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-13 10:38:08 +00:00
optionally ignore dotfiles in syncdir monitors (#741)
This commit is contained in:
@ -80,7 +80,7 @@ impl GeneratorTask {
|
|||||||
self.config.ensemble_sync_delay,
|
self.config.ensemble_sync_delay,
|
||||||
);
|
);
|
||||||
|
|
||||||
let crash_dir_monitor = self.config.crashes.monitor_results(new_result);
|
let crash_dir_monitor = self.config.crashes.monitor_results(new_result, false);
|
||||||
|
|
||||||
let fuzzer = self.fuzzing_loop(hb_client);
|
let fuzzer = self.fuzzing_loop(hb_client);
|
||||||
|
|
||||||
|
@ -91,8 +91,8 @@ impl LibFuzzerFuzzTask {
|
|||||||
|
|
||||||
// To be scheduled.
|
// To be scheduled.
|
||||||
let resync = self.continuous_sync_inputs();
|
let resync = self.continuous_sync_inputs();
|
||||||
let new_inputs = self.config.inputs.monitor_results(new_coverage);
|
let new_inputs = self.config.inputs.monitor_results(new_coverage, true);
|
||||||
let new_crashes = self.config.crashes.monitor_results(new_result);
|
let new_crashes = self.config.crashes.monitor_results(new_result, true);
|
||||||
|
|
||||||
let (stats_sender, stats_receiver) = mpsc::unbounded_channel();
|
let (stats_sender, stats_receiver) = mpsc::unbounded_channel();
|
||||||
let report_stats = report_runtime_stats(self.workers() as usize, stats_receiver, hb_client);
|
let report_stats = report_runtime_stats(self.workers() as usize, stats_receiver, hb_client);
|
||||||
|
@ -71,7 +71,7 @@ pub async fn spawn(config: SupervisorConfig) -> Result<(), Error> {
|
|||||||
url: config.crashes.url.clone(),
|
url: config.crashes.url.clone(),
|
||||||
};
|
};
|
||||||
crashes.init().await?;
|
crashes.init().await?;
|
||||||
let monitor_crashes = crashes.monitor_results(new_result);
|
let monitor_crashes = crashes.monitor_results(new_result, false);
|
||||||
|
|
||||||
// setup reports
|
// setup reports
|
||||||
let reports_dir = tempdir()?;
|
let reports_dir = tempdir()?;
|
||||||
@ -111,7 +111,7 @@ pub async fn spawn(config: SupervisorConfig) -> Result<(), Error> {
|
|||||||
delay_with_jitter(delay).await;
|
delay_with_jitter(delay).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let monitor_inputs = inputs.monitor_results(new_coverage);
|
let monitor_inputs = inputs.monitor_results(new_coverage, false);
|
||||||
let continuous_sync_task = inputs.continuous_sync(Pull, config.ensemble_sync_delay);
|
let continuous_sync_task = inputs.continuous_sync(Pull, config.ensemble_sync_delay);
|
||||||
|
|
||||||
let process = start_supervisor(
|
let process = start_supervisor(
|
||||||
|
@ -155,7 +155,7 @@ impl SyncedDir {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn file_monitor_event(&self, event: Event) -> Result<()> {
|
async fn file_monitor_event(&self, event: Event, ignore_dotfiles: bool) -> Result<()> {
|
||||||
debug!("monitoring {}", self.path.display());
|
debug!("monitoring {}", self.path.display());
|
||||||
let mut monitor = DirectoryMonitor::new(self.path.clone());
|
let mut monitor = DirectoryMonitor::new(self.path.clone());
|
||||||
monitor.start()?;
|
monitor.start()?;
|
||||||
@ -167,6 +167,10 @@ impl SyncedDir {
|
|||||||
let file_name = item
|
let file_name = item
|
||||||
.file_name()
|
.file_name()
|
||||||
.ok_or_else(|| anyhow!("invalid file path"))?;
|
.ok_or_else(|| anyhow!("invalid file path"))?;
|
||||||
|
if ignore_dotfiles && file_name.to_string_lossy().starts_with('.') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
event!(event.clone(); EventData::Path = file_name.to_string_lossy());
|
event!(event.clone(); EventData::Path = file_name.to_string_lossy());
|
||||||
let destination = path.join(file_name);
|
let destination = path.join(file_name);
|
||||||
if let Err(err) = fs::copy(&item, &destination).await {
|
if let Err(err) = fs::copy(&item, &destination).await {
|
||||||
@ -188,6 +192,12 @@ impl SyncedDir {
|
|||||||
let mut uploader = BlobUploader::new(self.url.url().clone());
|
let mut uploader = BlobUploader::new(self.url.url().clone());
|
||||||
|
|
||||||
while let Some(item) = monitor.next().await {
|
while let Some(item) = monitor.next().await {
|
||||||
|
let file_name = item
|
||||||
|
.file_name()
|
||||||
|
.ok_or_else(|| anyhow!("invalid file path"))?;
|
||||||
|
if ignore_dotfiles && file_name.to_string_lossy().starts_with('.') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
event!(event.clone(); EventData::Path = item.display().to_string());
|
event!(event.clone(); EventData::Path = item.display().to_string());
|
||||||
|
|
||||||
if let Err(err) = uploader.upload(item.clone()).await {
|
if let Err(err) = uploader.upload(item.clone()).await {
|
||||||
@ -221,7 +231,7 @@ impl SyncedDir {
|
|||||||
/// The intent of this is to support use cases where we usually want a directory
|
/// The intent of this is to support use cases where we usually want a directory
|
||||||
/// to be initialized, but a user-supplied binary, (such as AFL) logically owns
|
/// to be initialized, but a user-supplied binary, (such as AFL) logically owns
|
||||||
/// a directory, and may reset it.
|
/// a directory, and may reset it.
|
||||||
pub async fn monitor_results(&self, event: Event) -> Result<()> {
|
pub async fn monitor_results(&self, event: Event, ignore_dotfiles: bool) -> Result<()> {
|
||||||
loop {
|
loop {
|
||||||
debug!("waiting to monitor {}", self.path.display());
|
debug!("waiting to monitor {}", self.path.display());
|
||||||
|
|
||||||
@ -231,7 +241,8 @@ impl SyncedDir {
|
|||||||
}
|
}
|
||||||
|
|
||||||
debug!("starting monitor for {}", self.path.display());
|
debug!("starting monitor for {}", self.path.display());
|
||||||
self.file_monitor_event(event.clone()).await?;
|
self.file_monitor_event(event.clone(), ignore_dotfiles)
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user