From 15bc8d4120042f8553ce45624fde3a44579b634a Mon Sep 17 00:00:00 2001 From: Firstyear Date: Mon, 11 May 2020 21:12:32 +1000 Subject: [PATCH] 101 idlcache (#224) Fixes #101, concurrent caching of IDL and Entries. This yields a 10% improvement for test case execution, and 35% for tests run under --release mode. A lot of code around the code base was needed to be touched due to the extra need for mut in some operations and some lifetimes, but the majority of the work was in idl_arc_sqlite.rs, which has the cache layer. There are many performance gains yet to see, but most of those will come through improvement of the concread ARC and it's related BTree implementation. --- Cargo.lock | 1209 +++++++++++--------- kanidm_client/src/asynchronous.rs | 1 - kanidm_client/src/lib.rs | 9 +- kanidm_client/tests/default_entries.rs | 2 +- kanidm_proto/src/v1.rs | 12 +- kanidm_tools/src/badlist_preprocess.rs | 2 - kanidm_tools/src/cli/account.rs | 2 +- kanidm_tools/src/cli/common.rs | 1 - kanidm_tools/src/cli/group.rs | 2 +- kanidm_tools/src/cli/lib.rs | 4 +- kanidm_tools/src/cli/raw.rs | 2 +- kanidm_tools/src/cli/recycle.rs | 2 +- kanidm_tools/src/ssh_authorizedkeys.rs | 1 - kanidmd/Cargo.toml | 4 +- kanidmd/src/lib/access.rs | 62 +- kanidmd/src/lib/actors/v1_read.rs | 85 +- kanidmd/src/lib/actors/v1_write.rs | 56 +- kanidmd/src/lib/audit.rs | 1 - kanidmd/src/lib/be/idl_arc_sqlite.rs | 484 ++++++++ kanidmd/src/lib/be/idl_sqlite.rs | 147 ++- kanidmd/src/lib/be/mod.rs | 189 ++- kanidmd/src/lib/config.rs | 1 - kanidmd/src/lib/constants/mod.rs | 2 +- kanidmd/src/lib/core/mod.rs | 10 +- kanidmd/src/lib/credential/mod.rs | 1 - kanidmd/src/lib/credential/totp.rs | 2 +- kanidmd/src/lib/entry.rs | 6 +- kanidmd/src/lib/event.rs | 38 +- kanidmd/src/lib/filter.rs | 8 +- kanidmd/src/lib/idm/account.rs | 4 +- kanidmd/src/lib/idm/authsession.rs | 6 +- kanidmd/src/lib/idm/event.rs | 22 +- kanidmd/src/lib/idm/group.rs | 6 +- kanidmd/src/lib/idm/radius.rs | 2 +- kanidmd/src/lib/idm/server.rs | 39 +- kanidmd/src/lib/idm/unix.rs | 14 +- kanidmd/src/lib/modify.rs | 4 +- kanidmd/src/lib/plugins/attrunique.rs | 2 +- kanidmd/src/lib/plugins/base.rs | 6 +- kanidmd/src/lib/plugins/domain.rs | 2 +- kanidmd/src/lib/plugins/gidnumber.rs | 12 +- kanidmd/src/lib/plugins/macros.rs | 6 +- kanidmd/src/lib/plugins/memberof.rs | 40 +- kanidmd/src/lib/plugins/mod.rs | 4 +- kanidmd/src/lib/plugins/password_import.rs | 2 +- kanidmd/src/lib/plugins/refint.rs | 14 +- kanidmd/src/lib/plugins/spn.rs | 4 +- kanidmd/src/lib/server.rs | 100 +- kanidmd/src/lib/value.rs | 2 +- 49 files changed, 1627 insertions(+), 1009 deletions(-) create mode 100644 kanidmd/src/lib/be/idl_arc_sqlite.rs diff --git a/Cargo.lock b/Cargo.lock index 108418169..643b8c90a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6,19 +6,19 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "actix-rt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix_derive 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-resolver 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -31,10 +31,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -44,12 +44,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "actix-rt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "actix-utils 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)", "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", @@ -69,7 +69,7 @@ dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -84,7 +84,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "actix-connect 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "actix-rt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "actix-threadpool 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-tls 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -98,13 +98,13 @@ dependencies = [ "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)", "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "h2 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -113,16 +113,16 @@ dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "ring 0.16.12 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "ring 0.16.13 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -130,8 +130,8 @@ name = "actix-macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -142,21 +142,22 @@ dependencies = [ "bytestring 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.2.1 (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.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "actix-rt" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "actix-macros 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-threadpool 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "copyless 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -165,15 +166,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "actix-rt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "actix-utils 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-uds 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -182,8 +183,8 @@ name = "actix-service" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -195,10 +196,10 @@ dependencies = [ "actix-web 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -207,12 +208,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "actix-macros 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "actix-rt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-server 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -221,12 +222,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", + "threadpool 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -235,12 +236,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "actix-rt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "actix-utils 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)", "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-openssl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -252,14 +253,14 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "actix-rt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -272,7 +273,7 @@ dependencies = [ "actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-macros 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-router 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "actix-rt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-server 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "actix-testing 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -284,18 +285,18 @@ dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)", "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -304,9 +305,9 @@ name = "actix-web-codegen" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -314,9 +315,9 @@ name = "actix_derive" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -324,6 +325,14 @@ name = "adler32" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "ahash" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "const-random 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "aho-corasick" version = "0.7.10" @@ -334,7 +343,7 @@ dependencies = [ [[package]] name = "arc-swap" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -352,9 +361,9 @@ name = "async-trait" version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -362,11 +371,16 @@ name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hermit-abi 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "autocfg" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "autocfg" version = "1.0.0" @@ -379,19 +393,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "actix-codec 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "actix-rt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "derive_more 0.99.5 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -400,19 +414,19 @@ name = "backtrace" version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace-sys 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "backtrace-sys" -version = "0.1.35" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -441,20 +455,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "base64" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "bit-set" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bit-vec 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "bit-vec" -version = "0.5.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -486,8 +500,8 @@ name = "brotli-sys" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -496,18 +510,18 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "bstr" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "regex-automata 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -548,7 +562,7 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.50" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -563,7 +577,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -586,13 +600,33 @@ dependencies = [ [[package]] name = "concread" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lru 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "const-random" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "const-random-macro 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "const-random-macro" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -605,7 +639,7 @@ name = "cookie" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -614,7 +648,7 @@ name = "cookie" version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "time 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -626,9 +660,9 @@ dependencies = [ "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "publicsuffix 1.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -643,7 +677,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -661,35 +695,35 @@ dependencies = [ [[package]] name = "criterion" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", - "criterion-plot 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "criterion-plot 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "csv 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "oorandom 11.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "plotters 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "oorandom 11.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "plotters 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "tinytemplate 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", + "tinytemplate 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "criterion-plot" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", + "itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -749,11 +783,11 @@ name = "csv" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bstr 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "bstr 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", "csv-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -780,10 +814,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "ident_case 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -792,8 +826,8 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "darling_core 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -803,9 +837,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "darling 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", "derive_builder_core 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -814,9 +848,9 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "darling 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -824,9 +858,9 @@ name = "derive_more" version = "0.99.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -852,7 +886,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -886,9 +920,9 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -899,7 +933,7 @@ 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.6 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "termcolor 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -913,21 +947,21 @@ dependencies = [ [[package]] name = "failure" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "failure_derive 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "failure_derive" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -948,11 +982,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "fancy-regex" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "bit-set 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -962,7 +996,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1000,81 +1034,85 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "futures" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-executor 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-executor 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-io 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "futures-channel" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "futures-core" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "futures-executor" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "futures-io" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "futures-macro" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "futures-sink" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "futures-task" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "futures-util" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-io 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-macro 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro-nested 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1094,7 +1132,7 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1103,33 +1141,42 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "h2" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "half" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "hashbrown" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ahash 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "heck" version = "0.3.1" @@ -1140,10 +1187,10 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1151,7 +1198,7 @@ name = "hostname" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "match_cfg 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1190,23 +1237,23 @@ dependencies = [ [[package]] name = "hyper" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "h2 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1217,10 +1264,10 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tls 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1230,13 +1277,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "idlset" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1272,12 +1319,12 @@ name = "iovec" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "ipconfig" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "socket2 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1294,6 +1341,14 @@ dependencies = [ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "itoa" version = "0.4.5" @@ -1301,10 +1356,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "js-sys" -version = "0.3.37" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1315,34 +1370,34 @@ dependencies = [ "actix-files 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "actix-session 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "actix-web 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "base64 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "base64 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "concread 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "concread 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", - "criterion 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "criterion 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "idlset 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "idlset 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "kanidm_proto 0.1.2", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libsqlite3-sys 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", "r2d2 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)", "r2d2_sqlite 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "rpassword 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "rusqlite 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", "serde_cbor 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", "sshkeys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "structopt 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "zxcvbn 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1353,15 +1408,15 @@ version = "0.1.2" dependencies = [ "actix 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "kanidm 0.1.2", "kanidm_proto 0.1.2", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1371,9 +1426,9 @@ name = "kanidm_proto" version = "0.1.2" dependencies = [ "base32 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", "uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "zxcvbn 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1388,10 +1443,10 @@ dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "rpassword 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", "shellexpand 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "structopt 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "zxcvbn 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1402,11 +1457,11 @@ dependencies = [ "actix 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "kanidm 0.1.2", "kanidm_client 0.1.2", "kanidm_proto 0.1.2", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "libsqlite3-sys 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "r2d2 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1414,11 +1469,11 @@ dependencies = [ "reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)", "rpassword 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "rusqlite 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", "serde_cbor 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "structopt 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1444,7 +1499,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.68" +version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1453,8 +1508,8 @@ version = "0.2.0" source = "git+https://github.com/csnewman/libnss-rs.git?rev=eab2d93d2438652773699b0807d558ce75b1e748#eab2d93d2438652773699b0807d558ce75b1e748" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", - "paste 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "paste 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1462,19 +1517,19 @@ name = "libsqlite3-sys" version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "linked-hash-map" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lock_api" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1488,12 +1543,20 @@ dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "lru" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "lru-cache" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "linked-hash-map 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1548,7 +1611,7 @@ dependencies = [ [[package]] name = "mio" -version = "0.6.21" +version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1556,10 +1619,10 @@ dependencies = [ "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1570,19 +1633,19 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)", "miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "mio-uds" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1591,7 +1654,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1611,24 +1674,24 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)", - "schannel 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.56 (registry+https://github.com/rust-lang/crates.io-index)", + "schannel 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "net2" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1652,9 +1715,9 @@ version = "0.1.2" dependencies = [ "kanidm_unix_int 0.1.2", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "libnss 0.2.0 (git+https://github.com/csnewman/libnss-rs.git?rev=eab2d93d2438652773699b0807d558ce75b1e748)", - "paste 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "paste 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1729,16 +1792,21 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hermit-abi 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "once_cell" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "oorandom" -version = "11.1.0" +version = "11.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1750,8 +1818,8 @@ dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.56 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1764,17 +1832,17 @@ name = "openssl-src" version = "111.9.0+1.1.1g" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "openssl-sys" -version = "0.9.55" +version = "0.9.56" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "openssl-src 111.9.0+1.1.1g (registry+https://github.com/rust-lang/crates.io-index)", "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", "vcpkg 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1784,52 +1852,52 @@ dependencies = [ name = "pam_kanidm" version = "0.1.2" dependencies = [ - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "kanidm_unix_int 0.1.2", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parking_lot" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lock_api 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parking_lot_core" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "paste" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "paste-impl 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "paste-impl 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "paste-impl" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1844,30 +1912,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pin-project" -version = "0.4.8" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "pin-project-internal 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project-internal 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "pin-project-internal" -version = "0.4.8" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "pin-project-lite" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pin-utils" -version = "0.1.0-alpha.4" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1877,13 +1945,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "plotters" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "js-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", + "js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "web-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1897,9 +1965,9 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro-error-attr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1908,9 +1976,9 @@ name = "proc-macro-error-attr" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", "syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1927,7 +1995,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "proc-macro2" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1941,7 +2009,7 @@ dependencies = [ "error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)", "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1952,10 +2020,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "quote" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1964,7 +2032,7 @@ version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", "scheduled-thread-pool 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1983,7 +2051,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2033,7 +2101,7 @@ dependencies = [ "crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2053,7 +2121,7 @@ dependencies = [ [[package]] name = "regex" -version = "1.3.6" +version = "1.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2093,30 +2161,30 @@ dependencies = [ "cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "cookie_store 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "encoding_rs 0.8.22 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)", "hyper-tls 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "js-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", + "js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project-lite 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", "serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio-tls 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-futures 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-futures 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", + "web-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", "winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2131,15 +2199,15 @@ dependencies = [ [[package]] name = "ring" -version = "0.16.12" +version = "0.16.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", + "untrusted 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "web-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2148,7 +2216,7 @@ name = "rpassword" version = "4.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2163,7 +2231,7 @@ dependencies = [ "libsqlite3-sys 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", "lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2190,19 +2258,9 @@ dependencies = [ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rustversion" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "ryu" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2215,12 +2273,12 @@ name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "schannel" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2232,7 +2290,7 @@ name = "scheduled-thread-pool" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2242,23 +2300,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "security-framework" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", - "security-framework-sys 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "security-framework-sys" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2276,10 +2334,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.106" +version = "1.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2287,28 +2345,28 @@ name = "serde_cbor" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "half 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "half 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_derive" -version = "1.0.106" +version = "1.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" -version = "1.0.51" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2318,7 +2376,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2352,8 +2410,8 @@ name = "signal-hook-registry" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "arc-swap 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "arc-swap 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2363,10 +2421,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "smallvec" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2375,7 +2433,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2397,7 +2455,7 @@ dependencies = [ [[package]] name = "standback" -version = "0.2.2" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2410,7 +2468,7 @@ dependencies = [ "stdweb-derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", "stdweb-internal-macros 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)", "stdweb-internal-runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2418,11 +2476,11 @@ name = "stdweb-derive" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2431,13 +2489,13 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "base-x 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2452,33 +2510,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "structopt" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "structopt-derive 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt-derive 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "structopt-derive" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro-error 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "syn" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2487,9 +2545,9 @@ name = "syn-mid" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2497,9 +2555,9 @@ name = "synstructure" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2509,7 +2567,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2521,7 +2579,7 @@ name = "termcolor" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2542,33 +2600,32 @@ dependencies = [ [[package]] name = "threadpool" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "time" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "time" -version = "0.2.9" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", - "rustversion 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "standback 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", + "standback 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "stdweb 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", "time-macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2578,46 +2635,47 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", - "time-macros-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "time-macros-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "time-macros-impl" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "standback 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tinytemplate" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", + "mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)", "mio-named-pipes 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "mio-uds 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project-lite 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2629,9 +2687,9 @@ name = "tokio-macros" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2640,16 +2698,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tokio-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2658,11 +2716,11 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project-lite 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2671,11 +2729,11 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "pin-project-lite 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2683,7 +2741,7 @@ name = "toml" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2698,15 +2756,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "async-trait 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)", "enum-as-inner 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "socket2 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2716,15 +2774,15 @@ version = "0.18.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ipconfig 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "failure 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", + "ipconfig 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "resolv-conf 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2735,7 +2793,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "typenum" -version = "1.11.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2759,7 +2817,7 @@ name = "unicode-normalization" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2779,7 +2837,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "untrusted" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -2808,7 +2866,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2825,9 +2883,9 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2861,7 +2919,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2880,73 +2938,73 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "wasm-bindgen" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-macro 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-macro 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-shared 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "js-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", - "web-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", + "js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "web-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-macro-support 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-macro-support 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-backend 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-backend 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen-shared 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.60" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "web-sys" -version = "0.3.37" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "js-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)", - "wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)", + "js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)", + "wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2980,7 +3038,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi-util" -version = "0.1.4" +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)", @@ -3015,13 +3073,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "derive_builder 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "fancy-regex 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "fancy-regex 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)", ] [metadata] @@ -3032,7 +3090,7 @@ dependencies = [ "checksum actix-http 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c16664cc4fdea8030837ad5a845eb231fb93fc3c5c171edfefb52fad92ce9019" "checksum actix-macros 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "21705adc76bbe4bc98434890e73a89cd00c6015e5704a60bb6eea6c3b72316b6" "checksum actix-router 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9d7a10ca4d94e8c8e7a87c5173aba1b97ba9a6563ca02b0e1cd23531093d3ec8" -"checksum actix-rt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "20066d9200ef8d441ac156c76dd36c3f1e9a15976c34e69ae97f7f570b331882" +"checksum actix-rt 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "143fcc2912e0d1de2bcf4e2f720d2a60c28652ab4179685a1ee159e0fb3db227" "checksum actix-server 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "582a7173c281a4f46b5aa168a11e7f37183dcb71177a39312cc2264da7a632c9" "checksum actix-service 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d3e4fc95dfa7e24171b2d0bb46b85f8ab0e8499e4e3caec691fc4ea65c287564" "checksum actix-session 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca833a08799c95281204f9cc76223da4d12d2caa03de24362b3e268c60da328c" @@ -3044,41 +3102,45 @@ dependencies = [ "checksum actix-web-codegen 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4f00371942083469785f7e28c540164af1913ee7c96a4534acb9cea92c39f057" "checksum actix_derive 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b95aceadaf327f18f0df5962fedc1bde2f870566a0b9f65c89508a3b1f79334c" "checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" +"checksum ahash 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6f33b5018f120946c1dcf279194f238a9f146725593ead1c08fa47ff22b0b5d3" "checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" -"checksum arc-swap 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d663a8e9a99154b5fb793032533f6328da35e23aac63d5c152279aa8ba356825" +"checksum arc-swap 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b585a98a234c46fc563103e9278c9391fde1f4e6850334da895d27edb9580f62" "checksum arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" "checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" "checksum async-trait 0.1.30 (registry+https://github.com/rust-lang/crates.io-index)" = "da71fef07bc806586090247e971229289f64c210a278ee5ae419314eb386b31d" "checksum atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +"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 awc 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d7601d4d1d7ef2335d6597a41b5fe069f6ab799b85f53565ab390e7b7065aac5" "checksum backtrace 0.3.46 (registry+https://github.com/rust-lang/crates.io-index)" = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e" -"checksum backtrace-sys 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118" +"checksum backtrace-sys 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "18fbebbe1c9d1f383a9cc7e8ccdb471b91c8d024ee9c2ca5b5346121fe8b4399" "checksum base-x 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1" "checksum base32 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa" "checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" -"checksum base64 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3" +"checksum base64 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "53d1ccbaf7d9ec9537465a97bf19edc1a4e158ecb49fc16178202238c569cc42" "checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" -"checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80" -"checksum bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb" +"checksum bit-set 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" +"checksum bit-vec 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5f0dc55f2d8a1a85650ac47858bb001b4c0dd73d79e3c455a842925e68d29cd3" "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 block-buffer 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1339a1042f5d9f295737ad4d9a6ab6bf81c84a933dba110b9200cd6d1448b814" "checksum brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd" "checksum brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e" -"checksum bstr 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "2889e6d50f394968c8bf4240dc3f2a7eb4680844d27308f798229ac9d4725f41" +"checksum bstr 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "31accafdb70df7871592c058eca3985b71104e15ac32f64706022c58867da931" "checksum bumpalo 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" "checksum byte-tools 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" "checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" "checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" "checksum bytestring 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fc7c05fa5172da78a62d9949d662d2ac89d4cc7355d7b49adee5163f1fb3f363" "checksum cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0" -"checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" +"checksum cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)" = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" "checksum chrono 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" "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 concread 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "562dcf7076548300c70a6d3d10d5b7248972d0c547554243cc925e351024175c" +"checksum concread 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "71a3779b266b0477a94e1fc0db50e27f928c1e1f14bf72d4aca1b260f443026b" +"checksum const-random 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "2f1af9ac737b2dd2d577701e59fd09ba34822f6f2ebdb30a7647405d9e55e16a" +"checksum const-random-macro 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "25e4c606eb459dd29f7c57b2e0879f2b6f14ee130918c2b78ccb58a9624e6c7a" "checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" "checksum cookie 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" "checksum cookie 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0c60ef6d0bbf56ad2674249b6bb74f2c6aeb98b98dd57b5d3e37cace33011d69" @@ -3087,8 +3149,8 @@ dependencies = [ "checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" "checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" "checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" -"checksum criterion 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1fc755679c12bda8e5523a71e4d654b6bf2e14bd838dfc48cde6559a05caf7d1" -"checksum criterion-plot 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a01e15e0ea58e8234f96146b1f91fa9d0e4dd7a38da93ff7a75d42c0b9d3a545" +"checksum criterion 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "63f696897c88b57f4ffe3c69d8e1a0613c7d0e6c4833363c8560fbde9c47b966" +"checksum criterion-plot 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ddeaf7989f00f2e1d871a26a110f3ed713632feac17f65f03ca938c542618b60" "checksum crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061" "checksum crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" "checksum crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" @@ -3112,60 +3174,63 @@ dependencies = [ "checksum enum-as-inner 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bc4bfcfacb61d231109d1d55202c1f33263319668b168843e02ad4652725ec9c" "checksum env_logger 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" "checksum error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd" -"checksum failure 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" -"checksum failure_derive 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" +"checksum failure 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" +"checksum failure_derive 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" "checksum fallible-iterator 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" "checksum fallible-streaming-iterator 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" -"checksum fancy-regex 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b0e2de1b89ad299d536b7cefc5d177f5c005957fa2266ce58eca4d189e74bff5" +"checksum fancy-regex 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91abf6555234338687bb47913978d275539235fcb77ba9863b779090b42b14" "checksum flate2 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" "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" -"checksum futures 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5c329ae8753502fb44ae4fc2b622fa2a94652c41e795143765ba0927f92ab780" -"checksum futures-channel 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" -"checksum futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" -"checksum futures-executor 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba" -"checksum futures-io 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" -"checksum futures-macro 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" -"checksum futures-sink 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" -"checksum futures-task 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" -"checksum futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" +"checksum futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1e05b85ec287aac0dc34db7d4a569323df697f9c55b99b15d6b4ef8cde49f613" +"checksum futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f366ad74c28cca6ba456d95e6422883cfb4b252a83bed929c83abfdbbf2967d5" +"checksum futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "59f5fff90fd5d971f936ad674802482ba441b6f09ba5e15fd8b39145582ca399" +"checksum futures-executor 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "10d6bb888be1153d3abeb9006b11b02cf5e9b209fda28693c31ae1e4e012e314" +"checksum futures-io 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789" +"checksum futures-macro 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39" +"checksum futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3f2032893cb734c7a05d85ce0cc8b8c4075278e93b24b66f9de99d6eb0fa8acc" +"checksum futures-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bdb66b5f09e22019b1ab0830f7785bcea8e7a42148683f99214f73f8ec21a626" +"checksum futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8764574ff08b701a084482c3c7031349104b07ac897393010494beaa18ce32c6" "checksum fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" "checksum generic-array 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fceb69994e330afed50c93524be68c42fa898c2d9fd4ee8da03bd7363acd26f2" "checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" -"checksum h2 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "377038bf3c89d18d6ca1431e7a5027194fbd724ca10592b9487ede5e8e144f42" -"checksum half 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f36b5f248235f45773d4944f555f83ea61fe07b18b561ccf99d7483d7381e54d" +"checksum h2 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "79b7246d7e4b979c03fa093da39cfb3617a96bbeee6310af63991668d7e843ff" +"checksum half 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d36fab90f82edc3c747f9d438e06cf0a491055896f2a279638bb5beed6c40177" +"checksum hashbrown 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead" "checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" -"checksum hermit-abi 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "725cf19794cf90aa94e65050cb4191ff5d8fa87a498383774c47b332e3af952e" +"checksum hermit-abi 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "61565ff7aaace3525556587bd2dc31d4a07071957be715e63ce7b1eccf51a8f4" "checksum hostname 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" "checksum http 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" "checksum http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" "checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" "checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -"checksum hyper 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ed6081100e960d9d74734659ffc9cc91daf1c0fc7aceb8eaa94ee1a3f5046f2e" +"checksum hyper 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)" = "96816e1d921eca64d208a85aab4f7798455a8e34229ee5a88c935bdee1b78b14" "checksum hyper-tls 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3adcd308402b9553630734e9c36b77a7e48b3821251ca2493e8cd596763aafaa" "checksum ident_case 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -"checksum idlset 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "42875923103fe814d038b4e50ac8903d3753dfb518e32eba1bf79d7f64d413a0" +"checksum idlset 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "40a3ea5de82b1036d85ab1e78f64067cbee85f5d15d068677204f249ff6fbc66" "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" "checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" "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 ipconfig 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "aa79fa216fbe60834a9c0737d7fcd30425b32d1c58854663e24d4c4b328ed83f" +"checksum ipconfig 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" "checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" +"checksum itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" "checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" -"checksum js-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)" = "6a27d435371a2fa5b6d2b028a74bbdb1234f308da363226a2854ca3ff8ba7055" +"checksum js-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5a448de267e7358beaf4a5d849518fe9a0c13fce7afd44b06e68550e5562a7" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -"checksum libc 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0" +"checksum libc 0.2.69 (registry+https://github.com/rust-lang/crates.io-index)" = "99e85c08494b21a9054e7fe1374a732aeadaff3980b6990b94bfd3a70f690005" "checksum libnss 0.2.0 (git+https://github.com/csnewman/libnss-rs.git?rev=eab2d93d2438652773699b0807d558ce75b1e748)" = "" "checksum libsqlite3-sys 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56d90181c2904c287e5390186be820e5ef311a3c62edebb7d6ca3d6a48ce041d" -"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 linked-hash-map 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" +"checksum lock_api 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" +"checksum lru 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0609345ddee5badacf857d4f547e0e5a2e987db77085c24cd887f73573a04237" "checksum lru-cache 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" "checksum match_cfg 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" @@ -3175,13 +3240,13 @@ dependencies = [ "checksum mime 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" "checksum mime_guess 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" "checksum miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5" -"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" +"checksum mio 0.6.22 (registry+https://github.com/rust-lang/crates.io-index)" = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" "checksum mio-named-pipes 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f5e374eff525ce1c5b7687c4cef63943e7686524a387933ad27ca7ec43779cb3" -"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" +"checksum mio-uds 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "396aa0f2003d7df8395cb93e09871561ccc3e785f0acb369170e8cc74ddf9226" "checksum native-tls 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum net2 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)" = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7" "checksum nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" "checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" "checksum num 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" @@ -3191,33 +3256,34 @@ dependencies = [ "checksum num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00" "checksum num-rational 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" "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 oorandom 11.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebcec7c9c2a95cacc7cd0ecb89d8a8454eca13906f6deb55258ffff0adeb9405" +"checksum num_cpus 1.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +"checksum once_cell 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b" +"checksum oorandom 11.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "94af325bc33c7f60191be4e2c984d48aaa21e2854f473b85398344b60c9b6358" "checksum openssl 0.10.29 (registry+https://github.com/rust-lang/crates.io-index)" = "cee6d85f4cb4c4f59a6a85d5b68a233d280c82e29e822913b9c8b129fbf20bdd" "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" "checksum openssl-src 111.9.0+1.1.1g (registry+https://github.com/rust-lang/crates.io-index)" = "a2dbe10ddd1eb335aba3780eb2eaa13e1b7b441d2562fd962398740927f39ec4" -"checksum openssl-sys 0.9.55 (registry+https://github.com/rust-lang/crates.io-index)" = "7717097d810a0f2e2323f9e5d11e71608355e24828410b55b9d4f18aa5f9a5d8" -"checksum parking_lot 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc" -"checksum parking_lot_core 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7582838484df45743c8434fbff785e8edf260c28748353d44bc0da32e0ceabf1" -"checksum paste 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ab4fb1930692d1b6a9cfabdde3d06ea0a7d186518e2f4d67660d8970e2fa647a" -"checksum paste-impl 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "a62486e111e571b1e93b710b61e8f493c0013be39629b714cb166bdb06aa5a8a" +"checksum openssl-sys 0.9.56 (registry+https://github.com/rust-lang/crates.io-index)" = "f02309a7f127000ed50594f0b50ecc69e7c654e16d41b4e8156d1b3df8e0b52e" +"checksum parking_lot 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" +"checksum parking_lot_core 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" +"checksum paste 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "0a229b1c58c692edcaa5b9b0948084f130f55d2dcc15b02fcc5340b2b4521476" +"checksum paste-impl 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "2e0bf239e447e67ff6d16a8bb5e4d4bd2343acf5066061c0e8e06ac5ba8ca68c" "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" "checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" -"checksum pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7804a463a8d9572f13453c516a5faea534a2403d7ced2f0c7e100eeff072772c" -"checksum pin-project-internal 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "385322a45f2ecf3410c68d2a549a4a2685e8051d0f278e39743ff4e451cb9b3f" -"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 pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)" = "81d480cb4e89522ccda96d0eed9af94180b7a5f93fb28f66e1fd7d68431663d1" +"checksum pin-project-internal 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)" = "a82996f11efccb19b685b14b5df818de31c1edcee3daa256ab5775dd98e72feb" +"checksum pin-project-lite 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f7505eeebd78492e0f6108f7171c4948dbb120ee8119d9d77d0afa5469bef67f" +"checksum pin-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" "checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" -"checksum plotters 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "4e3bb8da247d27ae212529352020f3e5ee16e83c0c258061d27b08ab92675eeb" +"checksum plotters 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "f9b1d9ca091d370ea3a78d5619145d1b59426ab0c9eedbad2514a4cee08bf389" "checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" "checksum proc-macro-error 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98e9e4b82e0ef281812565ea4751049f1bdcdfccda7d3f459f2e138a40c08678" "checksum proc-macro-error-attr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4f5444ead4e9935abd7f27dc51f7e852a0569ac888096d5ec2499470794e2e53" "checksum proc-macro-hack 0.5.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63" "checksum proc-macro-nested 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" -"checksum proc-macro2 1.0.10 (registry+https://github.com/rust-lang/crates.io-index)" = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3" +"checksum proc-macro2 1.0.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8872cf6f48eee44265156c111456a700ab3483686b3f96df4cf5481c89157319" "checksum publicsuffix 1.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3bbaa49075179162b49acac1c6aa45fb4dafb5f13cf6794276d77bc7fd95757b" "checksum quick-error 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -"checksum quote 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" +"checksum quote 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4c1f4b0efa5fc5e8ceb705136bfee52cfdb6a4e3509f770b478cd6ed434232a7" "checksum r2d2 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1497e40855348e4a8a40767d8e55174bce1e445a3ac9254ad44ad468ee0485af" "checksum r2d2_sqlite 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c4689dcbe44341a3388a696a056cbb96124f7e70a1fbc9cd6a7bb6bab543e3b" "checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" @@ -3228,68 +3294,67 @@ dependencies = [ "checksum rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" "checksum redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" -"checksum regex 1.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3" +"checksum regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692" "checksum regex-automata 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" "checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" "checksum reqwest 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)" = "02b81e49ddec5109a9dcfc5f2a317ff53377c915e9ae9d4f2fb50914b85614e2" "checksum resolv-conf 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "11834e137f3b14e309437a8276714eed3a80d1ef894869e510f2c0c0b98b9f4a" -"checksum ring 0.16.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1ba5a8ec64ee89a76c98c549af81ff14813df09c3e6dc4766c3856da48597a0c" +"checksum ring 0.16.13 (registry+https://github.com/rust-lang/crates.io-index)" = "703516ae74571f24b465b4a1431e81e2ad51336cb0ded733a55a1aa3eccac196" "checksum rpassword 4.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f" "checksum rusqlite 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)" = "64a656821bb6317a84b257737b7934f79c0dbb7eb694710475908280ebad3e64" "checksum rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum rustversion 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b3bba175698996010c4f6dce5e7f173b6eb781fce25d2cfc45e27091ce0b79f6" -"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76" +"checksum ryu 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1" "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" "checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -"checksum schannel 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "039c25b130bd8c1321ee2d7de7fde2659fa9c2744e4bb29711cfc852ea53cd19" +"checksum schannel 0.1.19 (registry+https://github.com/rust-lang/crates.io-index)" = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" "checksum scheduled-thread-pool 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0988d7fdf88d5e5fcf5923a0f1e8ab345f3e98ab4bc6bc45a2d5ff7f7458fbf6" "checksum scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -"checksum security-framework 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "572dfa3a0785509e7a44b5b4bebcf94d41ba34e9ed9eb9df722545c3b3c4144a" -"checksum security-framework-sys 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8ddb15a5fec93b7021b8a9e96009c5d8d51c15673569f7c0f6b7204e5b7b404f" +"checksum security-framework 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535" +"checksum security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" "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.106 (registry+https://github.com/rust-lang/crates.io-index)" = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" +"checksum serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)" = "99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c" "checksum serde_cbor 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622" -"checksum serde_derive 1.0.106 (registry+https://github.com/rust-lang/crates.io-index)" = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c" -"checksum serde_json 1.0.51 (registry+https://github.com/rust-lang/crates.io-index)" = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9" +"checksum serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)" = "818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984" +"checksum serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)" = "993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2" "checksum serde_urlencoded 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" "checksum sha2 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d963c78ce367df26d7ea8b8cc655c651b42e8a1e584e869c1e17dae3ccb116a" "checksum shellexpand 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2b22262a9aaf9464d356f656fea420634f78c881c5eebd5ef5e66d8b9bc603" "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" -"checksum smallvec 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a" +"checksum smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4" "checksum socket2 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)" = "03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918" "checksum spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" "checksum sshkeys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1b37f3de188a88f21cd5bd70072e85261e683850c749cd9f93b858e1cdac3a67" -"checksum standback 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ee531c64ad0f80d289504bd32fb047f42a9e957cda584276ab96eb587e9abac3" +"checksum standback 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "47e4b8c631c998468961a9ea159f064c5c8499b95b5e4a34b77849d45949d540" "checksum stdweb 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)" = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" "checksum stdweb-derive 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" "checksum stdweb-internal-macros 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" "checksum stdweb-internal-runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" "checksum strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" -"checksum structopt 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "ff6da2e8d107dfd7b74df5ef4d205c6aebee0706c647f6bc6a2d5789905c00fb" -"checksum structopt-derive 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a489c87c08fbaf12e386665109dd13470dcc9c4583ea3e10dd2b4523e5ebd9ac" -"checksum syn 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" +"checksum structopt 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "863246aaf5ddd0d6928dfeb1a9ca65f505599e4e1b399935ef7e75107516b4ef" +"checksum structopt-derive 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d239ca4b13aee7a2142e6795cbd69e457665ff8037aed33b3effdc430d2f927a" +"checksum syn 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)" = "e8e5aa70697bb26ee62214ae3288465ecec0000f05182f039b477001f08f5ae7" "checksum syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" "checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" "checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" "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 threadpool 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865" -"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" -"checksum time 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "6329a7835505d46f5f3a9a2c237f8d6bf5ca6f0015decb3698ba57fcdbb609ba" +"checksum threadpool 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e8dae184447c15d5a6916d973c642aec485105a13cd238192a6927ae3e077d66" +"checksum time 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +"checksum time 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)" = "e1330829d2e6c06771eeae476be12ff1aa9eb5e29ca718a431ab27168efde6c1" "checksum time-macros 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9ae9b6e9f095bc105e183e3cd493d72579be3181ad4004fceb01adbe9eecab2d" -"checksum time-macros-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e987cfe0537f575b5fc99909de6185f6c19c3ad8889e2275e686a873d0869ba1" -"checksum tinytemplate 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "57a3c6667d3e65eb1bc3aed6fd14011c6cbc3a0665218ab7f5daf040b9ec371a" -"checksum tokio 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)" = "39fb9142eb6e9cc37f4f29144e62618440b149a138eee01a7bbe9b9226aaf17c" +"checksum time-macros-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" +"checksum tinytemplate 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "45e4bc5ac99433e0dcb8b9f309dd271a165ae37dde129b9e0ce1bfdd8bfe4891" +"checksum tokio 0.2.20 (registry+https://github.com/rust-lang/crates.io-index)" = "05c1d570eb1a36f0345a5ce9c6c6e665b70b73d11236912c0b477616aeec47b1" "checksum tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389" "checksum tokio-openssl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3c4b08c5f4208e699ede3df2520aca2e82401b2de33f45e96696a074480be594" -"checksum tokio-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7bde02a3a5291395f59b06ec6945a3077602fac2b07eeeaf0dee2122f3619828" +"checksum tokio-tls 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343" "checksum tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930" "checksum tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" "checksum toml 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" @@ -3297,14 +3362,14 @@ dependencies = [ "checksum trust-dns-proto 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2a7f3a2ab8a919f5eca52a468866a67ed7d3efa265d48a652a9a3452272b413f" "checksum trust-dns-resolver 0.18.0-alpha.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6f90b1502b226f8b2514c6d5b37bafa8c200d7ca4102d57dc36ee0f3b7a04a2f" "checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" -"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" +"checksum typenum 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" "checksum unicase 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" "checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" "checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" "checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60369ef7a31de49bcb3f6ca728d4ba7300d9a1658f94c727d4cab8c8d9f4aece" +"checksum untrusted 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" "checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" "checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" "checksum uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" @@ -3317,19 +3382,19 @@ dependencies = [ "checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" "checksum want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" "checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -"checksum wasm-bindgen 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "2cc57ce05287f8376e998cbddfb4c8cb43b84a7ec55cf4551d7c00eef317a47f" -"checksum wasm-bindgen-backend 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d967d37bf6c16cca2973ca3af071d0a2523392e4a594548155d89a678f4237cd" -"checksum wasm-bindgen-futures 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "7add542ea1ac7fdaa9dc25e031a6af33b7d63376292bd24140c637d00d1c312a" -"checksum wasm-bindgen-macro 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "8bd151b63e1ea881bb742cd20e1d6127cef28399558f3b5d415289bc41eee3a4" -"checksum wasm-bindgen-macro-support 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "d68a5b36eef1be7868f668632863292e37739656a80fc4b9acec7b0bd35a4931" -"checksum wasm-bindgen-shared 0.2.60 (registry+https://github.com/rust-lang/crates.io-index)" = "daf76fe7d25ac79748a37538b7daeed1c7a6867c92d3245c12c6222e4a20d639" -"checksum web-sys 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)" = "2d6f51648d8c56c366144378a33290049eafdd784071077f6fe37dae64c1c4cb" +"checksum wasm-bindgen 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "e3c7d40d09cdbf0f4895ae58cf57d92e1e57a9dd8ed2e8390514b54a47cc5551" +"checksum wasm-bindgen-backend 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "c3972e137ebf830900db522d6c8fd74d1900dcfc733462e9a12e942b00b4ac94" +"checksum wasm-bindgen-futures 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "8a369c5e1dfb7569e14d62af4da642a3cbc2f9a3652fe586e26ac22222aa4b04" +"checksum wasm-bindgen-macro 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "2cd85aa2c579e8892442954685f0d801f9129de24fa2136b2c6a539c76b65776" +"checksum wasm-bindgen-macro-support 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "8eb197bd3a47553334907ffd2f16507b4f4f01bbec3ac921a7719e0decdfe72a" +"checksum wasm-bindgen-shared 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "a91c2916119c17a8e316507afaaa2dd94b47646048014bbdf6bef098c1bb58ad" +"checksum web-sys 0.3.39 (registry+https://github.com/rust-lang/crates.io-index)" = "8bc359e5dd3b46cb9687a051d50a2fdd228e4ba7cf6fcf861a5365c3d671a642" "checksum widestring 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effc0e4ff8085673ea7b9b2e3c73f6bd4d118810c9009ed8f1e16bd96c331db6" "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.4 (registry+https://github.com/rust-lang/crates.io-index)" = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e" +"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 winreg 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" diff --git a/kanidm_client/src/asynchronous.rs b/kanidm_client/src/asynchronous.rs index 7b14a6124..59afc1d15 100644 --- a/kanidm_client/src/asynchronous.rs +++ b/kanidm_client/src/asynchronous.rs @@ -1,5 +1,4 @@ use crate::{ClientError, KanidmClientBuilder, APPLICATION_JSON}; -use reqwest; use reqwest::header::CONTENT_TYPE; use serde::de::DeserializeOwned; use serde::Serialize; diff --git a/kanidm_client/src/lib.rs b/kanidm_client/src/lib.rs index ac0a1617c..5131e0b5b 100644 --- a/kanidm_client/src/lib.rs +++ b/kanidm_client/src/lib.rs @@ -4,7 +4,6 @@ #[macro_use] extern crate log; -use reqwest; use reqwest::header::CONTENT_TYPE; use serde::de::DeserializeOwned; use serde::Serialize; @@ -14,7 +13,6 @@ use std::fs::File; use std::io::Read; use std::path::Path; use std::time::Duration; -use toml; use uuid::Uuid; use kanidm_proto::v1::{ @@ -24,13 +22,12 @@ use kanidm_proto::v1::{ SetCredentialRequest, SetCredentialResponse, SingleStringRequest, TOTPSecret, UnixGroupToken, UnixUserToken, UserAuthToken, WhoamiResponse, }; -use serde_json; pub mod asynchronous; use crate::asynchronous::KanidmAsyncClient; -pub const APPLICATION_JSON: &'static str = "application/json"; +pub const APPLICATION_JSON: &str = "application/json"; #[derive(Debug)] pub enum ClientError { @@ -570,7 +567,7 @@ impl KanidmClient { gidnumber: Option, ) -> Result<(), ClientError> { let gx = GroupUnixExtend { - gidnumber: gidnumber, + gidnumber, }; self.perform_post_request(format!("/v1/group/{}/_unix", id).as_str(), gx) } @@ -733,7 +730,7 @@ impl KanidmClient { ) -> Result<(), ClientError> { let ux = AccountUnixExtend { shell: shell.map(|s| s.to_string()), - gidnumber: gidnumber, + gidnumber, }; self.perform_post_request(format!("/v1/account/{}/_unix", id).as_str(), ux) } diff --git a/kanidm_client/tests/default_entries.rs b/kanidm_client/tests/default_entries.rs index e44e17879..ec152d0ff 100644 --- a/kanidm_client/tests/default_entries.rs +++ b/kanidm_client/tests/default_entries.rs @@ -87,7 +87,7 @@ fn is_attr_writable(rsclient: &KanidmClient, id: &str, attr: &str) -> Option String { +impl fmt::Display for TOTPAlgo { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { - TOTPAlgo::Sha1 => "SHA1", - TOTPAlgo::Sha256 => "SHA256", - TOTPAlgo::Sha512 => "SHA512", + TOTPAlgo::Sha1 => write!(f, "SHA1"), + TOTPAlgo::Sha256 => write!(f, "SHA256"), + TOTPAlgo::Sha512 => write!(f, "SHA512"), } - .to_string() } } diff --git a/kanidm_tools/src/badlist_preprocess.rs b/kanidm_tools/src/badlist_preprocess.rs index e1c3f0ba2..958fbfff7 100644 --- a/kanidm_tools/src/badlist_preprocess.rs +++ b/kanidm_tools/src/badlist_preprocess.rs @@ -8,9 +8,7 @@ use kanidm_proto::v1::Modify; use log::{debug, error, info}; use rayon::prelude::*; -use serde_json; use structopt::StructOpt; -use zxcvbn; #[derive(Debug, StructOpt)] struct ClientOpt { diff --git a/kanidm_tools/src/cli/account.rs b/kanidm_tools/src/cli/account.rs index 567ceed38..7eb7f3ac1 100644 --- a/kanidm_tools/src/cli/account.rs +++ b/kanidm_tools/src/cli/account.rs @@ -156,7 +156,7 @@ impl AccountOpt { } } - pub fn exec(&self) -> () { + pub fn exec(&self) { match self { // id/cred/primary/set AccountOpt::Credential(acopt) => match acopt { diff --git a/kanidm_tools/src/cli/common.rs b/kanidm_tools/src/cli/common.rs index 9df7d1112..57509cdc7 100644 --- a/kanidm_tools/src/cli/common.rs +++ b/kanidm_tools/src/cli/common.rs @@ -1,5 +1,4 @@ use kanidm_client::{KanidmClient, KanidmClientBuilder}; -use shellexpand; use std::path::PathBuf; use structopt::StructOpt; diff --git a/kanidm_tools/src/cli/group.rs b/kanidm_tools/src/cli/group.rs index 3d5186c01..4f1fba3bb 100644 --- a/kanidm_tools/src/cli/group.rs +++ b/kanidm_tools/src/cli/group.rs @@ -66,7 +66,7 @@ impl GroupOpt { } } - pub fn exec(&self) -> () { + pub fn exec(&self) { match self { GroupOpt::List(copt) => { let client = copt.to_client(); diff --git a/kanidm_tools/src/cli/lib.rs b/kanidm_tools/src/cli/lib.rs index 6cc43f553..2f9d3bb2f 100644 --- a/kanidm_tools/src/cli/lib.rs +++ b/kanidm_tools/src/cli/lib.rs @@ -32,7 +32,7 @@ impl SelfOpt { } } - pub fn exec(&self) -> () { + pub fn exec(&self) { match self { SelfOpt::Whoami(copt) => { let client = copt.to_client(); @@ -91,7 +91,7 @@ impl ClientOpt { } } - pub fn exec(&self) -> () { + pub fn exec(&self) { match self { ClientOpt::Raw(ropt) => ropt.exec(), ClientOpt::CSelf(csopt) => csopt.exec(), diff --git a/kanidm_tools/src/cli/raw.rs b/kanidm_tools/src/cli/raw.rs index 91ed3e680..ff08cebe6 100644 --- a/kanidm_tools/src/cli/raw.rs +++ b/kanidm_tools/src/cli/raw.rs @@ -67,7 +67,7 @@ impl RawOpt { } } - pub fn exec(&self) -> () { + pub fn exec(&self) { match self { RawOpt::Search(sopt) => { let client = sopt.commonopts.to_client(); diff --git a/kanidm_tools/src/cli/recycle.rs b/kanidm_tools/src/cli/recycle.rs index 1a550b036..2516528ab 100644 --- a/kanidm_tools/src/cli/recycle.rs +++ b/kanidm_tools/src/cli/recycle.rs @@ -23,7 +23,7 @@ impl RecycleOpt { } } - pub fn exec(&self) -> () { + pub fn exec(&self) { match self { RecycleOpt::List(copt) => { let client = copt.to_client(); diff --git a/kanidm_tools/src/ssh_authorizedkeys.rs b/kanidm_tools/src/ssh_authorizedkeys.rs index 5a7294b9d..d21e9117a 100644 --- a/kanidm_tools/src/ssh_authorizedkeys.rs +++ b/kanidm_tools/src/ssh_authorizedkeys.rs @@ -3,7 +3,6 @@ use std::path::PathBuf; use kanidm_client::KanidmClientBuilder; use log::debug; -use shellexpand; use structopt::StructOpt; #[derive(Debug, StructOpt)] diff --git a/kanidmd/Cargo.toml b/kanidmd/Cargo.toml index f38b6ef71..e0a41b028 100644 --- a/kanidmd/Cargo.toml +++ b/kanidmd/Cargo.toml @@ -41,7 +41,6 @@ chrono = "0.4" cookie = "0.13" regex = "1" lazy_static = "1.2.0" -# lru = "0.1" tokio = "0.2" futures = "0.3" @@ -60,6 +59,7 @@ structopt = { version = "0.3", default-features = false } time = "0.1" concread = "0.1" +# concread = { path = "../../concread" } openssl = "0.10" sshkeys = "0.1" @@ -68,7 +68,7 @@ rpassword = "4.0" num_cpus = "1.10" idlset = { version = "0.1" , features = ["use_smallvec"] } -# idlset = { version = "0.1" } +# idlset = { path = "../../idlset", features = ["use_smallvec"] } zxcvbn = "2.0" base64 = "0.12" diff --git a/kanidmd/src/lib/access.rs b/kanidmd/src/lib/access.rs index 87df39ff7..bf5c27975 100644 --- a/kanidmd/src/lib/access.rs +++ b/kanidmd/src/lib/access.rs @@ -52,7 +52,7 @@ pub struct AccessControlSearch { impl AccessControlSearch { pub fn try_from( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, value: &Entry, ) -> Result { if !value.attribute_value_pres("class", &CLASS_ACS) { @@ -102,7 +102,7 @@ pub struct AccessControlDelete { impl AccessControlDelete { pub fn try_from( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, value: &Entry, ) -> Result { if !value.attribute_value_pres("class", &CLASS_ACD) { @@ -145,7 +145,7 @@ pub struct AccessControlCreate { impl AccessControlCreate { pub fn try_from( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, value: &Entry, ) -> Result { if !value.attribute_value_pres("class", &CLASS_ACC) { @@ -203,7 +203,7 @@ pub struct AccessControlModify { impl AccessControlModify { pub fn try_from( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, value: &Entry, ) -> Result { if !value.attribute_value_pres("class", &CLASS_ACM) { @@ -271,7 +271,7 @@ struct AccessControlProfile { impl AccessControlProfile { fn try_from( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, value: &Entry, ) -> Result { // Assert we have class access_control_profile @@ -1308,11 +1308,11 @@ mod tests { // really protects us *a lot* here, but it's nice to have defence and // layers of validation. - let qs_write = qs.write(duration_from_epoch_now()); + let mut qs_write = qs.write(duration_from_epoch_now()); acp_from_entry_err!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1327,7 +1327,7 @@ mod tests { acp_from_entry_err!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1342,7 +1342,7 @@ mod tests { acp_from_entry_err!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1360,7 +1360,7 @@ mod tests { // "\"Self\"" acp_from_entry_ok!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1384,11 +1384,11 @@ mod tests { #[test] fn test_access_acp_delete_parser() { run_test!(|qs: &QueryServer, audit: &mut AuditScope| { - let qs_write = qs.write(duration_from_epoch_now()); + let mut qs_write = qs.write(duration_from_epoch_now()); acp_from_entry_err!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1409,7 +1409,7 @@ mod tests { acp_from_entry_ok!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1434,12 +1434,12 @@ mod tests { fn test_access_acp_search_parser() { run_test!(|qs: &QueryServer, audit: &mut AuditScope| { // Test that parsing search access controls works. - let qs_write = qs.write(duration_from_epoch_now()); + let mut qs_write = qs.write(duration_from_epoch_now()); // Missing class acp acp_from_entry_err!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1462,7 +1462,7 @@ mod tests { // Missing class acs acp_from_entry_err!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1485,7 +1485,7 @@ mod tests { // Missing attr acp_search_attr acp_from_entry_err!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1507,7 +1507,7 @@ mod tests { // All good! acp_from_entry_ok!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1533,11 +1533,11 @@ mod tests { fn test_access_acp_modify_parser() { run_test!(|qs: &QueryServer, audit: &mut AuditScope| { // Test that parsing modify access controls works. - let qs_write = qs.write(duration_from_epoch_now()); + let mut qs_write = qs.write(duration_from_epoch_now()); acp_from_entry_err!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1561,7 +1561,7 @@ mod tests { acp_from_entry_ok!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1582,7 +1582,7 @@ mod tests { acp_from_entry_ok!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1610,11 +1610,11 @@ mod tests { fn test_access_acp_create_parser() { run_test!(|qs: &QueryServer, audit: &mut AuditScope| { // Test that parsing create access controls works. - let qs_write = qs.write(duration_from_epoch_now()); + let mut qs_write = qs.write(duration_from_epoch_now()); acp_from_entry_err!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1637,7 +1637,7 @@ mod tests { acp_from_entry_ok!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1658,7 +1658,7 @@ mod tests { acp_from_entry_ok!( audit, - &qs_write, + &mut qs_write, r#"{ "valid": null, "state": null, @@ -1688,7 +1688,7 @@ mod tests { // given a single &str, we can evaluate all types from a single record. // This is valid, and could exist, IE a rule to allow create, search and modify // over a single scope. - let qs_write = qs.write(duration_from_epoch_now()); + let mut qs_write = qs.write(duration_from_epoch_now()); let e: &str = r#"{ "valid": null, @@ -1719,10 +1719,10 @@ mod tests { } }"#; - acp_from_entry_ok!(audit, &qs_write, e, AccessControlCreate); - acp_from_entry_ok!(audit, &qs_write, e, AccessControlDelete); - acp_from_entry_ok!(audit, &qs_write, e, AccessControlModify); - acp_from_entry_ok!(audit, &qs_write, e, AccessControlSearch); + acp_from_entry_ok!(audit, &mut qs_write, e, AccessControlCreate); + acp_from_entry_ok!(audit, &mut qs_write, e, AccessControlDelete); + acp_from_entry_ok!(audit, &mut qs_write, e, AccessControlModify); + acp_from_entry_ok!(audit, &mut qs_write, e, AccessControlSearch); }) } diff --git a/kanidmd/src/lib/actors/v1_read.rs b/kanidmd/src/lib/actors/v1_read.rs index c7b4db005..ad2f078b7 100644 --- a/kanidmd/src/lib/actors/v1_read.rs +++ b/kanidmd/src/lib/actors/v1_read.rs @@ -207,10 +207,10 @@ impl Handler for QueryServerReadV1 { let mut audit = AuditScope::new("search"); let res = audit_segment!(&mut audit, || { // Begin a read - let qs_read = self.qs.read(); + let mut qs_read = self.qs.read(); // Make an event from the request - let srch = match SearchEvent::from_message(&mut audit, msg, &qs_read) { + let srch = match SearchEvent::from_message(&mut audit, msg, &mut qs_read) { Ok(s) => s, Err(e) => { audit_log!(audit, "Failed to begin search: {:?}", e); @@ -221,9 +221,8 @@ impl Handler for QueryServerReadV1 { audit_log!(audit, "Begin event {:?}", srch); match qs_read.search_ext(&mut audit, &srch) { - Ok(entries) => { - SearchResult::new(&mut audit, &qs_read, entries).map(|ok_sr| ok_sr.response()) - } + Ok(entries) => SearchResult::new(&mut audit, &mut qs_read, entries) + .map(|ok_sr| ok_sr.response()), Err(e) => Err(e), } }); @@ -286,7 +285,7 @@ impl Handler for QueryServerReadV1 { let res = audit_segment!(&mut audit, || { // TODO #62: Move this to IdmServer!!! // Begin a read - let qs_read = self.qs.read(); + let mut qs_read = self.qs.read(); // Make an event from the whoami request. This will process the event and // generate a selfuuid search. @@ -297,7 +296,7 @@ impl Handler for QueryServerReadV1 { // this far. let uat = msg.uat.clone().ok_or(OperationError::NotAuthenticated)?; - let srch = match SearchEvent::from_whoami_request(&mut audit, msg.uat, &qs_read) { + let srch = match SearchEvent::from_whoami_request(&mut audit, msg.uat, &mut qs_read) { Ok(s) => s, Err(e) => { audit_log!(audit, "Failed to begin whoami: {:?}", e); @@ -315,7 +314,7 @@ impl Handler for QueryServerReadV1 { 1 => { let e = entries.pop().expect("Entry length mismatch!!!"); // Now convert to a response, and return - WhoamiResult::new(&mut audit, &qs_read, e, uat) + WhoamiResult::new(&mut audit, &mut qs_read, e, uat) .map(|ok_wr| ok_wr.response()) } // Somehow we matched multiple, which should be impossible. @@ -339,10 +338,10 @@ impl Handler for QueryServerReadV1 { fn handle(&mut self, msg: InternalSearchMessage, _: &mut Self::Context) -> Self::Result { let mut audit = AuditScope::new("internal_search_message"); let res = audit_segment!(&mut audit, || { - let qs_read = self.qs.read(); + let mut qs_read = self.qs.read(); // Make an event from the request - let srch = match SearchEvent::from_internal_message(&mut audit, msg, &qs_read) { + let srch = match SearchEvent::from_internal_message(&mut audit, msg, &mut qs_read) { Ok(s) => s, Err(e) => { audit_log!(audit, "Failed to begin search: {:?}", e); @@ -353,7 +352,7 @@ impl Handler for QueryServerReadV1 { audit_log!(audit, "Begin event {:?}", srch); match qs_read.search_ext(&mut audit, &srch) { - Ok(entries) => SearchResult::new(&mut audit, &qs_read, entries) + Ok(entries) => SearchResult::new(&mut audit, &mut qs_read, entries) .map(|ok_sr| ok_sr.into_proto_array()), Err(e) => Err(e), } @@ -373,21 +372,22 @@ impl Handler for QueryServerReadV1 { ) -> Self::Result { let mut audit = AuditScope::new("internal_search_recycle_message"); let res = audit_segment!(&mut audit, || { - let qs_read = self.qs.read(); + let mut qs_read = self.qs.read(); // Make an event from the request - let srch = match SearchEvent::from_internal_recycle_message(&mut audit, msg, &qs_read) { - Ok(s) => s, - Err(e) => { - audit_log!(audit, "Failed to begin recycled search: {:?}", e); - return Err(e); - } - }; + let srch = + match SearchEvent::from_internal_recycle_message(&mut audit, msg, &mut qs_read) { + Ok(s) => s, + Err(e) => { + audit_log!(audit, "Failed to begin recycled search: {:?}", e); + return Err(e); + } + }; audit_log!(audit, "Begin event {:?}", srch); match qs_read.search_ext(&mut audit, &srch) { - Ok(entries) => SearchResult::new(&mut audit, &qs_read, entries) + Ok(entries) => SearchResult::new(&mut audit, &mut qs_read, entries) .map(|ok_sr| ok_sr.into_proto_array()), Err(e) => Err(e), } @@ -403,7 +403,7 @@ impl Handler for QueryServerReadV1 { fn handle(&mut self, msg: InternalRadiusReadMessage, _: &mut Self::Context) -> Self::Result { let mut audit = AuditScope::new("internal_radius_read_message"); let res = audit_segment!(&mut audit, || { - let qs_read = self.qs.read(); + let mut qs_read = self.qs.read(); let target_uuid = match Uuid::parse_str(msg.uuid_or_name.as_str()) { Ok(u) => u, @@ -420,7 +420,7 @@ impl Handler for QueryServerReadV1 { &mut audit, msg.uat, target_uuid, - &qs_read, + &mut qs_read, ) { Ok(s) => s, Err(e) => { @@ -461,7 +461,7 @@ impl Handler for QueryServerReadV1 { ) -> Self::Result { let mut audit = AuditScope::new("internal_radius_token_read_message"); let res = audit_segment!(&mut audit, || { - let idm_read = self.idms.proxy_read(); + let mut idm_read = self.idms.proxy_read(); let target_uuid = match Uuid::parse_str(msg.uuid_or_name.as_str()) { Ok(u) => u, @@ -477,7 +477,7 @@ impl Handler for QueryServerReadV1 { // Make an event from the request let rate = match RadiusAuthTokenEvent::from_parts( &mut audit, - &idm_read.qs_read, + &mut idm_read.qs_read, msg.uat, target_uuid, ) { @@ -507,7 +507,7 @@ impl Handler for QueryServerReadV1 { ) -> Self::Result { let mut audit = AuditScope::new("internal_unix_token_read_message"); let res = audit_segment!(&mut audit, || { - let idm_read = self.idms.proxy_read(); + let mut idm_read = self.idms.proxy_read(); let target_uuid = Uuid::parse_str(msg.uuid_or_name.as_str()).or_else(|_| { idm_read @@ -522,7 +522,7 @@ impl Handler for QueryServerReadV1 { // Make an event from the request let rate = match UnixUserTokenEvent::from_parts( &mut audit, - &idm_read.qs_read, + &mut idm_read.qs_read, msg.uat, target_uuid, ) { @@ -552,7 +552,7 @@ impl Handler for QueryServerReadV1 { ) -> Self::Result { let mut audit = AuditScope::new("internal_unixgroup_token_read_message"); let res = audit_segment!(&mut audit, || { - let idm_read = self.idms.proxy_read(); + let mut idm_read = self.idms.proxy_read(); let target_uuid = Uuid::parse_str(msg.uuid_or_name.as_str()).or_else(|_| { idm_read @@ -567,7 +567,7 @@ impl Handler for QueryServerReadV1 { // Make an event from the request let rate = match UnixGroupTokenEvent::from_parts( &mut audit, - &idm_read.qs_read, + &mut idm_read.qs_read, msg.uat, target_uuid, ) { @@ -593,7 +593,7 @@ impl Handler for QueryServerReadV1 { fn handle(&mut self, msg: InternalSshKeyReadMessage, _: &mut Self::Context) -> Self::Result { let mut audit = AuditScope::new("internal_sshkey_read_message"); let res = audit_segment!(&mut audit, || { - let qs_read = self.qs.read(); + let mut qs_read = self.qs.read(); let target_uuid = match Uuid::parse_str(msg.uuid_or_name.as_str()) { Ok(u) => u, @@ -610,7 +610,7 @@ impl Handler for QueryServerReadV1 { &mut audit, msg.uat, target_uuid, - &qs_read, + &mut qs_read, ) { Ok(s) => s, Err(e) => { @@ -650,7 +650,7 @@ impl Handler for QueryServerReadV1 { fn handle(&mut self, msg: InternalSshKeyTagReadMessage, _: &mut Self::Context) -> Self::Result { let mut audit = AuditScope::new("internal_sshkey_tag_read_message"); let res = audit_segment!(&mut audit, || { - let qs_read = self.qs.read(); + let mut qs_read = self.qs.read(); let InternalSshKeyTagReadMessage { uat, @@ -669,15 +669,18 @@ impl Handler for QueryServerReadV1 { }; // Make an event from the request - let srch = - match SearchEvent::from_target_uuid_request(&mut audit, uat, target_uuid, &qs_read) - { - Ok(s) => s, - Err(e) => { - audit_log!(audit, "Failed to begin search: {:?}", e); - return Err(e); - } - }; + let srch = match SearchEvent::from_target_uuid_request( + &mut audit, + uat, + target_uuid, + &mut qs_read, + ) { + Ok(s) => s, + Err(e) => { + audit_log!(audit, "Failed to begin search: {:?}", e); + return Err(e); + } + }; audit_log!(audit, "Begin event {:?}", srch); @@ -731,7 +734,7 @@ impl Handler for QueryServerReadV1 { // Make an event from the request let uuae = match UnixUserAuthEvent::from_parts( &mut audit, - &idm_write.qs_read, + &mut idm_write.qs_read, msg.uat, target_uuid, msg.cred, diff --git a/kanidmd/src/lib/actors/v1_write.rs b/kanidmd/src/lib/actors/v1_write.rs index a1159f04d..e8275fdac 100644 --- a/kanidmd/src/lib/actors/v1_write.rs +++ b/kanidmd/src/lib/actors/v1_write.rs @@ -323,7 +323,8 @@ impl QueryServerWriteV1 { }; let mdf = - match ModifyEvent::from_parts(audit, uat, target_uuid, proto_ml, filter, &qs_write) { + match ModifyEvent::from_parts(audit, uat, target_uuid, proto_ml, filter, &mut qs_write) + { Ok(m) => m, Err(e) => { audit_log!(audit, "Failed to begin modify: {:?}", e); @@ -364,7 +365,7 @@ impl QueryServerWriteV1 { target_uuid, ml, filter, - &qs_write, + &mut qs_write, ) { Ok(m) => m, Err(e) => { @@ -389,7 +390,7 @@ impl Handler for QueryServerWriteV1 { let res = audit_segment!(&mut audit, || { let mut qs_write = self.qs.write(duration_from_epoch_now()); - let crt = match CreateEvent::from_message(&mut audit, msg, &qs_write) { + let crt = match CreateEvent::from_message(&mut audit, msg, &mut qs_write) { Ok(c) => c, Err(e) => { audit_log!(audit, "Failed to begin create: {:?}", e); @@ -416,7 +417,7 @@ impl Handler for QueryServerWriteV1 { let mut audit = AuditScope::new("modify"); let res = audit_segment!(&mut audit, || { let mut qs_write = self.qs.write(duration_from_epoch_now()); - let mdf = match ModifyEvent::from_message(&mut audit, msg, &qs_write) { + let mdf = match ModifyEvent::from_message(&mut audit, msg, &mut qs_write) { Ok(m) => m, Err(e) => { audit_log!(audit, "Failed to begin modify: {:?}", e); @@ -443,7 +444,7 @@ impl Handler for QueryServerWriteV1 { let res = audit_segment!(&mut audit, || { let mut qs_write = self.qs.write(duration_from_epoch_now()); - let del = match DeleteEvent::from_message(&mut audit, msg, &qs_write) { + let del = match DeleteEvent::from_message(&mut audit, msg, &mut qs_write) { Ok(d) => d, Err(e) => { audit_log!(audit, "Failed to begin delete: {:?}", e); @@ -470,7 +471,8 @@ impl Handler for QueryServerWriteV1 { let res = audit_segment!(&mut audit, || { let mut qs_write = self.qs.write(duration_from_epoch_now()); - let del = match DeleteEvent::from_parts(&mut audit, msg.uat, msg.filter, &qs_write) { + let del = match DeleteEvent::from_parts(&mut audit, msg.uat, msg.filter, &mut qs_write) + { Ok(d) => d, Err(e) => { audit_log!(audit, "Failed to begin delete: {:?}", e); @@ -497,14 +499,18 @@ impl Handler for QueryServerWriteV1 { let res = audit_segment!(&mut audit, || { let mut qs_write = self.qs.write(duration_from_epoch_now()); - let rev = - match ReviveRecycledEvent::from_parts(&mut audit, msg.uat, msg.filter, &qs_write) { - Ok(r) => r, - Err(e) => { - audit_log!(audit, "Failed to begin revive: {:?}", e); - return Err(e); - } - }; + let rev = match ReviveRecycledEvent::from_parts( + &mut audit, + msg.uat, + msg.filter, + &mut qs_write, + ) { + Ok(r) => r, + Err(e) => { + audit_log!(audit, "Failed to begin revive: {:?}", e); + return Err(e); + } + }; audit_log!(audit, "Begin revive event {:?}", rev); @@ -552,7 +558,7 @@ impl Handler for QueryServerWriteV1 { SetCredentialRequest::Password(cleartext) => { let pce = PasswordChangeEvent::from_parts( &mut audit, - &idms_prox_write.qs_write, + &mut idms_prox_write.qs_write, msg.uat, target_uuid, cleartext, @@ -574,7 +580,7 @@ impl Handler for QueryServerWriteV1 { SetCredentialRequest::GeneratePassword => { let gpe = GeneratePasswordEvent::from_parts( &mut audit, - &idms_prox_write.qs_write, + &mut idms_prox_write.qs_write, msg.uat, target_uuid, msg.appid, @@ -595,7 +601,7 @@ impl Handler for QueryServerWriteV1 { SetCredentialRequest::TOTPGenerate(label) => { let gte = GenerateTOTPEvent::from_parts( &mut audit, - &idms_prox_write.qs_write, + &mut idms_prox_write.qs_write, msg.uat, target_uuid, label, @@ -615,7 +621,7 @@ impl Handler for QueryServerWriteV1 { SetCredentialRequest::TOTPVerify(uuid, chal) => { let vte = VerifyTOTPEvent::from_parts( &mut audit, - &idms_prox_write.qs_write, + &mut idms_prox_write.qs_write, msg.uat, target_uuid, uuid, @@ -652,7 +658,7 @@ impl Handler for QueryServerWriteV1 { let pce = PasswordChangeEvent::from_idm_account_set_password( &mut audit, - &idms_prox_write.qs_write, + &mut idms_prox_write.qs_write, msg, ) .map_err(|e| { @@ -697,7 +703,7 @@ impl Handler for QueryServerWriteV1 { let rrse = RegenerateRadiusSecretEvent::from_parts( &mut audit, - &idms_prox_write.qs_write, + &mut idms_prox_write.qs_write, msg.uat, target_uuid, ) @@ -742,7 +748,7 @@ impl Handler for QueryServerWriteV1 { target_uuid, msg.attr, msg.filter, - &qs_write, + &mut qs_write, ) { Ok(m) => m, Err(e) => { @@ -788,7 +794,7 @@ impl Handler for QueryServerWriteV1 { target_uuid, proto_ml, msg.filter, - &qs_write, + &mut qs_write, ) { Ok(m) => m, Err(e) => { @@ -1021,7 +1027,7 @@ impl Handler for QueryServerWriteV1 { let upce = UnixPasswordChangeEvent::from_parts( &mut audit, - &idms_prox_write.qs_write, + &mut idms_prox_write.qs_write, msg.uat, target_uuid, msg.cred, @@ -1049,7 +1055,7 @@ impl Handler for QueryServerWriteV1 { let mut audit = AuditScope::new("purge tombstones"); audit_segment!(&mut audit, || { audit_log!(audit, "Begin purge tombstone event {:?}", msg); - let qs_write = self.qs.write(duration_from_epoch_now()); + let mut qs_write = self.qs.write(duration_from_epoch_now()); let res = qs_write .purge_tombstones(&mut audit) @@ -1069,7 +1075,7 @@ impl Handler for QueryServerWriteV1 { let mut audit = AuditScope::new("purge recycled"); audit_segment!(&mut audit, || { audit_log!(audit, "Begin purge recycled event {:?}", msg); - let qs_write = self.qs.write(duration_from_epoch_now()); + let mut qs_write = self.qs.write(duration_from_epoch_now()); let res = qs_write .purge_recycled(&mut audit) diff --git a/kanidmd/src/lib/audit.rs b/kanidmd/src/lib/audit.rs index 4ab209c85..43e16142e 100644 --- a/kanidmd/src/lib/audit.rs +++ b/kanidmd/src/lib/audit.rs @@ -5,7 +5,6 @@ use std::time::SystemTime; use chrono::offset::Utc; use chrono::DateTime; -use serde_json; #[macro_export] macro_rules! audit_log { diff --git a/kanidmd/src/lib/be/idl_arc_sqlite.rs b/kanidmd/src/lib/be/idl_arc_sqlite.rs new file mode 100644 index 000000000..8e91ffb27 --- /dev/null +++ b/kanidmd/src/lib/be/idl_arc_sqlite.rs @@ -0,0 +1,484 @@ +use crate::audit::AuditScope; +use crate::be::idl_sqlite::{ + IdlSqlite, IdlSqliteReadTransaction, IdlSqliteTransaction, IdlSqliteWriteTransaction, +}; +use crate::be::{IdRawEntry, IDL}; +use crate::entry::{Entry, EntryCommitted, EntrySealed}; +use crate::value::IndexType; +use concread::cache::arc::{Arc, ArcReadTxn, ArcWriteTxn}; +use idlset::IDLBitRange; +use kanidm_proto::v1::{ConsistencyError, OperationError}; +use uuid::Uuid; + +// use std::borrow::Borrow; + +const DEFAULT_CACHE_TARGET: usize = 1024; +const DEFAULT_IDL_CACHE_RATIO: usize = 16; +const DEFAULT_CACHE_RMISS: usize = 8; +const DEFAULT_CACHE_WMISS: usize = 8; + +#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)] +struct IdlCacheKey { + a: String, + i: IndexType, + k: String, +} + +/* +impl Borrow<(&str, &IndexType, &str)> for IdlCacheKey { + #[inline] + fn borrow(&self) -> &(&str, &IndexType, &str) { + &(self.a.as_str(), &self.i, self.k.as_str()) + } +} + +impl From<(&str, &IndexType, &str)> for IdlCacheKey { + fn from((a, i, k): (&str, &IndexType, &str)) -> IdlCacheKey { + IdlCacheKey { + a: a.to_string(), i: (*i).clone(), k: k.to_string() + } + } +} +*/ + +pub struct IdlArcSqlite { + db: IdlSqlite, + entry_cache: Arc>>, + idl_cache: Arc>, +} + +pub struct IdlArcSqliteReadTransaction<'a> { + db: IdlSqliteReadTransaction, + entry_cache: ArcReadTxn<'a, u64, Box>>, + idl_cache: ArcReadTxn<'a, IdlCacheKey, Box>, +} + +pub struct IdlArcSqliteWriteTransaction<'a> { + db: IdlSqliteWriteTransaction, + entry_cache: ArcWriteTxn<'a, u64, Box>>, + idl_cache: ArcWriteTxn<'a, IdlCacheKey, Box>, +} + +macro_rules! get_identry { + ( + $self:expr, + $au:expr, + $idl:expr + ) => {{ + match $idl { + IDL::Partial(idli) | IDL::Indexed(idli) => { + let mut result: Vec> = Vec::new(); + let mut nidl = IDLBitRange::new(); + + idli.into_iter().for_each(|i| { + // For all the id's in idl. + // is it in the cache? + match $self.entry_cache.get(&i) { + Some(eref) => result.push(eref.as_ref().clone()), + None => unsafe { nidl.push_id(i) }, + } + }); + + // Now, get anything from nidl that is needed. + let mut db_result = $self.db.get_identry($au, &IDL::Partial(nidl))?; + + // Clone everything from db_result into the cache. + db_result.iter().for_each(|e| { + $self.entry_cache.insert(e.get_id(), Box::new(e.clone())); + }); + + // Merge the two vecs + result.append(&mut db_result); + + // Return + Ok(result) + } + IDL::ALLIDS => $self.db.get_identry($au, $idl), + } + }}; +} + +macro_rules! get_identry_raw { + ( + $self:expr, + $au:expr, + $idl:expr + ) => {{ + // As a cache we have no concept of this, so we just bypass to the db. + $self.db.get_identry_raw($au, $idl) + }}; +} + +macro_rules! exists_idx { + ( + $self:expr, + $audit:expr, + $attr:expr, + $itype:expr + ) => {{ + // As a cache we have no concept of this, so we just bypass to the db. + $self.db.exists_idx($audit, $attr, $itype) + }}; +} + +macro_rules! get_idl { + ( + $self:expr, + $audit:expr, + $attr:expr, + $itype:expr, + $idx_key:expr + ) => {{ + // TODO: Find a way to implement borrow for this properly + // First attempt to get from this cache. + let cache_key = IdlCacheKey { + a: $attr.to_string(), + i: $itype.clone(), + k: $idx_key.to_string(), + }; + let cache_r = $self.idl_cache.get(&cache_key); + // If hit, continue. + if let Some(ref data) = cache_r { + return Ok(Some(data.as_ref().clone())); + } + // If miss, get from db *and* insert to the cache. + let db_r = $self.db.get_idl($audit, $attr, $itype, $idx_key)?; + if let Some(ref idl) = db_r { + $self.idl_cache.insert(cache_key, Box::new(idl.clone())) + } + Ok(db_r) + }}; +} + +pub trait IdlArcSqliteTransaction { + fn get_identry( + &mut self, + au: &mut AuditScope, + idl: &IDL, + ) -> Result>, OperationError>; + + fn get_identry_raw( + &self, + au: &mut AuditScope, + idl: &IDL, + ) -> Result, OperationError>; + + fn exists_idx( + &mut self, + audit: &mut AuditScope, + attr: &str, + itype: &IndexType, + ) -> Result; + + fn get_idl( + &mut self, + audit: &mut AuditScope, + attr: &str, + itype: &IndexType, + idx_key: &str, + ) -> Result, OperationError>; + + fn get_db_s_uuid(&self) -> Result, OperationError>; + + fn get_db_d_uuid(&self) -> Result, OperationError>; + + fn verify(&self) -> Vec>; +} + +impl<'a> IdlArcSqliteTransaction for IdlArcSqliteReadTransaction<'a> { + fn get_identry( + &mut self, + au: &mut AuditScope, + idl: &IDL, + ) -> Result>, OperationError> { + get_identry!(self, au, idl) + } + + fn get_identry_raw( + &self, + au: &mut AuditScope, + idl: &IDL, + ) -> Result, OperationError> { + get_identry_raw!(self, au, idl) + } + + fn exists_idx( + &mut self, + audit: &mut AuditScope, + attr: &str, + itype: &IndexType, + ) -> Result { + exists_idx!(self, audit, attr, itype) + } + + fn get_idl( + &mut self, + audit: &mut AuditScope, + attr: &str, + itype: &IndexType, + idx_key: &str, + ) -> Result, OperationError> { + get_idl!(self, audit, attr, itype, idx_key) + } + + fn get_db_s_uuid(&self) -> Result, OperationError> { + self.db.get_db_s_uuid() + } + + fn get_db_d_uuid(&self) -> Result, OperationError> { + self.db.get_db_d_uuid() + } + + fn verify(&self) -> Vec> { + self.db.verify() + } +} + +impl<'a> IdlArcSqliteTransaction for IdlArcSqliteWriteTransaction<'a> { + fn get_identry( + &mut self, + au: &mut AuditScope, + idl: &IDL, + ) -> Result>, OperationError> { + get_identry!(self, au, idl) + } + + fn get_identry_raw( + &self, + au: &mut AuditScope, + idl: &IDL, + ) -> Result, OperationError> { + get_identry_raw!(self, au, idl) + } + + fn exists_idx( + &mut self, + audit: &mut AuditScope, + attr: &str, + itype: &IndexType, + ) -> Result { + exists_idx!(self, audit, attr, itype) + } + + fn get_idl( + &mut self, + audit: &mut AuditScope, + attr: &str, + itype: &IndexType, + idx_key: &str, + ) -> Result, OperationError> { + get_idl!(self, audit, attr, itype, idx_key) + } + + fn get_db_s_uuid(&self) -> Result, OperationError> { + self.db.get_db_s_uuid() + } + + fn get_db_d_uuid(&self) -> Result, OperationError> { + self.db.get_db_d_uuid() + } + + fn verify(&self) -> Vec> { + self.db.verify() + } +} + +impl<'a> IdlArcSqliteWriteTransaction<'a> { + pub fn commit(self, audit: &mut AuditScope) -> Result<(), OperationError> { + let IdlArcSqliteWriteTransaction { + db, + entry_cache, + idl_cache, + } = self; + // Undo the caches in the reverse order. + db.commit(audit).and_then(|r| { + idl_cache.commit(); + entry_cache.commit(); + Ok(r) + }) + } + + pub fn get_id2entry_max_id(&self) -> Result { + // TODO: We could cache this too, and have this via the setup call + // to get the init value, using the ArcCell. + self.db.get_id2entry_max_id() + } + + pub fn write_identries<'b, I>( + &'b mut self, + au: &mut AuditScope, + entries: I, + ) -> Result<(), OperationError> + where + I: Iterator>, + { + // Danger! We know that the entry cache is valid to manipulate here + // but rust doesn't know that so it prevents the mut/immut borrow. + let e_cache = unsafe { &mut *(&mut self.entry_cache as *mut ArcWriteTxn<_, _>) }; + let m_entries = entries.map(|e| { + e_cache.insert(e.get_id(), Box::new(e.clone())); + e + }); + self.db.write_identries(au, m_entries) + } + + pub fn write_identries_raw( + &mut self, + au: &mut AuditScope, + entries: I, + ) -> Result<(), OperationError> + where + I: Iterator, + { + // Drop the entry cache. + self.entry_cache.clear(); + // Write the raw ents + self.db.write_identries_raw(au, entries) + } + + pub fn delete_identry(&mut self, au: &mut AuditScope, idl: I) -> Result<(), OperationError> + where + I: Iterator, + { + // Danger! We know that the entry cache is valid to manipulate here + // but rust doesn't know that so it prevents the mut/immut borrow. + let e_cache = unsafe { &mut *(&mut self.entry_cache as *mut ArcWriteTxn<_, _>) }; + let m_idl = idl.map(|i| { + e_cache.remove(i); + i + }); + self.db.delete_identry(au, m_idl) + } + + pub fn write_idl( + &mut self, + audit: &mut AuditScope, + attr: &str, + itype: &IndexType, + idx_key: &str, + idl: &IDLBitRange, + ) -> Result<(), OperationError> { + let cache_key = IdlCacheKey { + a: attr.to_string(), + i: itype.clone(), + k: idx_key.to_string(), + }; + // On idl == 0 the db will remove this, and synthesise an empty IDL on a miss + // but we can cache this as a new empty IDL instead, so that we can avoid the + // db lookup on this idl. + if idl.len() == 0 { + self.idl_cache + .insert(cache_key, Box::new(IDLBitRange::new())); + } else { + self.idl_cache.insert(cache_key, Box::new(idl.clone())); + } + self.db.write_idl(audit, attr, itype, idx_key, idl) + } + + pub fn create_name2uuid(&self, audit: &mut AuditScope) -> Result<(), OperationError> { + self.db.create_name2uuid(audit) + } + + pub fn create_uuid2name(&self, audit: &mut AuditScope) -> Result<(), OperationError> { + self.db.create_uuid2name(audit) + } + + pub fn create_idx( + &self, + audit: &mut AuditScope, + attr: &str, + itype: &IndexType, + ) -> Result<(), OperationError> { + // We don't need to affect this, so pass it down. + self.db.create_idx(audit, attr, itype) + } + + pub fn list_idxs(&self, audit: &mut AuditScope) -> Result, OperationError> { + // This is only used in tests, so bypass the cache. + self.db.list_idxs(audit) + } + + pub unsafe fn purge_idxs(&mut self, audit: &mut AuditScope) -> Result<(), OperationError> { + self.db.purge_idxs(audit).and_then(|r| { + self.idl_cache.clear(); + Ok(r) + }) + } + + pub unsafe fn purge_id2entry(&mut self, audit: &mut AuditScope) -> Result<(), OperationError> { + self.db.purge_id2entry(audit).and_then(|r| { + self.entry_cache.clear(); + Ok(r) + }) + } + + pub fn write_db_s_uuid(&self, nsid: Uuid) -> Result<(), OperationError> { + self.db.write_db_s_uuid(nsid) + } + + pub fn write_db_d_uuid(&self, nsid: Uuid) -> Result<(), OperationError> { + self.db.write_db_d_uuid(nsid) + } + + pub(crate) fn get_db_index_version(&self) -> i64 { + self.db.get_db_index_version() + } + + pub(crate) fn set_db_index_version(&self, v: i64) -> Result<(), OperationError> { + self.db.set_db_index_version(v) + } + + pub fn setup(&self, audit: &mut AuditScope) -> Result<(), OperationError> { + self.db.setup(audit) + } +} + +impl IdlArcSqlite { + pub fn new(audit: &mut AuditScope, path: &str, pool_size: u32) -> Result { + let db = IdlSqlite::new(audit, path, pool_size)?; + let entry_cache = Arc::new( + DEFAULT_CACHE_TARGET, + pool_size as usize, + DEFAULT_CACHE_RMISS, + DEFAULT_CACHE_WMISS, + ); + // The idl cache should have smaller items, and is critical for fast searches + // so we allow it to have a higher ratio of items relative to the entries. + let idl_cache = Arc::new( + DEFAULT_CACHE_TARGET * DEFAULT_IDL_CACHE_RATIO, + pool_size as usize, + DEFAULT_CACHE_RMISS, + DEFAULT_CACHE_WMISS, + ); + + Ok(IdlArcSqlite { + db, + entry_cache, + idl_cache, + }) + } + + pub fn read(&self) -> IdlArcSqliteReadTransaction { + // IMPORTANT! Always take entrycache FIRST + let entry_cache_read = self.entry_cache.read(); + let idl_cache_read = self.idl_cache.read(); + let db_read = self.db.read(); + IdlArcSqliteReadTransaction { + db: db_read, + entry_cache: entry_cache_read, + idl_cache: idl_cache_read, + } + } + + pub fn write(&self) -> IdlArcSqliteWriteTransaction { + // IMPORTANT! Always take entrycache FIRST + let entry_cache_write = self.entry_cache.write(); + let idl_cache_write = self.idl_cache.write(); + let db_write = self.db.write(); + IdlArcSqliteWriteTransaction { + db: db_write, + entry_cache: entry_cache_write, + idl_cache: idl_cache_write, + } + } +} diff --git a/kanidmd/src/lib/be/idl_sqlite.rs b/kanidmd/src/lib/be/idl_sqlite.rs index 93300e041..3a335e0ac 100644 --- a/kanidmd/src/lib/be/idl_sqlite.rs +++ b/kanidmd/src/lib/be/idl_sqlite.rs @@ -1,5 +1,6 @@ use crate::audit::AuditScope; -use crate::be::{IdEntry, IDL}; +use crate::be::{IdRawEntry, IDL}; +use crate::entry::{Entry, EntryCommitted, EntrySealed}; use crate::value::IndexType; use idlset::IDLBitRange; use kanidm_proto::v1::{ConsistencyError, OperationError}; @@ -7,7 +8,7 @@ use r2d2::Pool; use r2d2_sqlite::SqliteConnectionManager; use rusqlite::OptionalExtension; use rusqlite::NO_PARAMS; -use std::convert::TryFrom; +use std::convert::{TryFrom, TryInto}; use uuid::Uuid; // use uuid::Uuid; @@ -15,6 +16,46 @@ use uuid::Uuid; const DBV_ID2ENTRY: &str = "id2entry"; const DBV_INDEXV: &str = "indexv"; +#[derive(Debug)] +pub struct IdSqliteEntry { + id: i64, + data: Vec, +} + +impl TryFrom for IdRawEntry { + type Error = OperationError; + + fn try_from(value: IdSqliteEntry) -> Result { + if value.id <= 0 { + return Err(OperationError::InvalidEntryID); + } + Ok(IdRawEntry { + id: value + .id + .try_into() + .map_err(|_| OperationError::InvalidEntryID)?, + data: value.data, + }) + } +} + +impl TryFrom for IdSqliteEntry { + type Error = OperationError; + + fn try_from(value: IdRawEntry) -> Result { + if value.id <= 0 { + return Err(OperationError::InvalidEntryID); + } + Ok(IdSqliteEntry { + id: value + .id + .try_into() + .map_err(|_| OperationError::InvalidEntryID)?, + data: value.data, + }) + } +} + #[derive(Clone)] pub struct IdlSqlite { pool: Pool, @@ -33,7 +74,22 @@ pub struct IdlSqliteWriteTransaction { pub trait IdlSqliteTransaction { fn get_conn(&self) -> &r2d2::PooledConnection; - fn get_identry(&self, au: &mut AuditScope, idl: &IDL) -> Result, OperationError> { + fn get_identry( + &self, + au: &mut AuditScope, + idl: &IDL, + ) -> Result>, OperationError> { + self.get_identry_raw(au, idl)? + .into_iter() + .map(|ide| ide.into_entry()) + .collect() + } + + fn get_identry_raw( + &self, + au: &mut AuditScope, + idl: &IDL, + ) -> Result, OperationError> { // is the idl allids? match idl { IDL::ALLIDS => { @@ -45,7 +101,7 @@ pub trait IdlSqliteTransaction { ); let id2entry_iter = try_audit!( au, - stmt.query_map(NO_PARAMS, |row| Ok(IdEntry { + stmt.query_map(NO_PARAMS, |row| Ok(IdSqliteEntry { id: row.get(0)?, data: row.get(1)?, })), @@ -58,6 +114,10 @@ pub trait IdlSqliteTransaction { audit_log!(au, "SQLite Error {:?}", e); OperationError::SQLiteError }) + .and_then(|ise| { + // Convert the idsqlite to id raw + ise.try_into() + }) }) .collect() } @@ -78,7 +138,7 @@ pub trait IdlSqliteTransaction { let iid = i64::try_from(id).map_err(|_| OperationError::InvalidEntryID)?; let id2entry_iter = stmt .query_map(&[&iid], |row| { - Ok(IdEntry { + Ok(IdSqliteEntry { id: row.get(0)?, data: row.get(1)?, }) @@ -94,6 +154,10 @@ pub trait IdlSqliteTransaction { audit_log!(au, "SQLite Error {:?}", e); OperationError::SQLiteError }) + .and_then(|ise| { + // Convert the idsqlite to id raw + ise.try_into() + }) }) .collect(); let mut r = r?; @@ -246,12 +310,14 @@ pub trait IdlSqliteTransaction { }) } + #[allow(clippy::let_and_return)] fn verify(&self) -> Vec> { let mut stmt = match self.get_conn().prepare("PRAGMA integrity_check;") { Ok(r) => r, Err(_) => return vec![Err(ConsistencyError::SqliteIntegrityFailure)], }; + // Allow this as it actually extends the life of stmt let r = match stmt.query(NO_PARAMS) { Ok(mut rows) => { match rows.next() { @@ -361,7 +427,7 @@ impl IdlSqliteWriteTransaction { }) } - pub fn get_id2entry_max_id(&self) -> Result { + pub fn get_id2entry_max_id(&self) -> Result { let mut stmt = self .conn .prepare("SELECT MAX(id) as id_max FROM id2entry") @@ -372,23 +438,50 @@ impl IdlSqliteWriteTransaction { .exists(NO_PARAMS) .map_err(|_| OperationError::SQLiteError)?; - Ok(if v { + if v { // We have some rows, let get max! let i: Option = stmt .query_row(NO_PARAMS, |row| row.get(0)) .map_err(|_| OperationError::SQLiteError)?; i.unwrap_or(0) + .try_into() + .map_err(|_| OperationError::InvalidEntryID) } else { // No rows are present, return a 0. - 0 - }) + Ok(0) + } } - pub fn write_identries( + pub fn write_identries<'b, I>( + &'b self, + au: &mut AuditScope, + entries: I, + ) -> Result<(), OperationError> + where + I: Iterator>, + { + let raw_entries: Result, _> = entries + .map(|e| { + let dbe = e.to_dbentry(); + let data = serde_cbor::to_vec(&dbe).map_err(|_| OperationError::SerdeCborError)?; + + Ok(IdRawEntry { + id: e.get_id(), + data, + }) + }) + .collect(); + self.write_identries_raw(au, raw_entries?.into_iter()) + } + + pub fn write_identries_raw( &self, au: &mut AuditScope, - entries: Vec, - ) -> Result<(), OperationError> { + mut entries: I, + ) -> Result<(), OperationError> + where + I: Iterator, + { let mut stmt = try_audit!( au, self.conn @@ -399,18 +492,21 @@ impl IdlSqliteWriteTransaction { try_audit!( au, - entries.iter().try_for_each(|ser_ent| { + entries.try_for_each(|e| { + let ser_ent = IdSqliteEntry::try_from(e)?; stmt.execute_named(&[(":id", &ser_ent.id), (":data", &ser_ent.data)]) // remove the updated usize .map(|_| ()) - }), - "RusqliteError: {:?}", - OperationError::SQLiteError + .map_err(|_| OperationError::SQLiteError) + }) ); Ok(()) } - pub fn delete_identry(&self, au: &mut AuditScope, idl: Vec) -> Result<(), OperationError> { + pub fn delete_identry(&self, au: &mut AuditScope, mut idl: I) -> Result<(), OperationError> + where + I: Iterator, + { let mut stmt = try_audit!( au, self.conn.prepare("DELETE FROM id2entry WHERE id = :id"), @@ -418,8 +514,21 @@ impl IdlSqliteWriteTransaction { OperationError::SQLiteError ); - idl.iter().try_for_each(|id| { - stmt.execute(&[&id]) + idl.try_for_each(|id| { + let iid: i64 = id + .try_into() + .map_err(|_| OperationError::InvalidEntryID) + .and_then(|i| { + if i > 0 { + Ok(i) + } else { + Err(OperationError::InvalidEntryID) + } + })?; + + debug_assert!(iid > 0); + + stmt.execute(&[&iid]) .map(|_| ()) .map_err(|_| OperationError::SQLiteError) }) diff --git a/kanidmd/src/lib/be/mod.rs b/kanidmd/src/lib/be/mod.rs index efc9f807d..e2068145a 100644 --- a/kanidmd/src/lib/be/mod.rs +++ b/kanidmd/src/lib/be/mod.rs @@ -1,10 +1,9 @@ -use serde_cbor; -use serde_json; use std::convert::TryFrom; use std::fs; use crate::value::IndexType; use std::collections::BTreeSet; +use std::sync::Arc; use crate::audit::AuditScope; use crate::be::dbentry::DbEntry; @@ -17,15 +16,17 @@ use uuid::Uuid; pub mod dbentry; pub mod dbvalue; +mod idl_arc_sqlite; mod idl_sqlite; -use crate::be::idl_sqlite::{ - IdlSqlite, IdlSqliteReadTransaction, IdlSqliteTransaction, IdlSqliteWriteTransaction, +use crate::be::idl_arc_sqlite::{ + IdlArcSqlite, IdlArcSqliteReadTransaction, IdlArcSqliteTransaction, + IdlArcSqliteWriteTransaction, }; const FILTER_TEST_THRESHOLD: usize = 8; -#[derive(Debug)] +#[derive(Debug, Clone)] pub enum IDL { ALLIDS, Partial(IDLBitRange), @@ -33,28 +34,27 @@ pub enum IDL { } #[derive(Debug)] -pub struct IdEntry { - // TODO #20: for now this is i64 to make sqlite work, but entry is u64 for indexing reasons! - id: i64, +pub struct IdRawEntry { + id: u64, data: Vec, } #[derive(Clone)] pub struct Backend { - idlayer: IdlSqlite, + idlayer: Arc, } -pub struct BackendReadTransaction { - idlayer: IdlSqliteReadTransaction, +pub struct BackendReadTransaction<'a> { + idlayer: IdlArcSqliteReadTransaction<'a>, } -pub struct BackendWriteTransaction { +pub struct BackendWriteTransaction<'a> { idxmeta: BTreeSet<(String, IndexType)>, // idxcache: IdxCache, - idlayer: IdlSqliteWriteTransaction, + idlayer: IdlArcSqliteWriteTransaction<'a>, } -impl IdEntry { +impl IdRawEntry { fn into_entry(self) -> Result, OperationError> { let db_e = serde_cbor::from_slice(self.data.as_slice()) .map_err(|_| OperationError::SerdeCborError)?; @@ -64,12 +64,12 @@ impl IdEntry { } pub trait BackendTransaction { - type IdlLayerType: IdlSqliteTransaction; - fn get_idlayer(&self) -> &Self::IdlLayerType; + type IdlLayerType: IdlArcSqliteTransaction; + fn get_idlayer(&mut self) -> &mut Self::IdlLayerType; /// Recursively apply a filter, transforming into IDL's on the way. fn filter2idl( - &self, + &mut self, au: &mut AuditScope, filt: &FilterResolved, thres: usize, @@ -296,7 +296,7 @@ pub trait BackendTransaction { // Take filter, and AuditScope ref? fn search( - &self, + &mut self, au: &mut AuditScope, filt: &Filter, ) -> Result>, OperationError> { @@ -312,12 +312,7 @@ pub trait BackendTransaction { // Also get if the filter was 100% resolved or not. let idl = self.filter2idl(au, filt.to_inner(), FILTER_TEST_THRESHOLD)?; - let raw_entries = try_audit!(au, self.get_idlayer().get_identry(au, &idl)); - let entries: Result, _> = raw_entries - .into_iter() - .map(|ide| ide.into_entry()) - .collect(); - let entries = try_audit!(au, entries); + let entries = try_audit!(au, self.get_idlayer().get_identry(au, &idl)); // Do other things // Now, de-serialise the raw_entries back to entries, and populate their ID's @@ -359,7 +354,7 @@ pub trait BackendTransaction { /// load any candidates if they match. This is heavily used in uuid /// refint and attr uniqueness. fn exists( - &self, + &mut self, au: &mut AuditScope, filt: &Filter, ) -> Result { @@ -377,12 +372,7 @@ pub trait BackendTransaction { match &idl { IDL::Indexed(idl) => Ok(idl.len() > 0), _ => { - let raw_entries = try_audit!(au, self.get_idlayer().get_identry(au, &idl)); - let entries: Result, _> = raw_entries - .into_iter() - .map(|ide| ide.into_entry()) - .collect(); - let entries = try_audit!(au, entries); + let entries = try_audit!(au, self.get_idlayer().get_identry(au, &idl)); // if not 100% resolved query, apply the filter test. let entries_filtered: Vec<_> = entries @@ -396,16 +386,16 @@ pub trait BackendTransaction { }) // end audit segment } - fn verify(&self) -> Vec> { + fn verify(&mut self) -> Vec> { // Vec::new() self.get_idlayer().verify() } - fn backup(&self, audit: &mut AuditScope, dst_path: &str) -> Result<(), OperationError> { + fn backup(&mut self, audit: &mut AuditScope, dst_path: &str) -> Result<(), OperationError> { // load all entries into RAM, may need to change this later // if the size of the database compared to RAM is an issue let idl = IDL::ALLIDS; - let raw_entries: Vec = self.get_idlayer().get_identry(audit, &idl)?; + let raw_entries: Vec = self.get_idlayer().get_identry_raw(audit, &idl)?; let entries: Result, _> = raw_entries .iter() @@ -439,21 +429,23 @@ pub trait BackendTransaction { } } -impl BackendTransaction for BackendReadTransaction { - type IdlLayerType = IdlSqliteReadTransaction; - fn get_idlayer(&self) -> &IdlSqliteReadTransaction { - &self.idlayer +impl<'a> BackendTransaction for BackendReadTransaction<'a> { + type IdlLayerType = IdlArcSqliteReadTransaction<'a>; + + fn get_idlayer(&mut self) -> &mut IdlArcSqliteReadTransaction<'a> { + &mut self.idlayer } } -impl BackendTransaction for BackendWriteTransaction { - type IdlLayerType = IdlSqliteWriteTransaction; - fn get_idlayer(&self) -> &IdlSqliteWriteTransaction { - &self.idlayer +impl<'a> BackendTransaction for BackendWriteTransaction<'a> { + type IdlLayerType = IdlArcSqliteWriteTransaction<'a>; + + fn get_idlayer(&mut self) -> &mut IdlArcSqliteWriteTransaction<'a> { + &mut self.idlayer } } -impl BackendWriteTransaction { +impl<'a> BackendWriteTransaction<'a> { pub fn create( &mut self, au: &mut AuditScope, @@ -483,22 +475,7 @@ impl BackendWriteTransaction { }) .collect(); - let identries: Result, _> = c_entries - .iter() - .map(|e| { - let dbe = e.to_dbentry(); - let data = - serde_cbor::to_vec(&dbe).map_err(|_| OperationError::SerdeCborError)?; - - Ok(IdEntry { - id: i64::try_from(e.get_id()) - .map_err(|_| OperationError::InvalidEntryID)?, - data: data, - }) - }) - .collect(); - - self.idlayer.write_identries(au, identries?)?; + self.idlayer.write_identries(au, c_entries.iter())?; // Now update the indexes as required. for e in c_entries.iter() { @@ -510,7 +487,7 @@ impl BackendWriteTransaction { } pub fn modify( - &self, + &mut self, au: &mut AuditScope, pre_entries: &[Entry], post_entries: &[Entry], @@ -525,13 +502,12 @@ impl BackendWriteTransaction { assert!(post_entries.len() == pre_entries.len()); + /* // Assert the Id's exist on the entry, and serialise them. // Now, that means the ID must be > 0!!! let ser_entries: Result, _> = post_entries .iter() .map(|e| { - let db_e = e.to_dbentry(); - let id = i64::try_from(e.get_id()) .map_err(|_| OperationError::InvalidEntryID) .and_then(|id| { @@ -542,9 +518,7 @@ impl BackendWriteTransaction { } })?; - let data = serde_cbor::to_vec(&db_e).map_err(|_| OperationError::SerdeCborError)?; - - Ok(IdEntry { id, data }) + Ok(IdEntry { id, data: e.clone() }) }) .collect(); @@ -557,9 +531,10 @@ impl BackendWriteTransaction { if post_entries.len() != ser_entries.len() { return Err(OperationError::InvalidEntryState); } + */ // Now, given the list of id's, update them - self.idlayer.write_identries(au, ser_entries)?; + self.idlayer.write_identries(au, post_entries.iter())?; // Finally, we now reindex all the changed entries. We do this by iterating and zipping // over the set, because we know the list is in the same order. @@ -570,7 +545,7 @@ impl BackendWriteTransaction { } pub fn delete( - &self, + &mut self, au: &mut AuditScope, entries: &[Entry], ) -> Result<(), OperationError> { @@ -584,28 +559,8 @@ impl BackendWriteTransaction { return Err(OperationError::EmptyRequest); } - // Assert the Id's exist on the entry. - let id_list: Result, _> = entries - .iter() - .map(|e| { - i64::try_from(e.get_id()) - .map_err(|_| OperationError::InvalidEntryID) - .and_then(|id| { - if id == 0 { - Err(OperationError::InvalidEntryID) - } else { - Ok(id) - } - }) - }) - .collect(); - - let id_list = try_audit!(au, id_list); - - // Simple: If the list of id's is not the same as the input list, we are missing id's - if entries.len() != id_list.len() { - return Err(OperationError::InvalidEntryState); - } + // Assert the id's exist on the entry. + let id_list = entries.iter().map(|e| e.get_id()); // Now, given the list of id's, delete them. self.idlayer.delete_identry(au, id_list)?; @@ -626,7 +581,7 @@ impl BackendWriteTransaction { // At the end, we flush those cchange outs in a single run. // For create this is probably a fn entry_index( - &self, + &mut self, audit: &mut AuditScope, pre: Option<&Entry>, post: Option<&Entry>, @@ -651,7 +606,15 @@ impl BackendWriteTransaction { } }; - let idx_diff = Entry::idx_diff(&self.idxmeta, pre, post); + // Extremely Cursed - Okay, we know that self.idxmeta will NOT be changed + // in this function, but we need to borrow self as mut for the caches in + // get_idl to work. As a result, this causes a double borrow. To work around + // this we discard the lifetime on idxmeta, because we know that it will + // remain constant for the life of the operation. + + let idxmeta = unsafe { &(*(&self.idxmeta as *const _)) }; + + let idx_diff = Entry::idx_diff(&idxmeta, pre, post); idx_diff.iter() .try_for_each(|act| { @@ -697,7 +660,7 @@ impl BackendWriteTransaction { #[allow(dead_code)] fn missing_idxs( - &self, + &mut self, audit: &mut AuditScope, ) -> Result, OperationError> { let idx_table_list = self.idlayer.list_idxs(audit)?; @@ -736,14 +699,18 @@ impl BackendWriteTransaction { .try_for_each(|(attr, itype)| self.idlayer.create_idx(audit, attr, itype)) } - pub fn upgrade_reindex(&self, audit: &mut AuditScope, v: i64) -> Result<(), OperationError> { + pub fn upgrade_reindex( + &mut self, + audit: &mut AuditScope, + v: i64, + ) -> Result<(), OperationError> { if self.get_db_index_version() < v { self.reindex(audit)?; } self.set_db_index_version(v) } - pub fn reindex(&self, audit: &mut AuditScope) -> Result<(), OperationError> { + pub fn reindex(&mut self, audit: &mut AuditScope) -> Result<(), OperationError> { // Purge the idxs unsafe { self.idlayer.purge_idxs(audit)? }; @@ -754,12 +721,7 @@ impl BackendWriteTransaction { // Future idea: Do this in batches of X amount to limit memory // consumption. let idl = IDL::ALLIDS; - let raw_entries = try_audit!(audit, self.idlayer.get_identry(audit, &idl)); - let entries: Result, _> = raw_entries - .into_iter() - .map(|ide| ide.into_entry()) - .collect(); - let entries = try_audit!(audit, entries); + let entries = try_audit!(audit, self.idlayer.get_identry(audit, &idl)); // WHEN do we update name2uuid and uuid2name? // Do they become attrs of the idx_cache? Should that be a struct? @@ -773,13 +735,13 @@ impl BackendWriteTransaction { } #[cfg(test)] - pub fn purge_idxs(&self, audit: &mut AuditScope) -> Result<(), OperationError> { + pub fn purge_idxs(&mut self, audit: &mut AuditScope) -> Result<(), OperationError> { unsafe { self.idlayer.purge_idxs(audit) } } #[cfg(test)] pub fn load_test_idl( - &self, + &mut self, audit: &mut AuditScope, attr: &String, itype: &IndexType, @@ -847,18 +809,17 @@ impl BackendWriteTransaction { // Now, we setup all the entries with new ids. let mut id_max = 0; - let identries: Result, _> = dbentries + let identries: Result, _> = dbentries .iter() - .map(|ser_db_e| { + .map(|e| { id_max += 1; - let data = - serde_cbor::to_vec(&ser_db_e).map_err(|_| OperationError::SerdeCborError)?; - - Ok(IdEntry { id: id_max, data }) + let data = serde_cbor::to_vec(&e).map_err(|_| OperationError::SerdeCborError)?; + Ok(IdRawEntry { id: id_max, data }) }) .collect(); - self.idlayer.write_identries(audit, identries?)?; + self.idlayer + .write_identries_raw(audit, identries?.into_iter())?; // for debug /* @@ -892,7 +853,7 @@ impl BackendWriteTransaction { Ok(nsid) } - pub fn get_db_s_uuid(&self) -> Uuid { + pub fn get_db_s_uuid(&mut self) -> Uuid { match self .get_idlayer() .get_db_s_uuid() @@ -909,7 +870,7 @@ impl BackendWriteTransaction { Ok(nsid) } - pub fn get_db_d_uuid(&self) -> Uuid { + pub fn get_db_d_uuid(&mut self) -> Uuid { match self .get_idlayer() .get_db_d_uuid() @@ -920,11 +881,11 @@ impl BackendWriteTransaction { } } - fn get_db_index_version(&self) -> i64 { + fn get_db_index_version(&mut self) -> i64 { self.get_idlayer().get_db_index_version() } - fn set_db_index_version(&self, v: i64) -> Result<(), OperationError> { + fn set_db_index_version(&mut self, v: i64) -> Result<(), OperationError> { self.get_idlayer().set_db_index_version(v) } } @@ -935,7 +896,7 @@ impl Backend { // this has a ::memory() type, but will path == "" work? audit_segment!(audit, || { let be = Backend { - idlayer: IdlSqlite::new(audit, path, pool_size)?, + idlayer: Arc::new(IdlArcSqlite::new(audit, path, pool_size)?), }; // Now complete our setup with a txn diff --git a/kanidmd/src/lib/config.rs b/kanidmd/src/lib/config.rs index abf63f869..8540a3c69 100644 --- a/kanidmd/src/lib/config.rs +++ b/kanidmd/src/lib/config.rs @@ -1,4 +1,3 @@ -use num_cpus; use rand::prelude::*; use std::fmt; use std::path::PathBuf; diff --git a/kanidmd/src/lib/constants/mod.rs b/kanidmd/src/lib/constants/mod.rs index 28da18214..1e8eca9b2 100644 --- a/kanidmd/src/lib/constants/mod.rs +++ b/kanidmd/src/lib/constants/mod.rs @@ -33,7 +33,7 @@ pub const CHANGELOG_MAX_AGE: u64 = 86400; pub const RECYCLEBIN_MAX_AGE: u64 = 300; #[cfg(not(test))] /// In production we allow 1 week -pub const RECYCLEBIN_MAX_AGE: u64 = 604800; +pub const RECYCLEBIN_MAX_AGE: u64 = 604_800; // 5 minute auth session window. pub const AUTH_SESSION_TIMEOUT: u64 = 300; diff --git a/kanidmd/src/lib/core/mod.rs b/kanidmd/src/lib/core/mod.rs index 3db3a1641..244f155c3 100644 --- a/kanidmd/src/lib/core/mod.rs +++ b/kanidmd/src/lib/core/mod.rs @@ -730,7 +730,7 @@ async fn account_post_id_unix_auth( let uat = get_current_user(&session); let id = path.into_inner(); let m_obj = IdmAccountUnixAuthMessage { - uat: uat, + uat, uuid_or_name: id, cred: obj.into_inner().value, }; @@ -1096,7 +1096,7 @@ pub fn backup_server_core(config: Configuration, dst_path: &str) { }; let mut audit = AuditScope::new("backend_backup"); - let be_ro_txn = be.read(); + let mut be_ro_txn = be.read(); let r = be_ro_txn.backup(&mut audit, dst_path); debug!("{}", audit); match r { @@ -1157,7 +1157,7 @@ pub fn restore_server_core(config: Configuration, dst_path: &str) { info!("Start reindex phase ..."); - let qs_write = qs.write(duration_from_epoch_now()); + let mut qs_write = qs.write(duration_from_epoch_now()); let r = qs_write .reindex(&mut audit) .and_then(|_| qs_write.commit(&mut audit)); @@ -1195,7 +1195,7 @@ pub fn reindex_server_core(config: Configuration) { let idxmeta = { schema.write().get_idxmeta_set() }; // Reindex only the core schema attributes to bootstrap the process. - let be_wr_txn = be.write(idxmeta); + let mut be_wr_txn = be.write(idxmeta); let r = be_wr_txn .reindex(&mut audit) .and_then(|_| be_wr_txn.commit(&mut audit)); @@ -1222,7 +1222,7 @@ pub fn reindex_server_core(config: Configuration) { info!("Start Index Phase 2 ..."); - let qs_write = qs.write(duration_from_epoch_now()); + let mut qs_write = qs.write(duration_from_epoch_now()); let r = qs_write .reindex(&mut audit) .and_then(|_| qs_write.commit(&mut audit)); diff --git a/kanidmd/src/lib/credential/mod.rs b/kanidmd/src/lib/credential/mod.rs index 8adc32bc9..07d49e289 100644 --- a/kanidmd/src/lib/credential/mod.rs +++ b/kanidmd/src/lib/credential/mod.rs @@ -1,5 +1,4 @@ use crate::be::dbvalue::{DbCredV1, DbPasswordV1}; -use base64; use openssl::hash::MessageDigest; use openssl::pkcs5::pbkdf2_hmac; use rand::prelude::*; diff --git a/kanidmd/src/lib/credential/totp.rs b/kanidmd/src/lib/credential/totp.rs index 70a3cfdbc..13d28e695 100644 --- a/kanidmd/src/lib/credential/totp.rs +++ b/kanidmd/src/lib/credential/totp.rs @@ -148,7 +148,7 @@ impl TOTP { .map_err(|_| TOTPError::HmacError)?; let otp = u32::from_be_bytes(bytes); - Ok((otp & 0x7fffffff) % 1_000_000) + Ok((otp & 0x7fff_ffff) % 1_000_000) } pub fn do_totp_duration_from_epoch(&self, time: &Duration) -> Result { diff --git a/kanidmd/src/lib/entry.rs b/kanidmd/src/lib/entry.rs index 52015f9a1..2a0461e10 100644 --- a/kanidmd/src/lib/entry.rs +++ b/kanidmd/src/lib/entry.rs @@ -304,7 +304,7 @@ impl Entry { pub fn from_proto_entry( audit: &mut AuditScope, e: &ProtoEntry, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { // Why not the trait? In the future we may want to extend // this with server aware functions for changes of the @@ -339,7 +339,7 @@ impl Entry { pub fn from_proto_entry_str( audit: &mut AuditScope, es: &str, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { audit_log!(audit, "Parsing -> {}", es); // str -> Proto entry @@ -1282,7 +1282,7 @@ impl Entry { pub fn to_pe( &self, audit: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { // Turn values -> Strings. let attrs: Result<_, _> = self diff --git a/kanidmd/src/lib/event.rs b/kanidmd/src/lib/event.rs index 8a6546244..ba4d612e5 100644 --- a/kanidmd/src/lib/event.rs +++ b/kanidmd/src/lib/event.rs @@ -35,7 +35,7 @@ pub struct SearchResult { impl SearchResult { pub fn new( audit: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, entries: Vec>, ) -> Result { let entries: Result<_, _> = entries @@ -104,7 +104,7 @@ pub struct Event { impl Event { pub fn from_ro_request( audit: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, user_uuid: &str, ) -> Result { // Do we need to check or load the entry from the user_uuid? @@ -125,7 +125,7 @@ impl Event { pub fn from_ro_uat( audit: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, uat: Option, ) -> Result { audit_log!(audit, "from_ro_uat -> {:?}", uat); @@ -146,7 +146,7 @@ impl Event { pub fn from_rw_uat( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, uat: Option, ) -> Result { audit_log!(audit, "from_rw_uat -> {:?}", uat); @@ -167,7 +167,7 @@ impl Event { pub fn from_rw_request( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, user_uuid: &str, ) -> Result { // Do we need to check or load the entry from the user_uuid? @@ -241,7 +241,7 @@ impl SearchEvent { pub fn from_message( audit: &mut AuditScope, msg: SearchMessage, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { match Filter::from_ro(audit, &msg.req.filter, qs) { Ok(f) => Ok(SearchEvent { @@ -267,7 +267,7 @@ impl SearchEvent { pub fn from_internal_message( audit: &mut AuditScope, msg: InternalSearchMessage, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { let r_attrs: Option> = msg.attrs.map(|vs| { vs.into_iter() @@ -302,7 +302,7 @@ impl SearchEvent { pub fn from_internal_recycle_message( audit: &mut AuditScope, msg: InternalSearchRecycledMessage, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { let r_attrs: Option> = msg.attrs.map(|vs| { vs.into_iter() @@ -336,7 +336,7 @@ impl SearchEvent { pub fn from_whoami_request( audit: &mut AuditScope, uat: Option, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { Ok(SearchEvent { event: Event::from_ro_uat(audit, qs, uat)?, @@ -355,7 +355,7 @@ impl SearchEvent { audit: &mut AuditScope, uat: Option, target_uuid: Uuid, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { Ok(SearchEvent { event: Event::from_ro_uat(audit, qs, uat)?, @@ -471,7 +471,7 @@ impl CreateEvent { pub fn from_message( audit: &mut AuditScope, msg: CreateMessage, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { let rentries: Result, _> = msg .req @@ -553,7 +553,7 @@ impl DeleteEvent { pub fn from_message( audit: &mut AuditScope, msg: DeleteMessage, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { match Filter::from_rw(audit, &msg.req.filter, qs) { Ok(f) => Ok(DeleteEvent { @@ -575,7 +575,7 @@ impl DeleteEvent { audit: &mut AuditScope, uat: Option, filter: Filter, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { Ok(DeleteEvent { event: Event::from_rw_uat(audit, qs, uat)?, @@ -643,7 +643,7 @@ impl ModifyEvent { pub fn from_message( audit: &mut AuditScope, msg: ModifyMessage, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { match Filter::from_rw(audit, &msg.req.filter, qs) { Ok(f) => match ModifyList::from(audit, &msg.req.modlist, qs) { @@ -674,7 +674,7 @@ impl ModifyEvent { target_uuid: Uuid, proto_ml: ProtoModifyList, filter: Filter, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { let f_uuid = filter_all!(f_eq("uuid", PartialValue::new_uuid(target_uuid))); // Add any supplemental conditions we have. @@ -705,7 +705,7 @@ impl ModifyEvent { target_uuid: Uuid, ml: ModifyList, filter: Filter, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { let f_uuid = filter_all!(f_eq("uuid", PartialValue::new_uuid(target_uuid))); // Add any supplemental conditions we have. @@ -733,7 +733,7 @@ impl ModifyEvent { target_uuid: Uuid, attr: String, filter: Filter, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { let ml = ModifyList::new_purge(attr.as_str()); let f_uuid = filter_all!(f_eq("uuid", PartialValue::new_uuid(target_uuid))); @@ -967,7 +967,7 @@ pub struct WhoamiResult { impl WhoamiResult { pub fn new( audit: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, e: Entry, uat: UserAuthToken, ) -> Result { @@ -1039,7 +1039,7 @@ impl ReviveRecycledEvent { audit: &mut AuditScope, uat: Option, filter: Filter, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { Ok(ReviveRecycledEvent { event: Event::from_rw_uat(audit, qs, uat)?, diff --git a/kanidmd/src/lib/filter.rs b/kanidmd/src/lib/filter.rs index 40437a9de..4b3afb7ce 100644 --- a/kanidmd/src/lib/filter.rs +++ b/kanidmd/src/lib/filter.rs @@ -375,7 +375,7 @@ impl Filter { pub fn from_ro( audit: &mut AuditScope, f: &ProtoFilter, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { Ok(Filter { state: FilterInvalid { @@ -387,7 +387,7 @@ impl Filter { pub fn from_rw( audit: &mut AuditScope, f: &ProtoFilter, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { Ok(Filter { state: FilterInvalid { @@ -564,7 +564,7 @@ impl FilterComp { fn from_ro( audit: &mut AuditScope, f: &ProtoFilter, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { Ok(match f { ProtoFilter::Eq(a, v) => FilterComp::Eq(a.clone(), qs.clone_partialvalue(audit, a, v)?), @@ -590,7 +590,7 @@ impl FilterComp { fn from_rw( audit: &mut AuditScope, f: &ProtoFilter, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { Ok(match f { ProtoFilter::Eq(a, v) => FilterComp::Eq(a.clone(), qs.clone_partialvalue(audit, a, v)?), diff --git a/kanidmd/src/lib/idm/account.rs b/kanidmd/src/lib/idm/account.rs index 0c90f5875..f417525c2 100644 --- a/kanidmd/src/lib/idm/account.rs +++ b/kanidmd/src/lib/idm/account.rs @@ -96,7 +96,7 @@ impl Account { pub(crate) fn try_from_entry_ro( au: &mut AuditScope, value: Entry, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { let groups = Group::try_from_account_entry_ro(au, &value, qs)?; try_from_entry!(value, groups) @@ -105,7 +105,7 @@ impl Account { pub(crate) fn try_from_entry_rw( au: &mut AuditScope, value: Entry, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { let groups = Group::try_from_account_entry_rw(au, &value, qs)?; try_from_entry!(value, groups) diff --git a/kanidmd/src/lib/idm/authsession.rs b/kanidmd/src/lib/idm/authsession.rs index 281b2c7b5..eae6947ee 100644 --- a/kanidmd/src/lib/idm/authsession.rs +++ b/kanidmd/src/lib/idm/authsession.rs @@ -14,9 +14,9 @@ use std::time::Duration; // auth policies would exist, but each credHandler has to be a whole // encapsulated unit of function. -const BAD_PASSWORD_MSG: &'static str = "incorrect password"; -const BAD_TOTP_MSG: &'static str = "incorrect totp"; -const BAD_AUTH_TYPE_MSG: &'static str = "invalid authentication method in this context"; +const BAD_PASSWORD_MSG: &str = "incorrect password"; +const BAD_TOTP_MSG: &str = "incorrect totp"; +const BAD_AUTH_TYPE_MSG: &str = "invalid authentication method in this context"; enum CredState { Success(Vec), diff --git a/kanidmd/src/lib/idm/event.rs b/kanidmd/src/lib/idm/event.rs index 7a8bbd674..7e35b89e4 100644 --- a/kanidmd/src/lib/idm/event.rs +++ b/kanidmd/src/lib/idm/event.rs @@ -27,7 +27,7 @@ impl PasswordChangeEvent { pub fn from_idm_account_set_password( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, msg: IdmAccountSetPasswordMessage, ) -> Result { let e = Event::from_rw_uat(audit, qs, msg.uat)?; @@ -43,7 +43,7 @@ impl PasswordChangeEvent { pub fn from_parts( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, uat: Option, target: Uuid, cleartext: String, @@ -79,7 +79,7 @@ impl UnixPasswordChangeEvent { pub fn from_parts( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, uat: Option, target: Uuid, cleartext: String, @@ -104,7 +104,7 @@ pub struct GeneratePasswordEvent { impl GeneratePasswordEvent { pub fn from_parts( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, uat: Option, target: Uuid, appid: Option, @@ -128,7 +128,7 @@ pub struct RegenerateRadiusSecretEvent { impl RegenerateRadiusSecretEvent { pub fn from_parts( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, uat: Option, target: Uuid, ) -> Result { @@ -154,7 +154,7 @@ pub struct RadiusAuthTokenEvent { impl RadiusAuthTokenEvent { pub fn from_parts( audit: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, uat: Option, target: Uuid, ) -> Result { @@ -180,7 +180,7 @@ pub struct UnixUserTokenEvent { impl UnixUserTokenEvent { pub fn from_parts( audit: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, uat: Option, target: Uuid, ) -> Result { @@ -206,7 +206,7 @@ pub struct UnixGroupTokenEvent { impl UnixGroupTokenEvent { pub fn from_parts( audit: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, uat: Option, target: Uuid, ) -> Result { @@ -242,7 +242,7 @@ impl UnixUserAuthEvent { pub fn from_parts( audit: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, uat: Option, target: Uuid, cleartext: String, @@ -267,7 +267,7 @@ pub struct GenerateTOTPEvent { impl GenerateTOTPEvent { pub fn from_parts( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, uat: Option, target: Uuid, label: String, @@ -304,7 +304,7 @@ pub struct VerifyTOTPEvent { impl VerifyTOTPEvent { pub fn from_parts( audit: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, uat: Option, target: Uuid, session: Uuid, diff --git a/kanidmd/src/lib/idm/group.rs b/kanidmd/src/lib/idm/group.rs index 224b39d65..7a6073f4d 100644 --- a/kanidmd/src/lib/idm/group.rs +++ b/kanidmd/src/lib/idm/group.rs @@ -56,7 +56,7 @@ impl Group { pub fn try_from_account_entry_red_ro( au: &mut AuditScope, value: &Entry, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result, OperationError> { try_from_account_e!(au, value, qs) } @@ -64,7 +64,7 @@ impl Group { pub fn try_from_account_entry_ro( au: &mut AuditScope, value: &Entry, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result, OperationError> { try_from_account_e!(au, value, qs) } @@ -72,7 +72,7 @@ impl Group { pub fn try_from_account_entry_rw( au: &mut AuditScope, value: &Entry, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result, OperationError> { try_from_account_e!(au, value, qs) } diff --git a/kanidmd/src/lib/idm/radius.rs b/kanidmd/src/lib/idm/radius.rs index 8ddac90b5..9e3106c1a 100644 --- a/kanidmd/src/lib/idm/radius.rs +++ b/kanidmd/src/lib/idm/radius.rs @@ -25,7 +25,7 @@ impl RadiusAccount { pub(crate) fn try_from_entry_reduced( au: &mut AuditScope, value: Entry, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { if !value.attribute_value_pres("class", &PVCLASS_ACCOUNT) { return Err(OperationError::InvalidAccountState( diff --git a/kanidmd/src/lib/idm/server.rs b/kanidmd/src/lib/idm/server.rs index d4fd78d66..61a46cb12 100644 --- a/kanidmd/src/lib/idm/server.rs +++ b/kanidmd/src/lib/idm/server.rs @@ -29,7 +29,6 @@ use concread::collections::bptree::*; use rand::prelude::*; use std::time::Duration; use uuid::Uuid; -use zxcvbn; pub struct IdmServer { // There is a good reason to keep this single thread - it @@ -48,15 +47,15 @@ pub struct IdmServerWriteTransaction<'a> { // the idm in memory structures (maybe the query server too). This is // things like authentication sessions: BptreeMapWriteTxn<'a, Uuid, AuthSession>, - pub qs_read: QueryServerReadTransaction, + pub qs_read: QueryServerReadTransaction<'a>, // thread/server id sid: SID, } -pub struct IdmServerProxyReadTransaction { +pub struct IdmServerProxyReadTransaction<'a> { // This contains read-only methods, like getting users, groups // and other structured content. - pub qs_read: QueryServerReadTransaction, + pub qs_read: QueryServerReadTransaction<'a>, } pub struct IdmServerProxyWriteTransaction<'a> { @@ -87,7 +86,7 @@ impl IdmServer { sessions: self.sessions.write(), // qs: &self.qs, qs_read: self.qs.read(), - sid: sid, + sid, } } @@ -105,7 +104,7 @@ impl IdmServer { IdmServerProxyWriteTransaction { mfareg_sessions: self.mfareg_sessions.write(), qs_write: self.qs.write(ts), - sid: sid, + sid, } } } @@ -184,7 +183,7 @@ impl<'a> IdmServerWriteTransaction<'a> { // typing and functionality so we can assess what auth types can // continue, and helps to keep non-needed entry specific data // out of the LRU. - let account = Account::try_from_entry_ro(au, entry, &self.qs_read)?; + let account = Account::try_from_entry_ro(au, entry, &mut self.qs_read)?; let auth_session = AuthSession::new(account, init.appid.clone()); // Get the set of mechanisms that can proceed. This is tied @@ -246,7 +245,7 @@ impl<'a> IdmServerWriteTransaction<'a> { // Get their account let account = try_audit!( au, - UnixUserAccount::try_from_entry_ro(au, account_entry, &self.qs_read) + UnixUserAccount::try_from_entry_ro(au, account_entry, &mut self.qs_read) ); // Validate the unix_pw - this checks the account/cred lock states. @@ -259,9 +258,9 @@ impl<'a> IdmServerWriteTransaction<'a> { } } -impl IdmServerProxyReadTransaction { +impl<'a> IdmServerProxyReadTransaction<'a> { pub fn get_radiusauthtoken( - &self, + &mut self, au: &mut AuditScope, rate: &RadiusAuthTokenEvent, ) -> Result { @@ -273,14 +272,14 @@ impl IdmServerProxyReadTransaction { ); let account = try_audit!( au, - RadiusAccount::try_from_entry_reduced(au, account_entry, &self.qs_read) + RadiusAccount::try_from_entry_reduced(au, account_entry, &mut self.qs_read) ); account.to_radiusauthtoken() } pub fn get_unixusertoken( - &self, + &mut self, au: &mut AuditScope, uute: &UnixUserTokenEvent, ) -> Result { @@ -292,13 +291,13 @@ impl IdmServerProxyReadTransaction { let account = try_audit!( au, - UnixUserAccount::try_from_entry_reduced(au, account_entry, &self.qs_read) + UnixUserAccount::try_from_entry_reduced(au, account_entry, &mut self.qs_read) ); account.to_unixusertoken() } pub fn get_unixgrouptoken( - &self, + &mut self, au: &mut AuditScope, uute: &UnixGroupTokenEvent, ) -> Result { @@ -324,7 +323,7 @@ impl<'a> IdmServerProxyWriteTransaction<'a> { } fn check_password_quality( - &self, + &mut self, au: &mut AuditScope, cleartext: &str, related_inputs: &[&str], @@ -382,7 +381,7 @@ impl<'a> IdmServerProxyWriteTransaction<'a> { } fn target_to_account( - &self, + &mut self, au: &mut AuditScope, target: &Uuid, ) -> Result { @@ -390,7 +389,7 @@ impl<'a> IdmServerProxyWriteTransaction<'a> { let account_entry = try_audit!(au, self.qs_write.internal_search_uuid(au, target)); let account = try_audit!( au, - Account::try_from_entry_rw(au, account_entry, &self.qs_write) + Account::try_from_entry_rw(au, account_entry, &mut self.qs_write) ); // Ask if tis all good - this step checks pwpolicy and such @@ -461,7 +460,7 @@ impl<'a> IdmServerProxyWriteTransaction<'a> { // Assert the account is unix and valid. let account = try_audit!( au, - UnixUserAccount::try_from_entry_rw(au, account_entry, &self.qs_write) + UnixUserAccount::try_from_entry_rw(au, account_entry, &mut self.qs_write) ); // Ask if tis all good - this step checks pwpolicy and such @@ -1015,7 +1014,7 @@ mod tests { .expect("Failed to reset radius credential 1"); idms_prox_write.commit(au).expect("failed to commit"); - let idms_prox_read = idms.proxy_read(); + let mut idms_prox_read = idms.proxy_read(); let rate = RadiusAuthTokenEvent::new_internal(UUID_ADMIN.clone()); let tok_r = idms_prox_read .get_radiusauthtoken(au, &rate) @@ -1093,7 +1092,7 @@ mod tests { idms_prox_write.commit(au).expect("failed to commit"); - let idms_prox_read = idms.proxy_read(); + let mut idms_prox_read = idms.proxy_read(); let ugte = UnixGroupTokenEvent::new_internal( Uuid::parse_str("01609135-a1c4-43d5-966b-a28227644445") diff --git a/kanidmd/src/lib/idm/unix.rs b/kanidmd/src/lib/idm/unix.rs index ad85619b8..82f3f23d7 100644 --- a/kanidmd/src/lib/idm/unix.rs +++ b/kanidmd/src/lib/idm/unix.rs @@ -95,7 +95,7 @@ impl UnixUserAccount { pub(crate) fn try_from_entry_rw( au: &mut AuditScope, value: Entry, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { let groups = UnixGroup::try_from_account_entry_rw(au, &value, qs)?; try_from_entry!(value, groups) @@ -104,7 +104,7 @@ impl UnixUserAccount { pub(crate) fn try_from_entry_ro( au: &mut AuditScope, value: Entry, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { let groups = UnixGroup::try_from_account_entry_ro(au, &value, qs)?; try_from_entry!(value, groups) @@ -113,7 +113,7 @@ impl UnixUserAccount { pub(crate) fn try_from_entry_reduced( au: &mut AuditScope, value: Entry, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { let groups = UnixGroup::try_from_account_entry_red_ro(au, &value, qs)?; try_from_entry!(value, groups) @@ -130,7 +130,7 @@ impl UnixUserAccount { gidnumber: self.gidnumber, uuid: self.uuid.to_hyphenated_ref().to_string(), shell: self.shell.clone(), - groups: groups, + groups, sshkeys: self.sshkeys.clone(), }) } @@ -295,7 +295,7 @@ impl UnixGroup { pub fn try_from_account_entry_rw( au: &mut AuditScope, value: &Entry, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result, OperationError> { try_from_account_group_e!(au, value, qs) } @@ -303,7 +303,7 @@ impl UnixGroup { pub fn try_from_account_entry_ro( au: &mut AuditScope, value: &Entry, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result, OperationError> { try_from_account_group_e!(au, value, qs) } @@ -311,7 +311,7 @@ impl UnixGroup { pub fn try_from_account_entry_red_ro( au: &mut AuditScope, value: &Entry, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result, OperationError> { try_from_account_group_e!(au, value, qs) } diff --git a/kanidmd/src/lib/modify.rs b/kanidmd/src/lib/modify.rs index 711cbe7e6..e636ff104 100644 --- a/kanidmd/src/lib/modify.rs +++ b/kanidmd/src/lib/modify.rs @@ -44,7 +44,7 @@ impl Modify { pub fn from( audit: &mut AuditScope, m: &ProtoModify, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { Ok(match m { ProtoModify::Present(a, v) => Modify::Present(a.clone(), qs.clone_value(audit, a, v)?), @@ -106,7 +106,7 @@ impl ModifyList { pub fn from( audit: &mut AuditScope, ml: &ProtoModifyList, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, ) -> Result { // For each ProtoModify, do a from. let inner: Result, _> = ml diff --git a/kanidmd/src/lib/plugins/attrunique.rs b/kanidmd/src/lib/plugins/attrunique.rs index b12104879..149f06d4a 100644 --- a/kanidmd/src/lib/plugins/attrunique.rs +++ b/kanidmd/src/lib/plugins/attrunique.rs @@ -164,7 +164,7 @@ impl Plugin for AttrUnique { fn verify( au: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Vec> { // Only check live entries, not recycled. let filt_in = filter!(f_pres("class")); diff --git a/kanidmd/src/lib/plugins/base.rs b/kanidmd/src/lib/plugins/base.rs index 62778ddb3..d17af3b0b 100644 --- a/kanidmd/src/lib/plugins/base.rs +++ b/kanidmd/src/lib/plugins/base.rs @@ -220,7 +220,7 @@ impl Plugin for Base { fn verify( au: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Vec> { // Verify all uuid's are unique? // Probably the literally worst thing ... @@ -329,7 +329,7 @@ mod tests { preload, create, None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { let cands = qs .internal_search( au, @@ -424,7 +424,7 @@ mod tests { preload, create, None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { let cands = qs .internal_search( au, diff --git a/kanidmd/src/lib/plugins/domain.rs b/kanidmd/src/lib/plugins/domain.rs index 991be0ca8..586fc03e7 100644 --- a/kanidmd/src/lib/plugins/domain.rs +++ b/kanidmd/src/lib/plugins/domain.rs @@ -68,7 +68,7 @@ mod tests { #[test] fn test_domain_generate_uuid() { run_test!(|server: &QueryServer, au: &mut AuditScope| { - let server_txn = server.write(duration_from_epoch_now()); + let mut server_txn = server.write(duration_from_epoch_now()); let uuid_domain = Uuid::parse_str(UUID_DOMAIN_INFO) .expect("Unable to parse constant UUID_DOMAIN_INFO"); let e_dom = server_txn diff --git a/kanidmd/src/lib/plugins/gidnumber.rs b/kanidmd/src/lib/plugins/gidnumber.rs index f1c726110..a9118a6da 100644 --- a/kanidmd/src/lib/plugins/gidnumber.rs +++ b/kanidmd/src/lib/plugins/gidnumber.rs @@ -108,7 +108,7 @@ mod tests { fn check_gid( au: &mut AuditScope, - qs_write: &QueryServerWriteTransaction, + qs_write: &mut QueryServerWriteTransaction, uuid: &str, gid: u32, ) { @@ -143,7 +143,7 @@ mod tests { preload, create, None, - |au, qs_write: &QueryServerWriteTransaction| check_gid( + |au, qs_write: &mut QueryServerWriteTransaction| check_gid( au, qs_write, "83a0927f-3de1-45ec-bea0-2f7b997ef244", @@ -178,7 +178,7 @@ mod tests { preload, create, None, - |au, qs_write: &QueryServerWriteTransaction| check_gid( + |au, qs_write: &mut QueryServerWriteTransaction| check_gid( au, qs_write, "83a0927f-3de1-45ec-bea0-2f7b997ef244", @@ -212,7 +212,7 @@ mod tests { filter!(f_eq("name", PartialValue::new_iutf8s("testperson"))), modlist!([m_pres("class", &Value::new_class("posixgroup"))]), None, - |au, qs_write: &QueryServerWriteTransaction| check_gid( + |au, qs_write: &mut QueryServerWriteTransaction| check_gid( au, qs_write, "83a0927f-3de1-45ec-bea0-2f7b997ef244", @@ -245,7 +245,7 @@ mod tests { filter!(f_eq("name", PartialValue::new_iutf8s("testperson"))), modlist!([m_purge("gidnumber")]), None, - |au, qs_write: &QueryServerWriteTransaction| check_gid( + |au, qs_write: &mut QueryServerWriteTransaction| check_gid( au, qs_write, "83a0927f-3de1-45ec-bea0-2f7b997ef244", @@ -283,7 +283,7 @@ mod tests { m_pres("gidnumber", &Value::new_uint32(2000)) ]), None, - |au, qs_write: &QueryServerWriteTransaction| check_gid( + |au, qs_write: &mut QueryServerWriteTransaction| check_gid( au, qs_write, "83a0927f-3de1-45ec-bea0-2f7b997ef244", diff --git a/kanidmd/src/lib/plugins/macros.rs b/kanidmd/src/lib/plugins/macros.rs index 8c02d55cf..6568895b1 100644 --- a/kanidmd/src/lib/plugins/macros.rs +++ b/kanidmd/src/lib/plugins/macros.rs @@ -63,7 +63,7 @@ macro_rules! run_create_test { let r = qs_write.create(&mut au_test, &ce); debug!("r: {:?}", r); assert!(r == $expect); - $check(&mut au_test, &qs_write); + $check(&mut au_test, &mut qs_write); match r { Ok(_) => { qs_write.commit(&mut au_test).expect("commit failure!"); @@ -119,7 +119,7 @@ macro_rules! run_modify_test { { let mut qs_write = qs.write(duration_from_epoch_now()); let r = qs_write.modify(&mut au_test, &me); - $check(&mut au_test, &qs_write); + $check(&mut au_test, &mut qs_write); debug!("{:?}", r); assert!(r == $expect); match r { @@ -176,7 +176,7 @@ macro_rules! run_delete_test { { let mut qs_write = qs.write(duration_from_epoch_now()); let r = qs_write.delete(&mut au_test, &de); - $check(&mut au_test, &qs_write); + $check(&mut au_test, &mut qs_write); assert!(r == $expect); match r { Ok(_) => { diff --git a/kanidmd/src/lib/plugins/memberof.rs b/kanidmd/src/lib/plugins/memberof.rs index 6ee5b2f9f..68aa01b8c 100644 --- a/kanidmd/src/lib/plugins/memberof.rs +++ b/kanidmd/src/lib/plugins/memberof.rs @@ -290,7 +290,7 @@ impl Plugin for MemberOf { fn verify( au: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Vec> { let mut r = Vec::new(); @@ -522,7 +522,7 @@ mod tests { preload, create, None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_memberof!(au, qs, UUID_B, UUID_A); @@ -553,7 +553,7 @@ mod tests { preload, create, None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_A, UUID_A); @@ -605,7 +605,7 @@ mod tests { preload, create, None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_memberof!(au, qs, UUID_A, UUID_A); @@ -663,7 +663,7 @@ mod tests { preload, create, None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_memberof!(au, qs, UUID_A, UUID_A); @@ -728,7 +728,7 @@ mod tests { Value::new_refer_s(&UUID_B).unwrap() )]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_memberof!(au, qs, UUID_B, UUID_A); @@ -763,7 +763,7 @@ mod tests { Value::new_refer_s(&UUID_B).unwrap() )]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_A, UUID_A); @@ -816,7 +816,7 @@ mod tests { Value::new_refer_s(&UUID_C).unwrap() )]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_A, UUID_A); @@ -872,7 +872,7 @@ mod tests { Value::new_refer_s(&UUID_A).unwrap() )]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_memberof!(au, qs, UUID_A, UUID_A); @@ -938,7 +938,7 @@ mod tests { Value::new_refer_s(&UUID_A).unwrap() )]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_memberof!(au, qs, UUID_A, UUID_A); @@ -1006,7 +1006,7 @@ mod tests { PartialValue::new_refer_s(&UUID_B).unwrap() )]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_B, UUID_A); @@ -1044,7 +1044,7 @@ mod tests { PartialValue::new_refer_s(&UUID_B).unwrap() )]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_A, UUID_A); @@ -1101,7 +1101,7 @@ mod tests { PartialValue::new_refer_s(&UUID_C).unwrap() )]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_A, UUID_A); @@ -1168,7 +1168,7 @@ mod tests { PartialValue::new_refer_s(&UUID_A).unwrap() )]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_A, UUID_A); @@ -1259,7 +1259,7 @@ mod tests { ), ]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_A, UUID_A); @@ -1322,7 +1322,7 @@ mod tests { preload, filter!(f_eq("uuid", PartialValue::new_uuids(&UUID_A).unwrap())), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_B, UUID_A); @@ -1356,7 +1356,7 @@ mod tests { preload, filter!(f_eq("uuid", PartialValue::new_uuids(&UUID_A).unwrap())), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_B, UUID_A); @@ -1400,7 +1400,7 @@ mod tests { preload, filter!(f_eq("uuid", PartialValue::new_uuids(&UUID_B).unwrap())), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_A, UUID_A); @@ -1453,7 +1453,7 @@ mod tests { preload, filter!(f_eq("uuid", PartialValue::new_uuids(&UUID_A).unwrap())), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_B, UUID_A); @@ -1519,7 +1519,7 @@ mod tests { preload, filter!(f_eq("uuid", PartialValue::new_uuids(&UUID_B).unwrap())), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { // V-- this uuid is // V-- memberof this UUID assert_not_memberof!(au, qs, UUID_A, UUID_B); diff --git a/kanidmd/src/lib/plugins/mod.rs b/kanidmd/src/lib/plugins/mod.rs index 09dbb74a4..a0e375755 100644 --- a/kanidmd/src/lib/plugins/mod.rs +++ b/kanidmd/src/lib/plugins/mod.rs @@ -102,7 +102,7 @@ trait Plugin { fn verify( _au: &mut AuditScope, - _qs: &QueryServerReadTransaction, + _qs: &mut QueryServerReadTransaction, ) -> Vec> { debug!("plugin {} has an unimplemented verify!", Self::id()); vec![Err(ConsistencyError::Unknown)] @@ -425,7 +425,7 @@ impl Plugins { pub fn run_verify( au: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Vec> { let mut results = Vec::new(); run_verify_plugin!(au, qs, &mut results, base::Base); diff --git a/kanidmd/src/lib/plugins/password_import.rs b/kanidmd/src/lib/plugins/password_import.rs index 93603a682..009f7f785 100644 --- a/kanidmd/src/lib/plugins/password_import.rs +++ b/kanidmd/src/lib/plugins/password_import.rs @@ -258,7 +258,7 @@ mod tests { Value::from(IMPORT_HASH) )]), None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { let e = qs .internal_search_uuid( au, diff --git a/kanidmd/src/lib/plugins/refint.rs b/kanidmd/src/lib/plugins/refint.rs index c76f6a7c4..b92139003 100644 --- a/kanidmd/src/lib/plugins/refint.rs +++ b/kanidmd/src/lib/plugins/refint.rs @@ -30,7 +30,7 @@ pub struct ReferentialIntegrity; impl ReferentialIntegrity { fn check_uuid_exists( au: &mut AuditScope, - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, rtype: &str, uuid_value: &Value, ) -> Result<(), OperationError> { @@ -189,7 +189,7 @@ impl Plugin for ReferentialIntegrity { fn verify( au: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Vec> { // Get all entries as cand // build a cand-uuid set @@ -312,7 +312,7 @@ mod tests { preload, create, None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { let cands = qs .internal_search( au, @@ -350,7 +350,7 @@ mod tests { preload, create, None, - |au: &mut AuditScope, qs: &QueryServerWriteTransaction| { + |au: &mut AuditScope, qs: &mut QueryServerWriteTransaction| { let cands = qs .internal_search( au, @@ -592,7 +592,7 @@ mod tests { preload, filter!(f_eq("name", PartialValue::new_iutf8s("testgroup_a"))), None, - |_au: &mut AuditScope, _qs: &QueryServerWriteTransaction| {} + |_au: &mut AuditScope, _qs: &mut QueryServerWriteTransaction| {} ); } @@ -638,7 +638,7 @@ mod tests { preload, filter!(f_eq("name", PartialValue::new_iutf8s("testgroup_b"))), None, - |_au: &mut AuditScope, _qs: &QueryServerWriteTransaction| {} + |_au: &mut AuditScope, _qs: &mut QueryServerWriteTransaction| {} ); } @@ -666,7 +666,7 @@ mod tests { preload, filter!(f_eq("name", PartialValue::new_iutf8s("testgroup_b"))), None, - |_au: &mut AuditScope, _qs: &QueryServerWriteTransaction| {} + |_au: &mut AuditScope, _qs: &mut QueryServerWriteTransaction| {} ); } } diff --git a/kanidmd/src/lib/plugins/spn.rs b/kanidmd/src/lib/plugins/spn.rs index 5a5ce467b..ba87a35f1 100644 --- a/kanidmd/src/lib/plugins/spn.rs +++ b/kanidmd/src/lib/plugins/spn.rs @@ -43,7 +43,7 @@ impl Spn { fn get_domain_name_ro( au: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Result { qs.internal_search_uuid(au, &UUID_DOMAIN_INFO_T) .and_then(|e| { @@ -200,7 +200,7 @@ impl Plugin for Spn { fn verify( au: &mut AuditScope, - qs: &QueryServerReadTransaction, + qs: &mut QueryServerReadTransaction, ) -> Vec> { // Verify that all items with spn's have valid spns. // We need to consider the case that an item has a different origin domain too, diff --git a/kanidmd/src/lib/server.rs b/kanidmd/src/lib/server.rs index 559db4522..5ddf3b260 100644 --- a/kanidmd/src/lib/server.rs +++ b/kanidmd/src/lib/server.rs @@ -64,7 +64,7 @@ lazy_static! { /// [`QueryServerWriteTransaction`]: struct.QueryServerWriteTransaction.html pub trait QueryServerTransaction { type BackendTransactionType: BackendTransaction; - fn get_be_txn(&self) -> &Self::BackendTransactionType; + fn get_be_txn(&mut self) -> &mut Self::BackendTransactionType; type SchemaTransactionType: SchemaTransaction; fn get_schema(&self) -> &Self::SchemaTransactionType; @@ -82,7 +82,7 @@ pub trait QueryServerTransaction { /// [`access`]: ../access/index.html /// [`fn search`]: trait.QueryServerTransaction.html#method.search fn search_ext( - &self, + &mut self, au: &mut AuditScope, se: &SearchEvent, ) -> Result>, OperationError> { @@ -105,7 +105,7 @@ pub trait QueryServerTransaction { } fn search( - &self, + &mut self, au: &mut AuditScope, se: &SearchEvent, ) -> Result>, OperationError> { @@ -154,7 +154,7 @@ pub trait QueryServerTransaction { Ok(acp_res) } - fn exists(&self, au: &mut AuditScope, ee: &ExistsEvent) -> Result { + fn exists(&mut self, au: &mut AuditScope, ee: &ExistsEvent) -> Result { let mut audit_be = AuditScope::new("backend_exists"); let schema = self.get_schema(); @@ -186,7 +186,7 @@ pub trait QueryServerTransaction { // // Remember, we don't care if the name is invalid, because search // will validate/normalise the filter we construct for us. COOL! - fn name_to_uuid(&self, audit: &mut AuditScope, name: &str) -> Result { + fn name_to_uuid(&mut self, audit: &mut AuditScope, name: &str) -> Result { // For now this just constructs a filter and searches, but later // we could actually improve this to contact the backend and do // index searches, completely bypassing id2entry. @@ -222,7 +222,7 @@ pub trait QueryServerTransaction { } fn uuid_to_name( - &self, + &mut self, audit: &mut AuditScope, uuid: &Uuid, ) -> Result, OperationError> { @@ -271,7 +271,11 @@ pub trait QueryServerTransaction { Ok(Some(name_res)) } - fn posixid_to_uuid(&self, audit: &mut AuditScope, name: &str) -> Result { + fn posixid_to_uuid( + &mut self, + audit: &mut AuditScope, + name: &str, + ) -> Result { let f_name = Some(f_eq("name", PartialValue::new_iutf8s(name))); let f_spn = PartialValue::new_spn_s(name).map(|v| f_eq("spn", v)); @@ -310,7 +314,7 @@ pub trait QueryServerTransaction { // From internal, generate an exists event and dispatch fn internal_exists( - &self, + &mut self, au: &mut AuditScope, filter: Filter, ) -> Result { @@ -329,7 +333,7 @@ pub trait QueryServerTransaction { } fn internal_search( - &self, + &mut self, audit: &mut AuditScope, filter: Filter, ) -> Result>, OperationError> { @@ -344,7 +348,7 @@ pub trait QueryServerTransaction { } fn impersonate_search_valid( - &self, + &mut self, audit: &mut AuditScope, f_valid: Filter, f_intent_valid: Filter, @@ -359,7 +363,7 @@ pub trait QueryServerTransaction { // this applys ACP to filter result entries. fn impersonate_search_ext_valid( - &self, + &mut self, audit: &mut AuditScope, f_valid: Filter, f_intent_valid: Filter, @@ -374,7 +378,7 @@ pub trait QueryServerTransaction { // Who they are will go here fn impersonate_search( - &self, + &mut self, audit: &mut AuditScope, filter: Filter, filter_intent: Filter, @@ -390,7 +394,7 @@ pub trait QueryServerTransaction { } fn impersonate_search_ext( - &self, + &mut self, audit: &mut AuditScope, filter: Filter, filter_intent: Filter, @@ -408,7 +412,7 @@ pub trait QueryServerTransaction { // Get a single entry by it's UUID. This is heavily relied on for internal // server operations, especially in login and acp checks for acp. fn internal_search_uuid( - &self, + &mut self, audit: &mut AuditScope, uuid: &Uuid, ) -> Result, OperationError> { @@ -434,7 +438,7 @@ pub trait QueryServerTransaction { } fn impersonate_search_ext_uuid( - &self, + &mut self, audit: &mut AuditScope, uuid: &Uuid, event: &Event, @@ -458,7 +462,7 @@ pub trait QueryServerTransaction { /// Do a schema aware conversion from a String:String to String:Value for modification /// present. fn clone_value( - &self, + &mut self, audit: &mut AuditScope, attr: &str, value: &str, @@ -535,7 +539,7 @@ pub trait QueryServerTransaction { } fn clone_partialvalue( - &self, + &mut self, audit: &mut AuditScope, attr: &str, value: &str, @@ -622,7 +626,7 @@ pub trait QueryServerTransaction { // In the opposite direction, we can resolve values for presentation fn resolve_value( - &self, + &mut self, audit: &mut AuditScope, value: &Value, ) -> Result { @@ -640,8 +644,8 @@ pub trait QueryServerTransaction { } } -pub struct QueryServerReadTransaction { - be_txn: BackendReadTransaction, +pub struct QueryServerReadTransaction<'a> { + be_txn: BackendReadTransaction<'a>, // Anything else? In the future, we'll need to have a schema transaction // type, maybe others? schema: SchemaReadTransaction, @@ -651,11 +655,11 @@ pub struct QueryServerReadTransaction { // Actually conduct a search request // This is the core of the server, as it processes the entire event // applies all parts required in order and more. -impl QueryServerTransaction for QueryServerReadTransaction { - type BackendTransactionType = BackendReadTransaction; +impl<'a> QueryServerTransaction for QueryServerReadTransaction<'a> { + type BackendTransactionType = BackendReadTransaction<'a>; - fn get_be_txn(&self) -> &BackendReadTransaction { - &self.be_txn + fn get_be_txn(&mut self) -> &mut BackendReadTransaction<'a> { + &mut self.be_txn } type SchemaTransactionType = SchemaReadTransaction; @@ -671,11 +675,11 @@ impl QueryServerTransaction for QueryServerReadTransaction { } } -impl QueryServerReadTransaction { +impl<'a> QueryServerReadTransaction<'a> { // Verify the data content of the server is as expected. This will probably // call various functions for validation, including possibly plugin // verifications. - fn verify(&self, au: &mut AuditScope) -> Vec> { + fn verify(&mut self, au: &mut AuditScope) -> Vec> { let mut audit = AuditScope::new("verify"); // If we fail after backend, we need to return NOW because we can't @@ -724,7 +728,7 @@ pub struct QueryServerWriteTransaction<'a> { committed: bool, d_uuid: Uuid, cid: Cid, - be_txn: BackendWriteTransaction, + be_txn: BackendWriteTransaction<'a>, schema: SchemaWriteTransaction<'a>, accesscontrols: AccessControlsWriteTransaction<'a>, // We store a set of flags that indicate we need a reload of @@ -735,10 +739,10 @@ pub struct QueryServerWriteTransaction<'a> { } impl<'a> QueryServerTransaction for QueryServerWriteTransaction<'a> { - type BackendTransactionType = BackendWriteTransaction; + type BackendTransactionType = BackendWriteTransaction<'a>; - fn get_be_txn(&self) -> &BackendWriteTransaction { - &self.be_txn + fn get_be_txn(&mut self) -> &mut BackendWriteTransaction<'a> { + &mut self.be_txn } type SchemaTransactionType = SchemaWriteTransaction<'a>; @@ -767,7 +771,7 @@ pub struct QueryServer { impl QueryServer { pub fn new(be: Backend, schema: Schema) -> Self { let (s_uuid, d_uuid) = { - let wr = be.write(BTreeSet::new()); + let mut wr = be.write(BTreeSet::new()); (wr.get_db_s_uuid(), wr.get_db_d_uuid()) }; info!("Server ID -> {:?}", s_uuid); @@ -806,7 +810,7 @@ impl QueryServer { // which today I don't think we have ... yet. committed: false, d_uuid: self.d_uuid, - cid: cid, + cid, be_txn: self.be.write(idxmeta), schema: schema_write, accesscontrols: self.accesscontrols.write(), @@ -831,7 +835,7 @@ impl QueryServer { // reloading to occur, which causes the idxmeta to update, and allows validation // of the schema in the subsequent steps as we proceed. - let reindex_write_1 = self.write(ts); + let mut reindex_write_1 = self.write(ts); reindex_write_1 .upgrade_reindex(audit, SYSTEM_INDEX_VERSION) .and_then(|_| reindex_write_1.commit(audit))?; @@ -857,7 +861,7 @@ impl QueryServer { // reindex and set to version + 1, this way when we bump the version // we are essetially pushing this version id back up to step write_1 - let reindex_write_2 = self.write(ts); + let mut reindex_write_2 = self.write(ts); reindex_write_2 .upgrade_reindex(audit, SYSTEM_INDEX_VERSION + 1) .and_then(|_| reindex_write_2.commit(audit))?; @@ -869,7 +873,7 @@ impl QueryServer { } pub fn verify(&self, au: &mut AuditScope) -> Vec> { - let r_txn = self.read(); + let mut r_txn = self.read(); r_txn.verify(au) } } @@ -1135,7 +1139,7 @@ impl<'a> QueryServerWriteTransaction<'a> { res } - pub fn purge_tombstones(&self, au: &mut AuditScope) -> Result<(), OperationError> { + pub fn purge_tombstones(&mut self, au: &mut AuditScope) -> Result<(), OperationError> { // delete everything that is a tombstone. // TODO #68: Has an appropriate amount of time/condition past (ie replication events?) @@ -1177,7 +1181,7 @@ impl<'a> QueryServerWriteTransaction<'a> { res } - pub fn purge_recycled(&self, au: &mut AuditScope) -> Result<(), OperationError> { + pub fn purge_recycled(&mut self, au: &mut AuditScope) -> Result<(), OperationError> { // Send everything that is recycled to tombstone // Search all recycled @@ -2038,7 +2042,7 @@ impl<'a> QueryServerWriteTransaction<'a> { self.internal_modify(audit, filt, modl) } - pub fn reindex(&self, audit: &mut AuditScope) -> Result<(), OperationError> { + pub fn reindex(&mut self, audit: &mut AuditScope) -> Result<(), OperationError> { // initiate a be reindex here. This could have been from first run checking // the versions, or it could just be from the cli where an admin needs to do an // indexing. @@ -2046,7 +2050,7 @@ impl<'a> QueryServerWriteTransaction<'a> { } pub(crate) fn upgrade_reindex( - &self, + &mut self, audit: &mut AuditScope, v: i64, ) -> Result<(), OperationError> { @@ -2551,7 +2555,7 @@ mod tests { assert!(server_txn.commit(audit).is_ok()); // New txn, push the cid forward. - let server_txn = server.write(time_p2); + let mut server_txn = server.write(time_p2); // Now purge assert!(server_txn.purge_tombstones(audit).is_ok()); @@ -2680,7 +2684,7 @@ mod tests { assert!(server_txn.commit(audit).is_ok()); // Now, establish enough time for the recycled items to be purged. - let server_txn = server.write(time_p2); + let mut server_txn = server.write(time_p2); // purge to tombstone, now that time has passed. assert!(server_txn.purge_recycled(audit).is_ok()); @@ -3201,7 +3205,7 @@ mod tests { } fn check_entry_has_mo( - qs: &QueryServerWriteTransaction, + qs: &mut QueryServerWriteTransaction, audit: &mut AuditScope, name: &str, mo: &str, @@ -3289,7 +3293,7 @@ mod tests { assert!(server_txn.revive_recycled(audit, &rev1).is_ok()); // check u1 contains MO -> assert!(check_entry_has_mo( - &server_txn, + &mut server_txn, audit, "u1", "cca2bbfc-5b43-43f3-be9e-f5b03b3defec" @@ -3304,13 +3308,13 @@ mod tests { }; assert!(server_txn.revive_recycled(audit, &rev2).is_ok()); assert!(check_entry_has_mo( - &server_txn, + &mut server_txn, audit, "u2", "e44cf9cd-9941-44cb-a02f-307b6e15ac54" )); assert!(check_entry_has_mo( - &server_txn, + &mut server_txn, audit, "u2", "d3132e6e-18ce-4b87-bee1-1d25e4bfe96d" @@ -3329,7 +3333,7 @@ mod tests { assert!(server_txn.revive_recycled(audit, &rev3).is_ok()); assert!( check_entry_has_mo( - &server_txn, + &mut server_txn, audit, "u3", "36048117-e479-45ed-aeb5-611e8d83d5b1" @@ -3346,7 +3350,7 @@ mod tests { assert!(server_txn.revive_recycled(audit, &rev4a).is_ok()); assert!( check_entry_has_mo( - &server_txn, + &mut server_txn, audit, "u4", "d5c59ac6-c533-4b00-989f-d0e183f07bab" @@ -3363,7 +3367,7 @@ mod tests { assert!(server_txn.revive_recycled(audit, &rev4b).is_ok()); assert!( check_entry_has_mo( - &server_txn, + &mut server_txn, audit, "u4", "d5c59ac6-c533-4b00-989f-d0e183f07bab" diff --git a/kanidmd/src/lib/value.rs b/kanidmd/src/lib/value.rs index 66b0ecc78..9b01321e1 100644 --- a/kanidmd/src/lib/value.rs +++ b/kanidmd/src/lib/value.rs @@ -20,7 +20,7 @@ lazy_static! { } #[allow(non_camel_case_types)] -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Deserialize, Serialize, Hash)] pub enum IndexType { EQUALITY, PRESENCE,