[INFO] cloning repository https://github.com/t94j0/adexplorersnapshot-rs [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/t94j0/adexplorersnapshot-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ft94j0%2Fadexplorersnapshot-rs", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ft94j0%2Fadexplorersnapshot-rs'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 11b2203783f76a027744e85c401e5a7d86f54ad5 [INFO] linting t94j0/adexplorersnapshot-rs against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ft94j0%2Fadexplorersnapshot-rs" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/t94j0/adexplorersnapshot-rs [INFO] finished tweaking git repo https://github.com/t94j0/adexplorersnapshot-rs [INFO] tweaked toml for git repo https://github.com/t94j0/adexplorersnapshot-rs written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/t94j0/adexplorersnapshot-rs on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/t94j0/adexplorersnapshot-rs already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded clap_derive v4.5.8 [INFO] [stderr] Downloaded deflate64 v0.1.8 [INFO] [stderr] Downloaded thiserror v1.0.62 [INFO] [stderr] Downloaded tar v0.4.41 [INFO] [stderr] Downloaded thiserror-impl v1.0.62 [INFO] [stderr] Downloaded zip v2.1.3 [INFO] [stderr] Downloaded clap v4.5.9 [INFO] [stderr] Downloaded cc v1.0.106 [INFO] [stderr] Downloaded clap_builder v4.5.9 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] af2e49cdd63c0242ef2c4b1533f326962c981d0b848f9b2503c538413a282d90 [INFO] running `Command { std: "docker" "start" "-a" "af2e49cdd63c0242ef2c4b1533f326962c981d0b848f9b2503c538413a282d90", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "af2e49cdd63c0242ef2c4b1533f326962c981d0b848f9b2503c538413a282d90", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "af2e49cdd63c0242ef2c4b1533f326962c981d0b848f9b2503c538413a282d90", kill_on_drop: false }` [INFO] [stdout] af2e49cdd63c0242ef2c4b1533f326962c981d0b848f9b2503c538413a282d90 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 6f2fc3e9f9ecada8947da41a0176562bdd28ff22578b4d960567774d380d43fc [INFO] running `Command { std: "docker" "start" "-a" "6f2fc3e9f9ecada8947da41a0176562bdd28ff22578b4d960567774d380d43fc", kill_on_drop: false }` [INFO] [stderr] Compiling rustix v0.38.34 [INFO] [stderr] Compiling zstd-safe v7.2.0 [INFO] [stderr] Checking anstyle-query v1.1.0 [INFO] [stderr] Checking anstyle-parse v0.2.4 [INFO] [stderr] Checking linux-raw-sys v0.4.14 [INFO] [stderr] Compiling serde v1.0.203 [INFO] [stderr] Checking colorchoice v1.0.1 [INFO] [stderr] Checking anstyle v1.0.7 [INFO] [stderr] Compiling cc v1.0.106 [INFO] [stderr] Checking is_terminal_polyfill v1.70.0 [INFO] [stderr] Compiling syn v2.0.68 [INFO] [stderr] Checking inout v0.1.3 [INFO] [stderr] Compiling thiserror v1.0.62 [INFO] [stderr] Checking digest v0.10.7 [INFO] [stderr] Compiling serde_json v1.0.120 [INFO] [stderr] Checking clap_lex v0.7.1 [INFO] [stderr] Compiling zip v2.1.3 [INFO] [stderr] Checking bumpalo v3.16.0 [INFO] [stderr] Checking lockfree-object-pool v0.1.6 [INFO] [stderr] Checking cipher v0.4.4 [INFO] [stderr] Checking simd-adler32 v0.3.7 [INFO] [stderr] Checking lzma-rs v0.3.0 [INFO] [stderr] Checking time v0.3.36 [INFO] [stderr] Checking filetime v0.2.23 [INFO] [stderr] Checking constant_time_eq v0.3.0 [INFO] [stderr] Checking anstream v0.6.14 [INFO] [stderr] Checking either v1.13.0 [INFO] [stderr] Checking deflate64 v0.1.8 [INFO] [stderr] Checking memmap2 v0.9.4 [INFO] [stderr] Checking zopfli v0.8.1 [INFO] [stderr] Checking clap_builder v4.5.9 [INFO] [stderr] Checking aes v0.8.4 [INFO] [stderr] Checking hmac v0.12.1 [INFO] [stderr] Checking sha1 v0.10.6 [INFO] [stderr] Checking pbkdf2 v0.12.2 [INFO] [stderr] Checking rayon v1.10.0 [INFO] [stderr] Compiling zstd-sys v2.0.12+zstd.1.5.6 [INFO] [stderr] Compiling bzip2-sys v0.1.11+1.0.8 [INFO] [stderr] Checking xattr v1.3.1 [INFO] [stderr] Checking tar v0.4.41 [INFO] [stderr] Checking bzip2 v0.4.4 [INFO] [stderr] Compiling thiserror-impl v1.0.62 [INFO] [stderr] Compiling zeroize_derive v1.4.2 [INFO] [stderr] Compiling serde_derive v1.0.203 [INFO] [stderr] Compiling clap_derive v4.5.8 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Checking zeroize v1.8.1 [INFO] [stderr] Checking zstd v0.13.2 [INFO] [stderr] Checking clap v4.5.9 [INFO] [stderr] Checking ADExplorerSnapshot-rs v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/security_descriptor/acl.rs:48:13 [INFO] [stdout] | [INFO] [stdout] 48 | aces: aces, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `aces` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant field names in struct initialization [INFO] [stdout] --> src/security_descriptor/acl.rs:48:13 [INFO] [stdout] | [INFO] [stdout] 48 | aces: aces, [INFO] [stdout] | ^^^^^^^^^^ help: replace it with: `aces` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stdout] = note: `#[warn(clippy::redundant_field_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/guid/mod.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | mod guid; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `GUID` contains a capitalized acronym [INFO] [stdout] --> src/guid/guid.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct GUID { [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Guid` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implementation of inherent method `to_string(&self) -> String` for type `guid::guid::GUID` [INFO] [stdout] --> src/guid/guid.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 28 | / pub fn to_string(&self) -> String { [INFO] [stdout] 29 | | format!( [INFO] [stdout] 30 | | "{:08X}-{:04X}-{:04X}-{:02X}{:02X}-{:02X}{:02X}{:02X}{:02X}{:02X}{:02X}", [INFO] [stdout] 31 | | self.data1, [INFO] [stdout] ... | [INFO] [stdout] 43 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: implement trait `Display` for type `guid::guid::GUID` instead [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string [INFO] [stdout] = note: `#[warn(clippy::inherent_to_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true [INFO] [stdout] --> src/security_descriptor/access_mask.rs:105:1 [INFO] [stdout] | [INFO] [stdout] 105 | impl Into for AccessMask { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: `impl From for Foreign` is allowed by the orphan rules, for more information see [INFO] [stdout] https://doc.rust-lang.org/reference/items/implementations.html#trait-implementation-coherence [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into [INFO] [stdout] = note: `#[warn(clippy::from_over_into)]` on by default [INFO] [stdout] help: replace the `Into` implementation with `From` [INFO] [stdout] | [INFO] [stdout] 105 ~ impl From for u32 { [INFO] [stdout] 106 ~ fn from(val: AccessMask) -> Self { [INFO] [stdout] 107 ~ val.0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `ACE` contains a capitalized acronym [INFO] [stdout] --> src/security_descriptor/ace.rs:13:10 [INFO] [stdout] | [INFO] [stdout] 13 | pub enum ACE { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Ace` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `ACL` contains a capitalized acronym [INFO] [stdout] --> src/security_descriptor/acl.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct ACL { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Acl` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `SDDL` contains a capitalized acronym [INFO] [stdout] --> src/security_descriptor/sddl.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct SDDL { [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Sddl` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/guid/mod.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | mod guid; [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `GUID` contains a capitalized acronym [INFO] [stdout] --> src/guid/guid.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct GUID { [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Guid` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] = note: `#[warn(clippy::upper_case_acronyms)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/sid/mod.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | mod sid; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `SID` contains a capitalized acronym [INFO] [stdout] --> src/sid/sid.rs:10:12 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct SID { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Sid` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implementation of inherent method `to_string(&self) -> String` for type `guid::guid::GUID` [INFO] [stdout] --> src/guid/guid.rs:28:5 [INFO] [stdout] | [INFO] [stdout] 28 | / pub fn to_string(&self) -> String { [INFO] [stdout] 29 | | format!( [INFO] [stdout] 30 | | "{:08X}-{:04X}-{:04X}-{:02X}{:02X}-{:02X}{:02X}{:02X}{:02X}{:02X}{:02X}", [INFO] [stdout] 31 | | self.data1, [INFO] [stdout] ... | [INFO] [stdout] 43 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: implement trait `Display` for type `guid::guid::GUID` instead [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string [INFO] [stdout] = note: `#[warn(clippy::inherent_to_string)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implementation of inherent method `to_string(&self) -> String` for type `sid::sid::SID` [INFO] [stdout] --> src/sid/sid.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 27 | / pub fn to_string(&self) -> String { [INFO] [stdout] 28 | | let auth = u64::from_be_bytes([ [INFO] [stdout] 29 | | 0, [INFO] [stdout] 30 | | 0, [INFO] [stdout] ... | [INFO] [stdout] 43 | | format!("S-{}-{}-{}", self.revision, auth, sub_auths) [INFO] [stdout] 44 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: implement trait `Display` for type `sid::sid::SID` instead [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: an implementation of `From` is preferred since it gives you `Into<_>` for free where the reverse isn't true [INFO] [stdout] --> src/security_descriptor/access_mask.rs:105:1 [INFO] [stdout] | [INFO] [stdout] 105 | impl Into for AccessMask { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: `impl From for Foreign` is allowed by the orphan rules, for more information see [INFO] [stdout] https://doc.rust-lang.org/reference/items/implementations.html#trait-implementation-coherence [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#from_over_into [INFO] [stdout] = note: `#[warn(clippy::from_over_into)]` on by default [INFO] [stdout] help: replace the `Into` implementation with `From` [INFO] [stdout] | [INFO] [stdout] 105 ~ impl From for u32 { [INFO] [stdout] 106 ~ fn from(val: AccessMask) -> Self { [INFO] [stdout] 107 ~ val.0 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `ACE` contains a capitalized acronym [INFO] [stdout] --> src/security_descriptor/ace.rs:13:10 [INFO] [stdout] | [INFO] [stdout] 13 | pub enum ACE { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Ace` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/computers.rs:126:34 [INFO] [stdout] | [INFO] [stdout] 126 | let distinguished_name = obj [INFO] [stdout] | __________________________________^ [INFO] [stdout] 127 | | .get_first("distinguishedName") [INFO] [stdout] 128 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 129 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 126 ~ let distinguished_name = obj [INFO] [stdout] 127 + .get_first("distinguishedName") [INFO] [stdout] 128 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/computers.rs:133:20 [INFO] [stdout] | [INFO] [stdout] 133 | let name = obj [INFO] [stdout] | ____________________^ [INFO] [stdout] 134 | | .get_first("name") [INFO] [stdout] 135 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 136 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 133 ~ let name = obj [INFO] [stdout] 134 + .get_first("name") [INFO] [stdout] 135 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/computers.rs:154:26 [INFO] [stdout] | [INFO] [stdout] 154 | description: obj [INFO] [stdout] | __________________________^ [INFO] [stdout] 155 | | .get_first("description") [INFO] [stdout] 156 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 157 | | .map(|v| v.clone()), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 154 ~ description: obj [INFO] [stdout] 155 + .get_first("description") [INFO] [stdout] 156 ~ .and_then(AttributeValue::as_string).cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/security_descriptor/ace.rs:502:12 [INFO] [stdout] | [INFO] [stdout] 502 | if input.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!input.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/computers.rs:206:29 [INFO] [stdout] | [INFO] [stdout] 206 | samaccountname: obj [INFO] [stdout] | _____________________________^ [INFO] [stdout] 207 | | .get_first("sAMAccountName") [INFO] [stdout] 208 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 209 | | .map(|v| v.clone()), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 206 ~ samaccountname: obj [INFO] [stdout] 207 + .get_first("sAMAccountName") [INFO] [stdout] 208 ~ .and_then(AttributeValue::as_string).cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> src/security_descriptor/ace.rs:504:13 [INFO] [stdout] | [INFO] [stdout] 504 | assert!(false, "Failed to parse ACE"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `ACL` contains a capitalized acronym [INFO] [stdout] --> src/security_descriptor/acl.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct ACL { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Acl` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `SDDL` contains a capitalized acronym [INFO] [stdout] --> src/security_descriptor/sddl.rs:13:12 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct SDDL { [INFO] [stdout] | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Sddl` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> src/security_descriptor/sddl.rs:117:13 [INFO] [stdout] | [INFO] [stdout] 117 | assert!(false, "Owner SID should be present"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> src/security_descriptor/sddl.rs:126:13 [INFO] [stdout] | [INFO] [stdout] 126 | assert!(false, "Group SID should be present"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `dacl.aces.get(0)` [INFO] [stdout] --> src/security_descriptor/sddl.rs:136:58 [INFO] [stdout] | [INFO] [stdout] 136 | if let Some(ACE::AccessAllowed(first_ace)) = dacl.aces.get(0) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `dacl.aces.first()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_first [INFO] [stdout] = note: `#[warn(clippy::get_first)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> src/security_descriptor/sddl.rs:144:17 [INFO] [stdout] | [INFO] [stdout] 144 | assert!(false, "First ACE should be AccessAllowed"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> src/security_descriptor/sddl.rs:147:13 [INFO] [stdout] | [INFO] [stdout] 147 | assert!(false, "DACL should be present"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/sid/mod.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | mod sid; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `SID` contains a capitalized acronym [INFO] [stdout] --> src/sid/sid.rs:10:12 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct SID { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Sid` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: implementation of inherent method `to_string(&self) -> String` for type `sid::sid::SID` [INFO] [stdout] --> src/sid/sid.rs:27:5 [INFO] [stdout] | [INFO] [stdout] 27 | / pub fn to_string(&self) -> String { [INFO] [stdout] 28 | | let auth = u64::from_be_bytes([ [INFO] [stdout] 29 | | 0, [INFO] [stdout] 30 | | 0, [INFO] [stdout] ... | [INFO] [stdout] 43 | | format!("S-{}-{}-{}", self.revision, auth, sub_auths) [INFO] [stdout] 44 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: implement trait `Display` for type `sid::sid::SID` instead [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inherent_to_string [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/containers.rs:83:34 [INFO] [stdout] | [INFO] [stdout] 83 | let distinguished_name = obj [INFO] [stdout] | __________________________________^ [INFO] [stdout] 84 | | .get_first("distinguishedName") [INFO] [stdout] 85 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 86 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 83 ~ let distinguished_name = obj [INFO] [stdout] 84 + .get_first("distinguishedName") [INFO] [stdout] 85 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/containers.rs:89:20 [INFO] [stdout] | [INFO] [stdout] 89 | let name = obj [INFO] [stdout] | ____________________^ [INFO] [stdout] 90 | | .get_first("name") [INFO] [stdout] 91 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 92 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 89 ~ let name = obj [INFO] [stdout] 90 + .get_first("name") [INFO] [stdout] 91 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/output/bloodhound/domains.rs:211:21 [INFO] [stdout] | [INFO] [stdout] 211 | .filter_map(|obj| process_trust(obj)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `process_trust` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/computers.rs:126:34 [INFO] [stdout] | [INFO] [stdout] 126 | let distinguished_name = obj [INFO] [stdout] | __________________________________^ [INFO] [stdout] 127 | | .get_first("distinguishedName") [INFO] [stdout] 128 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 129 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 126 ~ let distinguished_name = obj [INFO] [stdout] 127 + .get_first("distinguishedName") [INFO] [stdout] 128 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/computers.rs:133:20 [INFO] [stdout] | [INFO] [stdout] 133 | let name = obj [INFO] [stdout] | ____________________^ [INFO] [stdout] 134 | | .get_first("name") [INFO] [stdout] 135 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 136 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 133 ~ let name = obj [INFO] [stdout] 134 + .get_first("name") [INFO] [stdout] 135 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/computers.rs:154:26 [INFO] [stdout] | [INFO] [stdout] 154 | description: obj [INFO] [stdout] | __________________________^ [INFO] [stdout] 155 | | .get_first("description") [INFO] [stdout] 156 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 157 | | .map(|v| v.clone()), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 154 ~ description: obj [INFO] [stdout] 155 + .get_first("description") [INFO] [stdout] 156 ~ .and_then(AttributeValue::as_string).cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/computers.rs:206:29 [INFO] [stdout] | [INFO] [stdout] 206 | samaccountname: obj [INFO] [stdout] | _____________________________^ [INFO] [stdout] 207 | | .get_first("sAMAccountName") [INFO] [stdout] 208 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 209 | | .map(|v| v.clone()), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 206 ~ samaccountname: obj [INFO] [stdout] 207 + .get_first("sAMAccountName") [INFO] [stdout] 208 ~ .and_then(AttributeValue::as_string).cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `GPO` contains a capitalized acronym [INFO] [stdout] --> src/output/bloodhound/gpos.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 36 | pub struct GPO { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Gpo` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/gpos.rs:81:34 [INFO] [stdout] | [INFO] [stdout] 81 | let distinguished_name = obj [INFO] [stdout] | __________________________________^ [INFO] [stdout] 82 | | .get_first("distinguishedName") [INFO] [stdout] 83 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 84 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 81 ~ let distinguished_name = obj [INFO] [stdout] 82 + .get_first("distinguishedName") [INFO] [stdout] 83 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/gpos.rs:87:20 [INFO] [stdout] | [INFO] [stdout] 87 | let name = obj [INFO] [stdout] | ____________________^ [INFO] [stdout] 88 | | .get_first("displayName") [INFO] [stdout] 89 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 90 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 87 ~ let name = obj [INFO] [stdout] 88 + .get_first("displayName") [INFO] [stdout] 89 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/containers.rs:83:34 [INFO] [stdout] | [INFO] [stdout] 83 | let distinguished_name = obj [INFO] [stdout] | __________________________________^ [INFO] [stdout] 84 | | .get_first("distinguishedName") [INFO] [stdout] 85 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 86 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 83 ~ let distinguished_name = obj [INFO] [stdout] 84 + .get_first("distinguishedName") [INFO] [stdout] 85 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/containers.rs:89:20 [INFO] [stdout] | [INFO] [stdout] 89 | let name = obj [INFO] [stdout] | ____________________^ [INFO] [stdout] 90 | | .get_first("name") [INFO] [stdout] 91 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 92 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 89 ~ let name = obj [INFO] [stdout] 90 + .get_first("name") [INFO] [stdout] 91 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/ous.rs:125:34 [INFO] [stdout] | [INFO] [stdout] 125 | let distinguished_name = obj [INFO] [stdout] | __________________________________^ [INFO] [stdout] 126 | | .get_first("distinguishedName") [INFO] [stdout] 127 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 128 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 125 ~ let distinguished_name = obj [INFO] [stdout] 126 + .get_first("distinguishedName") [INFO] [stdout] 127 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/ous.rs:142:26 [INFO] [stdout] | [INFO] [stdout] 142 | description: obj [INFO] [stdout] | __________________________^ [INFO] [stdout] 143 | | .get_first("description") [INFO] [stdout] 144 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 145 | | .map(|v| v.clone()), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 142 ~ description: obj [INFO] [stdout] 143 + .get_first("description") [INFO] [stdout] 144 ~ .and_then(AttributeValue::as_string).cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant closure [INFO] [stdout] --> src/output/bloodhound/domains.rs:211:21 [INFO] [stdout] | [INFO] [stdout] 211 | .filter_map(|obj| process_trust(obj)) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace the closure with the function itself: `process_trust` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stdout] = note: `#[warn(clippy::redundant_closure)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: name `GPO` contains a capitalized acronym [INFO] [stdout] --> src/output/bloodhound/gpos.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 36 | pub struct GPO { [INFO] [stdout] | ^^^ help: consider making the acronym lowercase, except the initial letter: `Gpo` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#upper_case_acronyms [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/users.rs:147:34 [INFO] [stdout] | [INFO] [stdout] 147 | let distinguished_name = obj [INFO] [stdout] | __________________________________^ [INFO] [stdout] 148 | | .get_first("distinguishedName") [INFO] [stdout] 149 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 150 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 147 ~ let distinguished_name = obj [INFO] [stdout] 148 + .get_first("distinguishedName") [INFO] [stdout] 149 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/users.rs:153:20 [INFO] [stdout] | [INFO] [stdout] 153 | let name = obj [INFO] [stdout] | ____________________^ [INFO] [stdout] 154 | | .get_first("name") [INFO] [stdout] 155 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 156 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 153 ~ let name = obj [INFO] [stdout] 154 + .get_first("name") [INFO] [stdout] 155 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/users.rs:164:26 [INFO] [stdout] | [INFO] [stdout] 164 | description: obj [INFO] [stdout] | __________________________^ [INFO] [stdout] 165 | | .get_first("description") [INFO] [stdout] 166 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 167 | | .map(|v| v.clone()), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 164 ~ description: obj [INFO] [stdout] 165 + .get_first("description") [INFO] [stdout] 166 ~ .and_then(AttributeValue::as_string).cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/users.rs:226:26 [INFO] [stdout] | [INFO] [stdout] 226 | displayname: obj [INFO] [stdout] | __________________________^ [INFO] [stdout] 227 | | .get_first("displayName") [INFO] [stdout] 228 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 229 | | .map(|v| v.clone()), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 226 ~ displayname: obj [INFO] [stdout] 227 + .get_first("displayName") [INFO] [stdout] 228 ~ .and_then(AttributeValue::as_string).cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/gpos.rs:81:34 [INFO] [stdout] | [INFO] [stdout] 81 | let distinguished_name = obj [INFO] [stdout] | __________________________________^ [INFO] [stdout] 82 | | .get_first("distinguishedName") [INFO] [stdout] 83 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 84 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 81 ~ let distinguished_name = obj [INFO] [stdout] 82 + .get_first("distinguishedName") [INFO] [stdout] 83 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/gpos.rs:87:20 [INFO] [stdout] | [INFO] [stdout] 87 | let name = obj [INFO] [stdout] | ____________________^ [INFO] [stdout] 88 | | .get_first("displayName") [INFO] [stdout] 89 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 90 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 87 ~ let name = obj [INFO] [stdout] 88 + .get_first("displayName") [INFO] [stdout] 89 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/output/bloodhound/users.rs:284:69 [INFO] [stdout] | [INFO] [stdout] 284 | if let Some(target_obj) = snapshot.get_computer(&target) { [INFO] [stdout] | ^^^^^^^ help: change this to: `target` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/output/bloodhound/users.rs:359:43 [INFO] [stdout] | [INFO] [stdout] 359 | ... .and_then(|p| p.split(':').last()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 359 - .and_then(|p| p.split(':').last()) [INFO] [stdout] 359 + .and_then(|p| p.split(':').next_back()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/output/bloodhound/utils/aces.rs:53:60 [INFO] [stdout] | [INFO] [stdout] 53 | if let Some(target_obj) = snapshot.get_sid(&ace.sid()) { [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `ace.sid()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/output/bloodhound/utils/aces.rs:133:21 [INFO] [stdout] | [INFO] [stdout] 133 | / if has_laps { [INFO] [stdout] 134 | | if ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid) { [INFO] [stdout] 135 | | rights.insert("AllExtendedRights".to_string()); [INFO] [stdout] 136 | | } [INFO] [stdout] 137 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 132 ~ ObjectType::Computer [INFO] [stdout] 133 ~ if has_laps => { [INFO] [stdout] 134 | if ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid) { [INFO] [stdout] 135 | rights.insert("AllExtendedRights".to_string()); [INFO] [stdout] 136 | } [INFO] [stdout] 137 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/output/bloodhound/utils/aces.rs:133:21 [INFO] [stdout] | [INFO] [stdout] 133 | / if has_laps { [INFO] [stdout] 134 | | if ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid) { [INFO] [stdout] 135 | | rights.insert("AllExtendedRights".to_string()); [INFO] [stdout] 136 | | } [INFO] [stdout] 137 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 133 ~ if has_laps [INFO] [stdout] 134 ~ && (ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid)) { [INFO] [stdout] 135 | rights.insert("AllExtendedRights".to_string()); [INFO] [stdout] 136 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/output/bloodhound/utils/aces.rs:149:21 [INFO] [stdout] | [INFO] [stdout] 149 | / if ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid) { [INFO] [stdout] 150 | | rights.insert("GenericWrite".to_string()); [INFO] [stdout] 151 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 148 ~ ObjectType::User | ObjectType::Group | ObjectType::Computer | ObjectType::GPO [INFO] [stdout] 149 ~ if (ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid)) => { [INFO] [stdout] 150 | rights.insert("GenericWrite".to_string()); [INFO] [stdout] 151 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser/cache.rs:34:28 [INFO] [stdout] | [INFO] [stdout] 34 | pub fn get(&self, key: &String) -> Option<&usize> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 34 - pub fn get(&self, key: &String) -> Option<&usize> { [INFO] [stdout] 34 + pub fn get(&self, key: &str) -> Option<&usize> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/parser/cache.rs:48:16 [INFO] [stdout] | [INFO] [stdout] 48 | if dn != &ou_dn_upper && (dn.ends_with(&ou_prefix) || dn == &ou_dn_upper) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 48 - if dn != &ou_dn_upper && (dn.ends_with(&ou_prefix) || dn == &ou_dn_upper) { [INFO] [stdout] 48 + if !(dn == &ou_dn_upper || !dn.ends_with(&ou_prefix)) { [INFO] [stdout] | [INFO] [stdout] 48 - if dn != &ou_dn_upper && (dn.ends_with(&ou_prefix) || dn == &ou_dn_upper) { [INFO] [stdout] 48 + if dn != &ou_dn_upper && dn.ends_with(&ou_prefix) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser/cache.rs:66:28 [INFO] [stdout] | [INFO] [stdout] 66 | pub fn get(&self, key: &String) -> Option<&usize> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 66 - pub fn get(&self, key: &String) -> Option<&usize> { [INFO] [stdout] 66 + pub fn get(&self, key: &str) -> Option<&usize> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser/cache.rs:74:37 [INFO] [stdout] | [INFO] [stdout] 74 | pub fn contains_key(&self, key: &String) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 74 - pub fn contains_key(&self, key: &String) -> bool { [INFO] [stdout] 74 + pub fn contains_key(&self, key: &str) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/parser/cache.rs:126:9 [INFO] [stdout] | [INFO] [stdout] 126 | / if !self.domains.contains_key(&ncname) { [INFO] [stdout] 127 | | self.domains.insert(ncname, idx); [INFO] [stdout] 128 | | } [INFO] [stdout] | |_________^ help: try: `self.domains.entry(ncname).or_insert(idx);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/parser/cache.rs:147:14 [INFO] [stdout] | [INFO] [stdout] 147 | .or_insert_with(HashSet::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Caches` [INFO] [stdout] --> src/parser/cache.rs:171:5 [INFO] [stdout] | [INFO] [stdout] 171 | / pub fn new() -> Self { [INFO] [stdout] 172 | | Caches { [INFO] [stdout] 173 | | root_domain: None, [INFO] [stdout] 174 | | domain_sid: None, [INFO] [stdout] ... | [INFO] [stdout] 194 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 170 + impl Default for Caches { [INFO] [stdout] 171 + fn default() -> Self { [INFO] [stdout] 172 + Self::new() [INFO] [stdout] 173 + } [INFO] [stdout] 174 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/parser/mod.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | mod parser; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/ous.rs:125:34 [INFO] [stdout] | [INFO] [stdout] 125 | let distinguished_name = obj [INFO] [stdout] | __________________________________^ [INFO] [stdout] 126 | | .get_first("distinguishedName") [INFO] [stdout] 127 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 128 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 125 ~ let distinguished_name = obj [INFO] [stdout] 126 + .get_first("distinguishedName") [INFO] [stdout] 127 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/ous.rs:142:26 [INFO] [stdout] | [INFO] [stdout] 142 | description: obj [INFO] [stdout] | __________________________^ [INFO] [stdout] 143 | | .get_first("description") [INFO] [stdout] 144 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 145 | | .map(|v| v.clone()), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 142 ~ description: obj [INFO] [stdout] 143 + .get_first("description") [INFO] [stdout] 144 ~ .and_then(AttributeValue::as_string).cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser/parser.rs:499:30 [INFO] [stdout] | [INFO] [stdout] 499 | SDDL::from_bytes(&o).ok() [INFO] [stdout] | ^^ help: change this to: `o` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser/parser.rs:507:29 [INFO] [stdout] | [INFO] [stdout] 507 | SID::from_bytes(&o).ok() [INFO] [stdout] | ^^ help: change this to: `o` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser/parser.rs:515:30 [INFO] [stdout] | [INFO] [stdout] 515 | GUID::from_bytes(&o).ok() [INFO] [stdout] | ^^ help: change this to: `o` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/users.rs:147:34 [INFO] [stdout] | [INFO] [stdout] 147 | let distinguished_name = obj [INFO] [stdout] | __________________________________^ [INFO] [stdout] 148 | | .get_first("distinguishedName") [INFO] [stdout] 149 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 150 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 147 ~ let distinguished_name = obj [INFO] [stdout] 148 + .get_first("distinguishedName") [INFO] [stdout] 149 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/users.rs:153:20 [INFO] [stdout] | [INFO] [stdout] 153 | let name = obj [INFO] [stdout] | ____________________^ [INFO] [stdout] 154 | | .get_first("name") [INFO] [stdout] 155 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 156 | | .map(|v| v.clone()) [INFO] [stdout] | |_______________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 153 ~ let name = obj [INFO] [stdout] 154 + .get_first("name") [INFO] [stdout] 155 + .and_then(AttributeValue::as_string).cloned() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/users.rs:164:26 [INFO] [stdout] | [INFO] [stdout] 164 | description: obj [INFO] [stdout] | __________________________^ [INFO] [stdout] 165 | | .get_first("description") [INFO] [stdout] 166 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 167 | | .map(|v| v.clone()), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 164 ~ description: obj [INFO] [stdout] 165 + .get_first("description") [INFO] [stdout] 166 ~ .and_then(AttributeValue::as_string).cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for cloning elements [INFO] [stdout] --> src/output/bloodhound/users.rs:226:26 [INFO] [stdout] | [INFO] [stdout] 226 | displayname: obj [INFO] [stdout] | __________________________^ [INFO] [stdout] 227 | | .get_first("displayName") [INFO] [stdout] 228 | | .and_then(AttributeValue::as_string) [INFO] [stdout] 229 | | .map(|v| v.clone()), [INFO] [stdout] | |___________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] help: consider calling the dedicated `cloned` method [INFO] [stdout] | [INFO] [stdout] 226 ~ displayname: obj [INFO] [stdout] 227 + .get_first("displayName") [INFO] [stdout] 228 ~ .and_then(AttributeValue::as_string).cloned(), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/output/bloodhound/users.rs:284:69 [INFO] [stdout] | [INFO] [stdout] 284 | if let Some(target_obj) = snapshot.get_computer(&target) { [INFO] [stdout] | ^^^^^^^ help: change this to: `target` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/output/bloodhound/users.rs:359:43 [INFO] [stdout] | [INFO] [stdout] 359 | ... .and_then(|p| p.split(':').last()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 359 - .and_then(|p| p.split(':').last()) [INFO] [stdout] 359 + .and_then(|p| p.split(':').next_back()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/output/bloodhound/utils/aces.rs:53:60 [INFO] [stdout] | [INFO] [stdout] 53 | if let Some(target_obj) = snapshot.get_sid(&ace.sid()) { [INFO] [stdout] | ^^^^^^^^^^ help: change this to: `ace.sid()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/output/bloodhound/utils/aces.rs:133:21 [INFO] [stdout] | [INFO] [stdout] 133 | / if has_laps { [INFO] [stdout] 134 | | if ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid) { [INFO] [stdout] 135 | | rights.insert("AllExtendedRights".to_string()); [INFO] [stdout] 136 | | } [INFO] [stdout] 137 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 132 ~ ObjectType::Computer [INFO] [stdout] 133 ~ if has_laps => { [INFO] [stdout] 134 | if ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid) { [INFO] [stdout] 135 | rights.insert("AllExtendedRights".to_string()); [INFO] [stdout] 136 | } [INFO] [stdout] 137 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/output/bloodhound/utils/aces.rs:133:21 [INFO] [stdout] | [INFO] [stdout] 133 | / if has_laps { [INFO] [stdout] 134 | | if ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid) { [INFO] [stdout] 135 | | rights.insert("AllExtendedRights".to_string()); [INFO] [stdout] 136 | | } [INFO] [stdout] 137 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 133 ~ if has_laps [INFO] [stdout] 134 ~ && (ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid)) { [INFO] [stdout] 135 | rights.insert("AllExtendedRights".to_string()); [INFO] [stdout] 136 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/output/bloodhound/utils/aces.rs:149:21 [INFO] [stdout] | [INFO] [stdout] 149 | / if ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid) { [INFO] [stdout] 150 | | rights.insert("GenericWrite".to_string()); [INFO] [stdout] 151 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 148 ~ ObjectType::User | ObjectType::Group | ObjectType::Computer | ObjectType::GPO [INFO] [stdout] 149 ~ if (ace_type.is_none() || ace_type == Some(ACEGuid::AllGuid)) => { [INFO] [stdout] 150 | rights.insert("GenericWrite".to_string()); [INFO] [stdout] 151 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser/cache.rs:34:28 [INFO] [stdout] | [INFO] [stdout] 34 | pub fn get(&self, key: &String) -> Option<&usize> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 34 - pub fn get(&self, key: &String) -> Option<&usize> { [INFO] [stdout] 34 + pub fn get(&self, key: &str) -> Option<&usize> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/parser/cache.rs:48:16 [INFO] [stdout] | [INFO] [stdout] 48 | if dn != &ou_dn_upper && (dn.ends_with(&ou_prefix) || dn == &ou_dn_upper) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 48 - if dn != &ou_dn_upper && (dn.ends_with(&ou_prefix) || dn == &ou_dn_upper) { [INFO] [stdout] 48 + if !(dn == &ou_dn_upper || !dn.ends_with(&ou_prefix)) { [INFO] [stdout] | [INFO] [stdout] 48 - if dn != &ou_dn_upper && (dn.ends_with(&ou_prefix) || dn == &ou_dn_upper) { [INFO] [stdout] 48 + if dn != &ou_dn_upper && dn.ends_with(&ou_prefix) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser/cache.rs:66:28 [INFO] [stdout] | [INFO] [stdout] 66 | pub fn get(&self, key: &String) -> Option<&usize> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 66 - pub fn get(&self, key: &String) -> Option<&usize> { [INFO] [stdout] 66 + pub fn get(&self, key: &str) -> Option<&usize> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/parser/cache.rs:74:37 [INFO] [stdout] | [INFO] [stdout] 74 | pub fn contains_key(&self, key: &String) -> bool { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 74 - pub fn contains_key(&self, key: &String) -> bool { [INFO] [stdout] 74 + pub fn contains_key(&self, key: &str) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: usage of `contains_key` followed by `insert` on a `HashMap` [INFO] [stdout] --> src/parser/cache.rs:126:9 [INFO] [stdout] | [INFO] [stdout] 126 | / if !self.domains.contains_key(&ncname) { [INFO] [stdout] 127 | | self.domains.insert(ncname, idx); [INFO] [stdout] 128 | | } [INFO] [stdout] | |_________^ help: try: `self.domains.entry(ncname).or_insert(idx);` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_entry [INFO] [stdout] = note: `#[warn(clippy::map_entry)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of `or_insert_with` to construct default value [INFO] [stdout] --> src/parser/cache.rs:147:14 [INFO] [stdout] | [INFO] [stdout] 147 | .or_insert_with(HashSet::new) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you should consider adding a `Default` implementation for `Caches` [INFO] [stdout] --> src/parser/cache.rs:171:5 [INFO] [stdout] | [INFO] [stdout] 171 | / pub fn new() -> Self { [INFO] [stdout] 172 | | Caches { [INFO] [stdout] 173 | | root_domain: None, [INFO] [stdout] 174 | | domain_sid: None, [INFO] [stdout] ... | [INFO] [stdout] 194 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stdout] = note: `#[warn(clippy::new_without_default)]` on by default [INFO] [stdout] help: try adding this [INFO] [stdout] | [INFO] [stdout] 170 + impl Default for Caches { [INFO] [stdout] 171 + fn default() -> Self { [INFO] [stdout] 172 + Self::new() [INFO] [stdout] 173 + } [INFO] [stdout] 174 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/parser/mod.rs:3:1 [INFO] [stdout] | [INFO] [stdout] 3 | mod parser; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser/parser.rs:499:30 [INFO] [stdout] | [INFO] [stdout] 499 | SDDL::from_bytes(&o).ok() [INFO] [stdout] | ^^ help: change this to: `o` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser/parser.rs:507:29 [INFO] [stdout] | [INFO] [stdout] 507 | SID::from_bytes(&o).ok() [INFO] [stdout] | ^^ help: change this to: `o` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/parser/parser.rs:515:30 [INFO] [stdout] | [INFO] [stdout] 515 | GUID::from_bytes(&o).ok() [INFO] [stdout] | ^^ help: change this to: `o` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/main.rs:94:23 [INFO] [stdout] | [INFO] [stdout] 94 | let output_types: Vec<(&str, Box Box>)> = vec![ [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:151:22 [INFO] [stdout] | [INFO] [stdout] 151 | .map_err(|e| Error::new(ErrorKind::Other, e))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 151 - .map_err(|e| Error::new(ErrorKind::Other, e))?; [INFO] [stdout] 151 + .map_err(|e| Error::other(e))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/main.rs:94:23 [INFO] [stdout] | [INFO] [stdout] 94 | let output_types: Vec<(&str, Box Box>)> = vec![ [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:151:22 [INFO] [stdout] | [INFO] [stdout] 151 | .map_err(|e| Error::new(ErrorKind::Other, e))?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#io_other_error [INFO] [stdout] = note: `#[warn(clippy::io_other_error)]` on by default [INFO] [stdout] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 151 - .map_err(|e| Error::new(ErrorKind::Other, e))?; [INFO] [stdout] 151 + .map_err(|e| Error::other(e))?; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 28.52s [INFO] running `Command { std: "docker" "inspect" "6f2fc3e9f9ecada8947da41a0176562bdd28ff22578b4d960567774d380d43fc", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "6f2fc3e9f9ecada8947da41a0176562bdd28ff22578b4d960567774d380d43fc", kill_on_drop: false }` [INFO] [stdout] 6f2fc3e9f9ecada8947da41a0176562bdd28ff22578b4d960567774d380d43fc