🔒️ Move away from std::env::set_var, which is unsound

This commit is contained in:
Lucy 2022-06-24 14:46:14 -04:00
parent fb1a832916
commit c84857ae9b
No known key found for this signature in database
GPG key ID: EBC517FAD666BBF1
4 changed files with 12 additions and 6 deletions

View file

@ -6,7 +6,7 @@ use tokio_util::sync::CancellationToken;
pub async fn run_compositor(token: CancellationToken, wayland_socket_tx: oneshot::Sender<String>) { pub async fn run_compositor(token: CancellationToken, wayland_socket_tx: oneshot::Sender<String>) {
let mut wayland_socket_tx = Some(wayland_socket_tx); let mut wayland_socket_tx = Some(wayland_socket_tx);
let (tx, mut rx) = unbounded_channel::<ProcessEvent>(); let (tx, mut rx) = unbounded_channel::<ProcessEvent>();
ProcessHandler::new(tx, &token).run("cosmic-comp", vec![]); ProcessHandler::new(tx, &token).run("cosmic-comp", vec![], vec![]);
let span = info_span!("cosmic-comp"); let span = info_span!("cosmic-comp");
let _enter = span.enter(); let _enter = span.enter();
while let Some(event) = rx.recv().await { while let Some(event) = rx.recv().await {

View file

@ -37,9 +37,11 @@ async fn main() -> Result<()> {
.await .await
.expect("failed to get WAYLAND_SOCKET"); .expect("failed to get WAYLAND_SOCKET");
info!("got WAYLAND_SOCKET: {}", wayland_socket); info!("got WAYLAND_SOCKET: {}", wayland_socket);
std::env::set_var("WAYLAND_SOCKET", wayland_socket);
tokio::spawn(panel::run_panel(token.child_token())); tokio::spawn(panel::run_panel(
token.child_token(),
wayland_socket.clone(),
));
let mut signals = Signals::new(vec![libc::SIGTERM, libc::SIGINT]).unwrap(); let mut signals = Signals::new(vec![libc::SIGTERM, libc::SIGINT]).unwrap();
while let Some(signal) = signals.next().await { while let Some(signal) = signals.next().await {

View file

@ -3,9 +3,12 @@ use crate::process::{ProcessEvent, ProcessHandler};
use tokio::sync::mpsc::unbounded_channel; use tokio::sync::mpsc::unbounded_channel;
use tokio_util::sync::CancellationToken; use tokio_util::sync::CancellationToken;
pub async fn run_panel(token: CancellationToken) { pub async fn run_panel(token: CancellationToken, wayland_socket: String) {
let (tx, mut rx) = unbounded_channel::<ProcessEvent>(); let (tx, mut rx) = unbounded_channel::<ProcessEvent>();
ProcessHandler::new(tx, &token).run("cosmic-panel", vec![]); ProcessHandler::new(tx, &token).run("cosmic-panel", vec![], vec![(
"WAYLAND_SOCKET".into(),
wayland_socket,
)]);
let span = info_span!("cosmic-panel"); let span = info_span!("cosmic-panel");
let _enter = span.enter(); let _enter = span.enter();
while let Some(event) = rx.recv().await { while let Some(event) = rx.recv().await {

View file

@ -27,7 +27,7 @@ impl ProcessHandler {
} }
} }
pub fn run(self, executable: impl ToString, args: Vec<String>) { pub fn run(self, executable: impl ToString, args: Vec<String>, vars: Vec<(String, String)>) {
let executable = executable.to_string(); let executable = executable.to_string();
tokio::spawn(async move { tokio::spawn(async move {
let mut child = match Command::new(&executable) let mut child = match Command::new(&executable)
@ -35,6 +35,7 @@ impl ProcessHandler {
.stdin(Stdio::null()) .stdin(Stdio::null())
.stdout(Stdio::piped()) .stdout(Stdio::piped())
.stderr(Stdio::piped()) .stderr(Stdio::piped())
.envs(vars)
.kill_on_drop(true) .kill_on_drop(true)
.spawn() .spawn()
{ {