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,