]>
Commit | Line | Data |
---|---|---|
9aa2a15a | 1 | use std::future::Future; |
8dd26985 | 2 | use std::io as StdIo; |
9cffeac4 WB |
3 | |
4 | use failure::{bail, format_err, Error}; | |
5 | use nix::sys::socket::SockAddr; | |
6 | ||
9aa2a15a WB |
7 | #[macro_use] |
8 | mod macros; | |
9 | ||
42f25756 | 10 | pub mod apparmor; |
738dbfbe | 11 | pub mod capability; |
e420f6f9 | 12 | pub mod client; |
d1b1deab | 13 | pub mod error; |
e420f6f9 | 14 | pub mod fork; |
8dd26985 | 15 | pub mod io; |
9cffeac4 | 16 | pub mod lxcseccomp; |
e420f6f9 | 17 | pub mod nsfd; |
a22aece0 | 18 | pub mod poll_fn; |
3bbd1db0 | 19 | pub mod process; |
9cffeac4 | 20 | pub mod seccomp; |
e420f6f9 | 21 | pub mod sys_mknod; |
3e69a521 | 22 | pub mod sys_quotactl; |
c95be5f6 | 23 | pub mod syscall; |
9cffeac4 WB |
24 | pub mod tools; |
25 | ||
8dd26985 | 26 | use crate::io::seq_packet::SeqPacketListener; |
9aa2a15a | 27 | |
9aa2a15a | 28 | pub fn spawn(fut: impl Future<Output = ()> + Send + 'static) { |
5bd0c562 | 29 | tokio::spawn(fut); |
9aa2a15a WB |
30 | } |
31 | ||
32 | fn main() { | |
5bd0c562 | 33 | let mut rt = tokio::runtime::Runtime::new().expect("failed to spawn tokio runtime"); |
e420f6f9 | 34 | |
5bd0c562 | 35 | if let Err(err) = rt.block_on(do_main()) { |
9cffeac4 WB |
36 | eprintln!("error: {}", err); |
37 | std::process::exit(1); | |
38 | } | |
39 | } | |
40 | ||
a563caf2 | 41 | async fn do_main() -> Result<(), Error> { |
571dbe03 | 42 | let socket_path = std::env::args_os() |
9486338a | 43 | .nth(1) |
571dbe03 | 44 | .ok_or_else(|| format_err!("missing parameter: socket path to listen on"))?; |
9cffeac4 | 45 | |
571dbe03 | 46 | match std::fs::remove_file(&socket_path) { |
9cffeac4 | 47 | Ok(_) => (), |
8dd26985 | 48 | Err(ref e) if e.kind() == StdIo::ErrorKind::NotFound => (), // Ok |
9cffeac4 WB |
49 | Err(e) => bail!("failed to remove previous socket: {}", e), |
50 | } | |
51 | ||
571dbe03 WB |
52 | let address = |
53 | SockAddr::new_unix(socket_path.as_os_str()).expect("cannot create struct sockaddr_un?"); | |
9cffeac4 | 54 | |
8dd26985 | 55 | let mut listener = SeqPacketListener::bind(&address) |
9cffeac4 WB |
56 | .map_err(|e| format_err!("failed to create listening socket: {}", e))?; |
57 | loop { | |
58 | let client = listener.accept().await?; | |
e420f6f9 | 59 | let client = client::Client::new(client); |
9aa2a15a | 60 | spawn(client.main()); |
9cffeac4 WB |
61 | } |
62 | } |