mirror of
https://github.com/Cyrix126/gupaxx.git
synced 2025-03-29 18:49:02 +00:00
fix: sudo less for user permitted in visudo, reduce time of first xmrig output by 3 seconds
This commit is contained in:
parent
0ecfbd4ce4
commit
498fb82bfb
2 changed files with 35 additions and 19 deletions
|
@ -463,9 +463,6 @@ impl Helper {
|
|||
StartOptionsMode::Simple if state.local_node || override_to_local_node => {
|
||||
// use the local node
|
||||
// Build the p2pool argument
|
||||
// dbg!("Simple mode/local node");
|
||||
// dbg!(local_node_rpc);
|
||||
// dbg!(local_node_zmq);
|
||||
args.push("--wallet".to_string());
|
||||
args.push(state.address.clone()); // Wallet address
|
||||
args.push("--host".to_string());
|
||||
|
|
|
@ -56,6 +56,11 @@ impl Helper {
|
|||
let mut i = 0;
|
||||
while let Some(Ok(line)) = stdout.next() {
|
||||
let line = strip_ansi_escapes::strip_str(line);
|
||||
// skip until the first line of xmrig is appearing, hiding input for sudo
|
||||
#[cfg(target_family = "unix")]
|
||||
if i == 0 && !line.contains("ABOUT") {
|
||||
continue;
|
||||
}
|
||||
if let Err(e) = writeln!(output_parse.lock().unwrap(), "{}", line) {
|
||||
error!("XMRig PTY Parse | Output error: {}", e);
|
||||
}
|
||||
|
@ -139,6 +144,7 @@ impl Helper {
|
|||
.stdin(Stdio::piped())
|
||||
.spawn()
|
||||
.unwrap();
|
||||
// only insert the password if the user is required to
|
||||
if Self::password_needed() {
|
||||
// Write the [sudo] password to STDIN.
|
||||
let mut stdin = child.stdin.take().unwrap();
|
||||
|
@ -154,11 +160,26 @@ impl Helper {
|
|||
|
||||
#[cold]
|
||||
#[inline(never)]
|
||||
/// if the user has his visudo configured to not ask a password using sudo, this will return false
|
||||
pub fn password_needed() -> bool {
|
||||
// Make sure sudo timestamp is reset
|
||||
let reset = std::process::Command::new("sudo")
|
||||
.arg("--reset-timestamp")
|
||||
.stdout(Stdio::piped())
|
||||
.stderr(Stdio::piped())
|
||||
.stdin(Stdio::piped())
|
||||
.status();
|
||||
match reset {
|
||||
Ok(_) => {}
|
||||
Err(_) => return true,
|
||||
};
|
||||
let cmd = std::process::Command::new("sudo")
|
||||
.args(["-n", "true"])
|
||||
.spawn();
|
||||
cmd.is_err()
|
||||
.status();
|
||||
if cmd.is_ok_and(|s| s.success()) {
|
||||
return false;
|
||||
}
|
||||
true
|
||||
}
|
||||
#[cold]
|
||||
#[inline(never)]
|
||||
|
@ -483,8 +504,12 @@ impl Helper {
|
|||
// to emptiness so that it doesn't show up in the output.
|
||||
if cfg!(unix) {
|
||||
args.splice(..0, vec![path.display().to_string()]);
|
||||
args.splice(..0, vec![r#"--"#.to_string()]);
|
||||
args.splice(..0, vec![r#"--prompt="#.to_string()]);
|
||||
// do not use prompt when sudo is not needed
|
||||
// success is still to false if sudo has not been used to start xmrig
|
||||
if sudo.lock().unwrap().success {
|
||||
args.splice(..0, vec![r#"--"#.to_string()]);
|
||||
args.splice(..0, vec![r#"--prompt="#.to_string()]);
|
||||
}
|
||||
}
|
||||
// 1a. Create PTY
|
||||
debug!("XMRig | Creating PTY...");
|
||||
|
@ -519,19 +544,20 @@ impl Helper {
|
|||
drop(pair.slave);
|
||||
|
||||
let mut stdin = pair.master.take_writer().unwrap();
|
||||
|
||||
// 2. Input [sudo] pass, wipe, then drop.
|
||||
if cfg!(unix) && Self::password_needed() {
|
||||
if cfg!(unix) && sudo.lock().unwrap().success {
|
||||
debug!("XMRig | Inputting [sudo] and wiping...");
|
||||
if let Err(e) = writeln!(stdin, "{}", sudo.lock().unwrap().pass) {
|
||||
error!("XMRig | Sudo STDIN error: {}", e);
|
||||
};
|
||||
SudoState::wipe(&sudo);
|
||||
SudoState::reset(&sudo);
|
||||
|
||||
// b) Reset GUI STDOUT just in case.
|
||||
debug!("XMRig | Clearing GUI output...");
|
||||
gui_api.lock().unwrap().output.clear();
|
||||
info!("sudo wipe and output cleared");
|
||||
}
|
||||
// b) Reset GUI STDOUT just in case.
|
||||
debug!("XMRig | Clearing GUI output...");
|
||||
gui_api.lock().unwrap().output.clear();
|
||||
|
||||
// 3. Set process state
|
||||
debug!("XMRig | Setting process state...");
|
||||
|
@ -541,13 +567,6 @@ impl Helper {
|
|||
lock.start = Instant::now();
|
||||
drop(lock);
|
||||
|
||||
// // 4. Spawn PTY read thread
|
||||
// debug!("XMRig | Spawning PTY read thread...");
|
||||
// let output_parse = Arc::clone(&process.lock().unwrap().output_parse);
|
||||
// let output_pub = Arc::clone(&process.lock().unwrap().output_pub);
|
||||
// spawn(enclose!((pub_api_xvb) async move {
|
||||
// Self::read_pty_xmrig(output_parse, output_pub, reader, process_xvb, &pub_api_xvb).await;
|
||||
// }));
|
||||
let output_parse = Arc::clone(&process.lock().unwrap().output_parse);
|
||||
let output_pub = Arc::clone(&process.lock().unwrap().output_pub);
|
||||
|
||||
|
|
Loading…
Reference in a new issue