23 lines
648 B
Rust
23 lines
648 B
Rust
use rust_util::{opt_result, simple_error, XResult};
|
|
use std::ffi::OsStr;
|
|
use std::process::Command;
|
|
|
|
const CMD_IPSET: &str = "ipset";
|
|
|
|
fn execute_ipset<I, S>(args: I) -> XResult<(Vec<u8>, Vec<u8>)>
|
|
where
|
|
I: IntoIterator<Item = S>,
|
|
S: AsRef<OsStr>,
|
|
{
|
|
let mut cmd_ipset = Command::new(CMD_IPSET);
|
|
cmd_ipset.args(args);
|
|
let cmd_output = opt_result!(cmd_ipset.output(), "Execute ipset with failed: {}");
|
|
if !cmd_output.status.success() {
|
|
return simple_error!(
|
|
"Execute ipset not failed, exit code: {:?}",
|
|
cmd_output.status.code()
|
|
);
|
|
}
|
|
Ok((cmd_output.stdout, cmd_output.stderr))
|
|
}
|