From 453111f0e490653db37c0e09e3729164f7a10080 Mon Sep 17 00:00:00 2001 From: Gregor Reitzenstein Date: Tue, 28 Apr 2020 16:51:08 +0200 Subject: [PATCH] Update schema and remove old impl --- .gitignore | 1 + .gitmodules | 3 + Cargo.lock | 181 +++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 2 + schema | 1 + schema/api.capnp | 133 ---------------------------------- src/api.rs | 93 +----------------------- src/auth.rs | 113 ----------------------------- src/machine.rs | 124 -------------------------------- src/main.rs | 8 +-- 10 files changed, 191 insertions(+), 468 deletions(-) create mode 100644 .gitmodules create mode 160000 schema delete mode 100644 schema/api.capnp diff --git a/.gitignore b/.gitignore index 53eaa21..72ce2b3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target **/*.rs.bk +tags diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..ea4bf1b --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "schema"] + path = schema + url = ./schema diff --git a/Cargo.lock b/Cargo.lock index 3ce516e..694e066 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -107,6 +107,29 @@ name = "base64" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "bindgen" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cexpr 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "clang-sys 0.29.3 (registry+https://github.com/rust-lang/crates.io-index)", + "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", + "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "which 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "bitflags" version = "1.2.1" @@ -193,6 +216,19 @@ dependencies = [ "ttl_cache 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "cc" +version = "1.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cexpr" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "cfg-if" version = "0.1.10" @@ -208,6 +244,16 @@ dependencies = [ "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "clang-sys" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "clap" version = "2.33.0" @@ -323,6 +369,7 @@ dependencies = [ "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures-signals 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "rsasl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", "signal-hook 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "slog 2.5.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -365,6 +412,18 @@ dependencies = [ "hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "env_logger" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", + "humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "fnv" version = "1.0.6" @@ -500,6 +559,19 @@ dependencies = [ "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "gsasl-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bindgen 0.53.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "hashbrown" version = "0.6.3" @@ -517,6 +589,14 @@ dependencies = [ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "humantime" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "indexmap" version = "1.3.2" @@ -560,11 +640,25 @@ name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "lazycell" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "libc" version = "0.2.66" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "libloading" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "linked-hash-map" version = "0.5.2" @@ -653,6 +747,15 @@ dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "nom" +version = "5.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "num-integer" version = "0.1.42" @@ -708,6 +811,11 @@ dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "pin-project-lite" version = "0.1.4" @@ -746,6 +854,11 @@ dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "quote" version = "1.0.2" @@ -827,6 +940,15 @@ name = "rhai" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "rsasl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gsasl-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rust-argon2" version = "0.7.0" @@ -838,6 +960,11 @@ dependencies = [ "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "rustc_version" version = "0.2.3" @@ -882,6 +1009,11 @@ dependencies = [ "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "shlex" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "signal-hook" version = "0.1.13" @@ -973,6 +1105,14 @@ dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "termcolor" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "textwrap" version = "0.11.0" @@ -1085,11 +1225,24 @@ name = "vec_map" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "version_check" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "which" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "winapi" version = "0.2.8" @@ -1114,6 +1267,14 @@ name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -1142,6 +1303,7 @@ dependencies = [ "checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" "checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" "checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" +"checksum bindgen 0.53.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6bb26d6a69a335b8cb0e7c7e9775cd5666611dc50a37177c3f2cedcfc040e8c8" "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" "checksum blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" "checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" @@ -1152,8 +1314,11 @@ dependencies = [ "checksum capnp-rpc 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0966e19b0ce4121b1353a79b6411c1b8d3c59a71684a4adabdf39683ad81742d" "checksum capnpc 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "805e848aeb68f9312f716f7dff14e55db726759f62085c7bdf471ceb43438eef" "checksum casbin 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d475cdf859ed26998d20d7c34356e2b2bcc327a9bc36b5207e7b0aabc5b7d241" +"checksum cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)" = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d" +"checksum cexpr 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" "checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01" +"checksum clang-sys 0.29.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a" "checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" "checksum const-random 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "2f1af9ac737b2dd2d577701e59fd09ba34822f6f2ebdb30a7647405d9e55e16a" @@ -1169,6 +1334,7 @@ dependencies = [ "checksum dirs-sys 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b" "checksum discard 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" "checksum emitbrown 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "72465c5bd10dc52fe4c5c24875780b66d7c17f170f3c1f411b5d4abe2f1e286f" +"checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" @@ -1185,15 +1351,20 @@ dependencies = [ "checksum futures-timer 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a1de7508b218029b0f01662ed8f61b1c964b3ae99d6f25462d0f55a595109df6" "checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" "checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" +"checksum glob 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +"checksum gsasl-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9a23468198e86f09c8da7ae40ba7844c28cc2fa82f5f1ce7d309d51c8132bc33" "checksum hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" "checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772" +"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" "checksum indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" "checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" "checksum ip_network 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "2ee15951c035f79eddbef745611ec962f63f4558f1dadf98ab723cc603487c6f" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum kv-log-macro 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c54d9f465d530a752e6ebdc217e081a7a614b48cb200f6f0aee21ba6bc9aabb" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +"checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" "checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" +"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" "checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" "checksum lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" @@ -1204,18 +1375,21 @@ dependencies = [ "checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6" "checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" "checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" "checksum num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" "checksum once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b" "checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" "checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" +"checksum peeking_take_while 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" "checksum pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae" "checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" "checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" "checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5" "checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e" "checksum proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548" +"checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" "checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" "checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" "checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" @@ -1226,13 +1400,16 @@ dependencies = [ "checksum regex 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "322cf97724bea3ee221b78fe25ac9c46114ebb51747ad5babd51a2fc6a8235a8" "checksum regex-syntax 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)" = "b28dfe3fe9badec5dbf0a79a9cccad2cfc2ab5484bdb3e44cbd1ae8b3ba2be06" "checksum rhai 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1cadbefcdb49a5ea2ea53699ce6b60f28c8a711247ce449ca99e687b0a5d6de" +"checksum rsasl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f04a6a443b95750c7125df4b051353dc6aa15bb8762c55ff5276370c698e2cdf" "checksum rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" +"checksum rustc-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" "checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" +"checksum shlex 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" "checksum signal-hook 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "10b9f3a1686a29f53cfd91ee5e3db3c12313ec02d33765f02c1a9645a1811e2c" "checksum signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41" "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" @@ -1244,6 +1421,7 @@ dependencies = [ "checksum syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5" "checksum take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" "checksum term 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c0863a3345e70f61d613eab32ee046ccd1bcc5f9105fe402c61fcd0c13eeb8b5" +"checksum termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" "checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" "checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" @@ -1257,10 +1435,13 @@ dependencies = [ "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" "checksum uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" "checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +"checksum which 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/Cargo.toml b/Cargo.toml index 4d0ab4c..51f8259 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,5 +34,7 @@ uuid = { version = "0.8", features = ["serde", "v4"] } clap = "2.33" +rsasl = "0.1" + [build-dependencies] capnpc = "0.12" diff --git a/schema b/schema new file mode 160000 index 0000000..16a4aba --- /dev/null +++ b/schema @@ -0,0 +1 @@ +Subproject commit 16a4aba76abc2667cce80d2937ca923bce225817 diff --git a/schema/api.capnp b/schema/api.capnp deleted file mode 100644 index ed09a14..0000000 --- a/schema/api.capnp +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright © 2020 Gregor Reitzenstein -# Licensed under the MIT License: -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -@0xfd92ce9be2369b8e; - -interface Diflouroborane { - # Upon initial connection this is the interface a program is presented with, serving as the - # common point to access specific subsystems. Keep in mind that one can use pipelining to make this - # just as efficient as direct calls — e.g. access the authentication system and call - # `initializeAuthentication` on it in one roundtrip, provided one gets granted access to the - # Authentication subsystem (which in all fairness is a reasonable assumption) - - authentication @0 () -> ( auth :Authentication ); - # Then authentication subsystem handles authentication of clients and servers. Multiple - # authentication is possible, see the `Authentication` interface for details. - - permissions @1 () -> ( perm :Permissions ); - # Permission subsystem to manage permissions and systems underlying the authorization process - - machines @2 () -> ( mach :Machines ); - # Diflouroborane stores machine¹ information in an opaque internal database. This interface is - # the only stable process of modifying that information - - # TODO Capability transfer system, required for machine takeover, session resumption. -} - -struct UUID { - # UUID type used to identify machines. - # Since the exact value has no meaning the encoding rules are not too relevant, but it is - # paramount that you are consistent when encoding and decoding this type. - # - # Consider using this algorithm for assembling the 128-bit integer: - # (assuming ISO9899:2018 shifting & casting rules) - # uint128_t num = (uuid1 << 64) + uuid0; - # And then respectively this code for deconstructing it: - # uint64_t uuid0 = (uint64_t) num; - # uint64_t uuid1 = (uint64_t) (num >> 64); - - uuid0 @0 :UInt64; - uuid1 @1 :UInt64; -} - -interface Machines { - interface Manage { - setBlocked @0 ( blocked :Bool ) -> (); - # Block or Unblock the machine. A blocked machine can not be used. - - forceReturn @1 () -> (); - # Forcefully marking a machine as `returned` — i.e. not used. - } - - interface GiveBack { - # The only way of getting a `return` interface is by successfully calling `use`. This means - # only the user that marked a machine as `used` can return it again. (Baring force override) - giveback @0 () -> (); - } - - manage @0 ( uuid :UUID ) -> ( manage :Manage ); - - use @1 ( uuid :UUID ) -> ( giveback :GiveBack ); - # Use a machine, identified by its UUID. If the caller is allowed to and the machine is - # available to being used a `return` Capability will be returned — the person using a machine is - # after all the only person that can return the machine after use. -} - -interface Permissions { - getAllSubjects @0 () -> ( subjects :List(Text) ); - getAllObjects @1 () -> ( objects :List(Text) ); - getAllAction @2 () -> ( actions :List(Text) ); - getAllRoles @3 () -> ( roles :List(Text) ); - - removePolicy @4 ( p :List(Text) ) -> (); - addPolicy @5 ( p :List(Text) ) -> (); -} - -interface Authentication { - # List all SASL mechs the server is willing to use - availableMechanisms @0 () -> ( mechanisms :List(Text) ); - - # Start authentication using the given mechanism and optional initial data - initializeAuthentication @1 ( mechanism :Text, initialData :MaybeData ) - -> (response :StepResult ); - - getAuthzid @2 () -> ( authzid :Text ); - - struct StepResult { - union { - challenge @0 :Challenge; - outcome @1 :Outcome; - } - } - - struct MaybeData { - union { - some @0 :Data; - none @1 :Void; - } - } - - interface Challenge { - # Access the challenge data - read @0 () -> ( data :MaybeData ); - - respond @1 ( data :MaybeData ) - -> ( response :StepResult ); - } - - interface Outcome { - # Outcomes may contain additional data - read @0 () -> ( data :MaybeData ); - # The actual outcome. - value @1 () -> ( granted :Bool ); - } -} diff --git a/src/api.rs b/src/api.rs index 4876e05..1a4c133 100644 --- a/src/api.rs +++ b/src/api.rs @@ -32,95 +32,6 @@ use std::ops::Deref; use api::diflouroborane; -#[derive(Clone)] -pub struct API { - auth: Arc>, - perm: Arc>, - mach: Arc>, - - spawner: S, -} -impl API { - pub fn new(auth: AuthenticationProvider, - perm: PermissionsProvider, - mach: MachinesProvider, - spawner: S) - -> Self - { - let auth = Arc::new(RwLock::new(auth)); - let perm = Arc::new(RwLock::new(perm)); - let mach = Arc::new(RwLock::new(mach)); - - Self { auth, perm, mach, spawner } - } - - pub fn into_connection(self) -> Bootstrap { - let auth = Rc::new(Authentication::new(self.auth)); - let perm = Rc::new(Permissions::new(self.perm, auth.clone())); - let mach = Machines::new(self.mach, perm.clone()); - Bootstrap { - auth: auth, - perm: perm, - mach: mach, - } - } -} - -pub async fn handle_connection(api: API, log: Logger, socket: TcpStream) -> Result<(), Error> { - info!(log, "A new connection"); - let client = api.into_connection(); - let a = api::diflouroborane::ToClient::new(client).into_client::(); - - let netw = VatNetwork::new(socket.clone(), socket, Side::Server, Default::default()); - - let rpc = RpcSystem::new(Box::new(netw), Some(a.clone().client)).map(|_| ()); - - rpc.await; - - Ok(()) -} - -/// Bootstrap capability of the Diflouroborane API -/// -/// This is the starting point for any client connecting -#[derive(Clone)] -pub struct Bootstrap { - auth: Rc, - perm: Rc, - mach: Machines, -} - -impl diflouroborane::Server for Bootstrap { - fn authentication(&mut self, - _params: diflouroborane::AuthenticationParams, - mut results: diflouroborane::AuthenticationResults) - -> Promise<(), Error> - { - let mut b = results.get(); - let auth = api::authentication::ToClient::new(self.auth.deref().clone()).into_client::(); - b.set_auth(auth); - Promise::ok(()) - } - - fn permissions(&mut self, - _params: diflouroborane::PermissionsParams, - mut results: diflouroborane::PermissionsResults) - -> Promise<(), Error> - { - //let mut b = results.get(); - //let perm = api::permissions::ToClient::new(self.perm).into_client::(); - //b.set_perm(perm); - Promise::ok(()) - } - - fn machines(&mut self, - _params: diflouroborane::MachinesParams, - mut results: diflouroborane::MachinesResults) - -> Promise<(), Error> - { - let mut b = results.get(); - let mach = api::machines::ToClient::new(self.mach.clone()).into_client::(); - b.set_mach(mach); - Promise::ok(()) - } +pub async fn handle_connection(log: Logger, socket: TcpStream) -> Result<(), Error> { + unimplemented!() } diff --git a/src/auth.rs b/src/auth.rs index 9f06684..bd1066a 100644 --- a/src/auth.rs +++ b/src/auth.rs @@ -147,116 +147,3 @@ impl Authentication { } } } - - -use crate::api::api; - -impl api::authentication::Server for Authentication { - fn available_mechanisms(&mut self, - _params: api::authentication::AvailableMechanismsParams, - mut results: api::authentication::AvailableMechanismsResults) - -> ::capnp::capability::Promise<(), ::capnp::Error> - { - let p = self.provider.clone(); - let f = async move { - let m = p.read().await.mechs(); - let mut b = results.get() - .init_mechanisms(m.len() as u32); - for (i, mech) in m.iter().enumerate() { - let mut bldr = b.reborrow(); - bldr.set(i as u32, mech); - } - Ok(()) - }; - - ::capnp::capability::Promise::from_future(f) - } - - fn initialize_authentication(&mut self, - params: api::authentication::InitializeAuthenticationParams, - mut results: api::authentication::InitializeAuthenticationResults) - -> ::capnp::capability::Promise<(), ::capnp::Error> - { - let prov = self.provider.clone(); - let stat = self.state.clone(); - - Promise::from_future(async move { - let params = params.get()?; - let mechanism = params.get_mechanism()?; - - match mechanism { - "PLAIN" => { - use api::authentication::maybe_data::Which; - - let data = params.get_initial_data()?; - if let Ok(Which::Some(data)) = data.which() { - let data = data?; - if let Ok((b, name)) = prov.read().await.plain.step(data) { - // If login was successful set the authzid - if b { - stat.write().await.replace(name.to_string()); - } - - let outcome = Outcome::value(b); - results - .get() - .init_response() - .set_outcome(api::authentication::outcome::ToClient::new(outcome) - .into_client::<::capnp_rpc::Server>()); - } - Ok(()) - } else { - Err(::capnp::Error::unimplemented( - "SASL PLAIN requires initial data set".to_string())) - } - }, - m => { - Err(::capnp::Error::unimplemented( - format!("SASL Mechanism {} is not implemented", m) - )) - } - - } - }) - } - - fn get_authzid(&mut self, - _params: api::authentication::GetAuthzidParams, - mut results: api::authentication::GetAuthzidResults) - -> ::capnp::capability::Promise<(), ::capnp::Error> - { - let state = self.state.clone(); - let f = async move { - if let Some(zid) = state.read().await.deref() { - results.get().set_authzid(&zid); - } else { - results.get().set_authzid(""); - } - - Ok(()) - }; - - Promise::from_future(f) - } -} - -struct Outcome { - data: Option>, - value: bool, -} -impl Outcome { - pub fn value(value: bool) -> Self { - Self { data: None, value: value } - } -} - -impl api::authentication::outcome::Server for Outcome { - fn value(&mut self, - _params: api::authentication::outcome::ValueParams, - mut results: api::authentication::outcome::ValueResults) - -> ::capnp::capability::Promise<(), ::capnp::Error> - { - results.get().set_granted(self.value); - ::capnp::capability::Promise::ok(()) - } -} diff --git a/src/machine.rs b/src/machine.rs index 744ec95..ec61f26 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -103,94 +103,6 @@ impl Machines { Self { inner, perm } } } -impl api::machines::Server for Machines { - fn manage(&mut self, - params: api::machines::ManageParams, - mut results: api::machines::ManageResults) - -> Promise<(), Error> - { - let params = pry!(params.get()); - let uuid_s = pry!(params.get_uuid()); - let uuid = uuid_from_api(uuid_s); - - // We need to copy the Arc here because we don't have access to it from within the closure - // witout moving it out of self. - let i = self.inner.clone(); - let p = self.perm.clone(); - - let f = async move { - // We only need a read lock at first there's no reason to aquire a write lock. - let i_lock = i.read().await; - - if let Some(ps) = i_lock.get_perm_req(&uuid) { - // drop the lock as soon as possible to prevent locking as much as possible - drop(i_lock); - if let Ok(true) = p.enforce(&ps, "manage").await { - // We're here and have not returned an error yet - that means we're free to - // send a successful manage back. - let mut b = results.get(); - - // Magic incantation to get a capability to send - // Also since we move i in here we at this point *must* have dropped - // all locks we may still have on it. - b.set_manage(api::machines::manage::ToClient::new( - MachineManager::new(uuid, i)).into_client::()); - } - } - Ok(()) - }; - - Promise::from_future(f) - } - - fn use_(&mut self, - params: api::machines::UseParams, - mut results: api::machines::UseResults) - -> Promise<(), capnp::Error> - { - let params = pry!(params.get()); - let uuid_s = pry!(params.get_uuid()); - let uuid = uuid_from_api(uuid_s); - - // We need to copy the Arc here because we don't have access to it from within the closure - // witout moving it out of self. - let i = self.inner.clone(); - let p = self.perm.clone(); - - let f = async move { - // We only need a read lock at first there's no reason to aquire a write lock. - let i_lock = i.read().await; - - if let Some(ps) = i_lock.get_perm_req(&uuid) { - // drop the lock as soon as possible to prevent locking as much as possible - drop(i_lock); - if let Ok(true) = p.enforce(&ps, "write").await { - { - // If use_() returns an error that is our error. If it doesn't that means we can use - // the machine - // Using a subscope to again make the time the lock is valid as short as - // possible. Less locking == more good - let mut i_lock = i.write().await; - i_lock.use_(&uuid)?; - } - - // We're here and have not returned an error yet - that means we're free to - // send a successful use back. - let mut b = results.get(); - - // Magic incantation to get a capability to send - // Also since we move i in here we at this point *must* have dropped - // all locks we may still have on it. - b.set_giveback(api::machines::give_back::ToClient::new( - GiveBack::new(i, uuid)).into_client::()); - } - } - Ok(()) - }; - - Promise::from_future(f) - } -} #[derive(Clone)] pub struct GiveBack { @@ -203,22 +115,6 @@ impl GiveBack { } } -impl api::machines::give_back::Server for GiveBack { - fn giveback(&mut self, - _params: api::machines::give_back::GivebackParams, - _results: api::machines::give_back::GivebackResults) - -> Promise<(), Error> - { - let mdb = self.mdb.clone(); - let uuid = self.uuid.clone(); - let f = async move { - mdb.write().await.give_back(&uuid) - }; - - Promise::from_future(f) - } -} - fn uuid_from_api(uuid: api::u_u_i_d::Reader) -> Uuid { let uuid0 = uuid.get_uuid0() as u128; let uuid1 = uuid.get_uuid1() as u128; @@ -245,26 +141,6 @@ impl MachineManager { } } -impl api::machines::manage::Server for MachineManager { - fn set_blocked(&mut self, - params: api::machines::manage::SetBlockedParams, - results: api::machines::manage::SetBlockedResults) - -> Promise<(), Error> - { - let uuid = self.uuid.clone(); - let mdb = self.mdb.clone(); - let f = async move { - let params = params.get()?; - let blocked = params.get_blocked(); - mdb.write().await.set_blocked(&uuid, blocked)?; - Ok(()) - }; - - Promise::from_future(f) - } - -} - #[derive(PartialEq, Eq, Debug, Serialize, Deserialize)] pub struct Machine { pub name: String, diff --git a/src/main.rs b/src/main.rs index e8ea4f0..820302f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,8 +40,6 @@ use std::sync::Arc; use error::Error; -use api::API; - // Returning a `Result` from `main` allows us to use the `?` shorthand. // In the case of an Err it will be printed using `fmt::Debug` fn main() -> Result<(), Error> { @@ -159,10 +157,6 @@ fn main() -> Result<(), Error> { let local_spawn = exec.spawner(); - // The API has access to all subsystems it needs and the Threadpool as capability to spawn new - // tasks for CPU-intensive work - let api = API::new(auth, pdb, mach, pool); - // Closure inefficiencies. Lucky cloning an Arc is pretty cheap. let inner_log = log.clone(); let loop_log = log.clone(); @@ -192,7 +186,7 @@ fn main() -> Result<(), Error> { // We handle the error using map_err, `let _` is used to quiet the compiler // warning - let f = api::handle_connection(api.clone(), log.clone(), socket) + let f = api::handle_connection(log.clone(), socket) .map_err(move |e| { error!(log, "Error occured during protocol handling: {}", e); })