fstat_hook.rs (1131B) - raw


      1 
      2 use std::fs;
      3 
      4 use nix::libc;
      5 
      6 use crate::{config::{self, native_config}, def_hook, dobby_hook_sym};
      7 
      8 def_hook!(
      9     fstat_hook,
     10     i32, 
     11     |fd: i32, statbuf: *mut libc::stat| {
     12         if let Ok(link) = fs::read_link("/proc/self/fd/".to_owned() + &fd.to_string()) {
     13             if let Some(filename) = link.file_name().map(|t| t.to_string_lossy()) {
     14                 let config = native_config();
     15                 if config.disable_metrics && filename.contains("files/blizzardv2/queues") {
     16                     if libc::unlink((filename.to_owned() + "\0").as_ptr()) == -1 {
     17                         warn!("Failed to unlink {}", filename);
     18                     }
     19                     return -1;
     20                 }
     21     
     22                 if config.disable_bitmoji && filename.contains("com.snap.file_manager_4_SCContent") {
     23                     return -1;
     24                 }
     25             }
     26         }
     27 
     28         fstat_hook_original.unwrap()(fd, statbuf)
     29     }
     30 );
     31 
     32 pub fn init() {
     33     let config = config::native_config();
     34     if config.disable_metrics || config.disable_bitmoji {
     35         dobby_hook_sym!("libc.so", "fstat", fstat_hook);
     36     }
     37 }