]> git.proxmox.com Git - pve-lxc-syscalld.git/blame - src/main.rs
some more syscall argument helpers
[pve-lxc-syscalld.git] / src / main.rs
CommitLineData
9cffeac4
WB
1#![feature(async_await)]
2
571dbe03 3use std::ffi::OsString;
9cffeac4
WB
4use std::io;
5
6use failure::{bail, format_err, Error};
7use nix::sys::socket::SockAddr;
8
42f25756 9pub mod apparmor;
e420f6f9
WB
10pub mod client;
11pub mod fork;
9cffeac4 12pub mod lxcseccomp;
e420f6f9
WB
13pub mod nsfd;
14pub mod pidfd;
9cffeac4
WB
15pub mod seccomp;
16pub mod socket;
e420f6f9 17pub mod sys_mknod;
c95be5f6 18pub mod syscall;
9cffeac4
WB
19pub mod tools;
20
e420f6f9
WB
21use socket::SeqPacketListener;
22
9cffeac4
WB
23fn main() {
24 if let Err(err) = run() {
25 eprintln!("error: {}", err);
26 std::process::exit(1);
27 }
28}
29
30fn run() -> Result<(), Error> {
571dbe03
WB
31 let socket_path = std::env::args_os()
32 .skip(1)
33 .next()
34 .ok_or_else(|| format_err!("missing parameter: socket path to listen on"))?;
9cffeac4 35
571dbe03 36 match std::fs::remove_file(&socket_path) {
9cffeac4
WB
37 Ok(_) => (),
38 Err(ref e) if e.kind() == io::ErrorKind::NotFound => (), // Ok
39 Err(e) => bail!("failed to remove previous socket: {}", e),
40 }
41
571dbe03 42 tokio::run(async_run(socket_path));
9cffeac4
WB
43
44 Ok(())
45}
46
571dbe03
WB
47async fn async_run(socket_path: OsString) {
48 if let Err(err) = async_run_do(socket_path).await {
9cffeac4
WB
49 eprintln!("error accepting clients, bailing out: {}", err);
50 }
51}
52
571dbe03
WB
53async fn async_run_do(socket_path: OsString) -> Result<(), Error> {
54 let address =
55 SockAddr::new_unix(socket_path.as_os_str()).expect("cannot create struct sockaddr_un?");
9cffeac4
WB
56
57 let mut listener = SeqPacketListener::bind(&address)
58 .map_err(|e| format_err!("failed to create listening socket: {}", e))?;
59 loop {
60 let client = listener.accept().await?;
e420f6f9
WB
61 let client = client::Client::new(client);
62 tokio::spawn(client.main());
9cffeac4
WB
63 }
64}