[INFO] cloning repository https://github.com/quitesimpleorg/raou [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/quitesimpleorg/raou" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fquitesimpleorg%2Fraou", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fquitesimpleorg%2Fraou'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 30f3002bdae43ae259c412ddb3483201af4d6195 [INFO] linting quitesimpleorg/raou against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fquitesimpleorg%2Fraou" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/quitesimpleorg/raou [INFO] finished tweaking git repo https://github.com/quitesimpleorg/raou [INFO] tweaked toml for git repo https://github.com/quitesimpleorg/raou written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/quitesimpleorg/raou 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/quitesimpleorg/raou 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] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded libc v0.2.72 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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] 6a24ccdcf59fdfb1cc226b0f365c6921a25d3809c4b9d8a87b5c237827411ded [INFO] running `Command { std: "docker" "start" "-a" "6a24ccdcf59fdfb1cc226b0f365c6921a25d3809c4b9d8a87b5c237827411ded", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "6a24ccdcf59fdfb1cc226b0f365c6921a25d3809c4b9d8a87b5c237827411ded", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "6a24ccdcf59fdfb1cc226b0f365c6921a25d3809c4b9d8a87b5c237827411ded", kill_on_drop: false }` [INFO] [stdout] 6a24ccdcf59fdfb1cc226b0f365c6921a25d3809c4b9d8a87b5c237827411ded [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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] 4768486652daecefaf7f3ab189340ea5730f7e772693617839ff6e42db665e02 [INFO] running `Command { std: "docker" "start" "-a" "4768486652daecefaf7f3ab189340ea5730f7e772693617839ff6e42db665e02", kill_on_drop: false }` [INFO] [stderr] warning: `package.edition` is unspecified, defaulting to `2015` while the latest is `2024` [INFO] [stderr] Compiling libc v0.2.72 [INFO] [stderr] Checking raou v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `libc::passwd` [INFO] [stdout] --> src/main.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use libc::passwd; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `pw_passwd` and `pw_gecos` are never read [INFO] [stdout] --> src/main.rs:41:5 [INFO] [stdout] | [INFO] [stdout] 39 | struct Passwd { [INFO] [stdout] | ------ fields in this struct [INFO] [stdout] 40 | pw_name: String, [INFO] [stdout] 41 | pw_passwd: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 44 | pw_gecos: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:26:9 [INFO] [stdout] | [INFO] [stdout] 26 | / return Entry { [INFO] [stdout] 27 | | users: Vec::new(), [INFO] [stdout] 28 | | dest_user: String::new(), [INFO] [stdout] 29 | | cmd: String::new(), [INFO] [stdout] ... | [INFO] [stdout] 34 | | arbitrary_args: false, [INFO] [stdout] 35 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 26 ~ Entry { [INFO] [stdout] 27 + users: Vec::new(), [INFO] [stdout] 28 + dest_user: String::new(), [INFO] [stdout] 29 + cmd: String::new(), [INFO] [stdout] 30 + args: String::new(), [INFO] [stdout] 31 + argv0: String::new(), [INFO] [stdout] 32 + inherit_envs: Vec::new(), [INFO] [stdout] 33 + no_new_privs: true, [INFO] [stdout] 34 + arbitrary_args: false, [INFO] [stdout] 35 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:51:5 [INFO] [stdout] | [INFO] [stdout] 51 | / return errnowrapper(unsafe { [INFO] [stdout] 52 | | libc::initgroups(userarg.unwrap().as_ptr(), group) [INFO] [stdout] 53 | | }); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 51 ~ errnowrapper(unsafe { [INFO] [stdout] 52 + libc::initgroups(userarg.unwrap().as_ptr(), group) [INFO] [stdout] 53 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:60:5 [INFO] [stdout] | [INFO] [stdout] 60 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 60 - return Ok(()); [INFO] [stdout] 60 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 64 | return errnowrapper(unsafe { libc::setuid(id) }); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 64 - return errnowrapper(unsafe { libc::setuid(id) }); [INFO] [stdout] 64 + errnowrapper(unsafe { libc::setuid(id) }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:68:5 [INFO] [stdout] | [INFO] [stdout] 68 | return errnowrapper(unsafe { libc::setgid(gid) }); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 68 - return errnowrapper(unsafe { libc::setgid(gid) }); [INFO] [stdout] 68 + errnowrapper(unsafe { libc::setgid(gid) }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:73:9 [INFO] [stdout] | [INFO] [stdout] 73 | return libc::geteuid(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 73 - return libc::geteuid(); [INFO] [stdout] 73 + libc::geteuid() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `libc::passwd` [INFO] [stdout] --> src/main.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 11 | use libc::passwd; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:128:5 [INFO] [stdout] | [INFO] [stdout] 128 | / return Err(Error::new( [INFO] [stdout] 129 | | ErrorKind::PermissionDenied, [INFO] [stdout] 130 | | "Not allowed to become target user", [INFO] [stdout] 131 | | )); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 128 ~ Err(Error::new( [INFO] [stdout] 129 + ErrorKind::PermissionDenied, [INFO] [stdout] 130 + "Not allowed to become target user", [INFO] [stdout] 131 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:118:39 [INFO] [stdout] | [INFO] [stdout] 118 | let passwd: Passwd = getpwnam(&user)?; [INFO] [stdout] | ^^^^^ help: change this to: `user` [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: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:168:8 [INFO] [stdout] | [INFO] [stdout] 168 | if !key.is_some() || !value.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `key.is_none()` [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] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:168:26 [INFO] [stdout] | [INFO] [stdout] 168 | if !key.is_some() || !value.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `value.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:187:5 [INFO] [stdout] | [INFO] [stdout] 187 | return errnowrapper(unsafe { libc::clearenv() }); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 187 - return errnowrapper(unsafe { libc::clearenv() }); [INFO] [stdout] 187 + errnowrapper(unsafe { libc::clearenv() }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:228:5 [INFO] [stdout] | [INFO] [stdout] 228 | return CString::new(s.as_ref()).unwrap().into_raw(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 228 - return CString::new(s.as_ref()).unwrap().into_raw(); [INFO] [stdout] 228 + CString::new(s.as_ref()).unwrap().into_raw() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:250:5 [INFO] [stdout] | [INFO] [stdout] 250 | return args; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 250 - return args; [INFO] [stdout] 250 + args [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/main.rs:231:46 [INFO] [stdout] | [INFO] [stdout] 231 | fn create_execv_args(entry: &Entry, cmdargs: &Vec) -> Vec<*const libc::c_char> { [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] 231 - fn create_execv_args(entry: &Entry, cmdargs: &Vec) -> Vec<*const libc::c_char> { [INFO] [stdout] 231 + fn create_execv_args(entry: &Entry, cmdargs: &[String]) -> Vec<*const libc::c_char> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/main.rs:247:35 [INFO] [stdout] | [INFO] [stdout] 247 | args.insert(0, to_cstring(&entry.cmd.split_at(cmdbegin).1)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `entry.cmd.split_at(cmdbegin).1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:266:28 [INFO] [stdout] | [INFO] [stdout] 266 | return Err(std::io::Error::new( [INFO] [stdout] | ____________________________^ [INFO] [stdout] 267 | | ErrorKind::Other, [INFO] [stdout] 268 | | "Error: Entry not a file", [INFO] [stdout] 269 | | )); [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] 266 ~ return Err(std::io::Error::other( [INFO] [stdout] 267 ~ "Error: Entry not a file", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:287:42 [INFO] [stdout] | [INFO] [stdout] 287 | let args = create_execv_args(&entry, &cmdargs); [INFO] [stdout] | ^^^^^^^^ help: change this to: `cmdargs` [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: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/main.rs:290:5 [INFO] [stdout] | [INFO] [stdout] 290 | / become_user(&destuserpasswd).or_else(|e| { [INFO] [stdout] 291 | | return Err(Error::new( [INFO] [stdout] 292 | | ErrorKind::PermissionDenied, [INFO] [stdout] 293 | | format!("Failed to switch user: {}", &e.to_string()), [INFO] [stdout] 294 | | )); [INFO] [stdout] 295 | | })?; [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] help: use `map_err` instead [INFO] [stdout] | [INFO] [stdout] 290 ~ become_user(&destuserpasswd).map_err(|e| { [INFO] [stdout] 291 ~ return Error::new( [INFO] [stdout] 292 + ErrorKind::PermissionDenied, [INFO] [stdout] 293 + format!("Failed to switch user: {}", &e.to_string()), [INFO] [stdout] 294 ~ ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:291:9 [INFO] [stdout] | [INFO] [stdout] 291 | / return Err(Error::new( [INFO] [stdout] 292 | | ErrorKind::PermissionDenied, [INFO] [stdout] 293 | | format!("Failed to switch user: {}", &e.to_string()), [INFO] [stdout] 294 | | )); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 291 ~ Err(Error::new( [INFO] [stdout] 292 + ErrorKind::PermissionDenied, [INFO] [stdout] 293 + format!("Failed to switch user: {}", &e.to_string()), [INFO] [stdout] 294 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/main.rs:296:5 [INFO] [stdout] | [INFO] [stdout] 296 | / setup_environment(&destuserpasswd, &entry.inherit_envs) [INFO] [stdout] 297 | | .or_else(|e| { [INFO] [stdout] 298 | | return Err(Error::new( [INFO] [stdout] 299 | | ErrorKind::Other, [INFO] [stdout] 300 | | format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] 301 | | )); [INFO] [stdout] 302 | | })?; [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] help: use `map_err` instead [INFO] [stdout] | [INFO] [stdout] 297 ~ .map_err(|e| { [INFO] [stdout] 298 ~ return Error::new( [INFO] [stdout] 299 + ErrorKind::Other, [INFO] [stdout] 300 + format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] 301 ~ ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:298:13 [INFO] [stdout] | [INFO] [stdout] 298 | / return Err(Error::new( [INFO] [stdout] 299 | | ErrorKind::Other, [INFO] [stdout] 300 | | format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] 301 | | )); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 298 ~ Err(Error::new( [INFO] [stdout] 299 + ErrorKind::Other, [INFO] [stdout] 300 + format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] 301 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:298:24 [INFO] [stdout] | [INFO] [stdout] 298 | return Err(Error::new( [INFO] [stdout] | ________________________^ [INFO] [stdout] 299 | | ErrorKind::Other, [INFO] [stdout] 300 | | format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] 301 | | )); [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 298 ~ return Err(Error::other( [INFO] [stdout] 299 ~ format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/main.rs:304:5 [INFO] [stdout] | [INFO] [stdout] 304 | / drop_privs(&entry).or_else(|e| { [INFO] [stdout] 305 | | return Err(Error::new( [INFO] [stdout] 306 | | ErrorKind::Other, [INFO] [stdout] 307 | | format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] 308 | | )); [INFO] [stdout] 309 | | })?; [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] help: use `map_err` instead [INFO] [stdout] | [INFO] [stdout] 304 ~ drop_privs(&entry).map_err(|e| { [INFO] [stdout] 305 ~ return Error::new( [INFO] [stdout] 306 + ErrorKind::Other, [INFO] [stdout] 307 + format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] 308 ~ ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:305:9 [INFO] [stdout] | [INFO] [stdout] 305 | / return Err(Error::new( [INFO] [stdout] 306 | | ErrorKind::Other, [INFO] [stdout] 307 | | format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] 308 | | )); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 305 ~ Err(Error::new( [INFO] [stdout] 306 + ErrorKind::Other, [INFO] [stdout] 307 + format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] 308 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:305:20 [INFO] [stdout] | [INFO] [stdout] 305 | return Err(Error::new( [INFO] [stdout] | ____________________^ [INFO] [stdout] 306 | | ErrorKind::Other, [INFO] [stdout] 307 | | format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] 308 | | )); [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 305 ~ return Err(Error::other( [INFO] [stdout] 306 ~ format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/main.rs:312:9 [INFO] [stdout] | [INFO] [stdout] 312 | / errnowrapper(libc::execv(to_cstring(entry.cmd), args.as_ptr())) [INFO] [stdout] 313 | | .or_else(|e| { [INFO] [stdout] 314 | | return Err(Error::new( [INFO] [stdout] 315 | | ErrorKind::Other, [INFO] [stdout] 316 | | format!("execv failed: {}", &e.to_string()), [INFO] [stdout] 317 | | )); [INFO] [stdout] 318 | | })?; [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] help: use `map_err` instead [INFO] [stdout] | [INFO] [stdout] 313 ~ .map_err(|e| { [INFO] [stdout] 314 ~ return Error::new( [INFO] [stdout] 315 + ErrorKind::Other, [INFO] [stdout] 316 + format!("execv failed: {}", &e.to_string()), [INFO] [stdout] 317 ~ ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:314:17 [INFO] [stdout] | [INFO] [stdout] 314 | / return Err(Error::new( [INFO] [stdout] 315 | | ErrorKind::Other, [INFO] [stdout] 316 | | format!("execv failed: {}", &e.to_string()), [INFO] [stdout] 317 | | )); [INFO] [stdout] | |__________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 314 ~ Err(Error::new( [INFO] [stdout] 315 + ErrorKind::Other, [INFO] [stdout] 316 + format!("execv failed: {}", &e.to_string()), [INFO] [stdout] 317 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:314:28 [INFO] [stdout] | [INFO] [stdout] 314 | return Err(Error::new( [INFO] [stdout] | ____________________________^ [INFO] [stdout] 315 | | ErrorKind::Other, [INFO] [stdout] 316 | | format!("execv failed: {}", &e.to_string()), [INFO] [stdout] 317 | | )); [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 314 ~ return Err(Error::other( [INFO] [stdout] 315 ~ format!("execv failed: {}", &e.to_string()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `entryname` after checking its variant with `is_some` [INFO] [stdout] --> src/main.rs:327:21 [INFO] [stdout] | [INFO] [stdout] 326 | if entryname.is_some() { [INFO] [stdout] | ---------------------- help: try: `if let Some() = entryname` [INFO] [stdout] 327 | let entry = entryname.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/main.rs:332:9 [INFO] [stdout] | [INFO] [stdout] 332 | / match exec(entry, &cmdargs) { [INFO] [stdout] 333 | | Err(e) => { [INFO] [stdout] 334 | | eprintln!("The following error ocurred:"); [INFO] [stdout] 335 | | eprintln!("{}", e); [INFO] [stdout] ... | [INFO] [stdout] 339 | | _ => {} [INFO] [stdout] 340 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 332 ~ if let Err(e) = exec(entry, &cmdargs) { [INFO] [stdout] 333 + eprintln!("The following error ocurred:"); [INFO] [stdout] 334 + eprintln!("{}", e); [INFO] [stdout] 335 + [INFO] [stdout] 336 + std::process::exit(1); [INFO] [stdout] 337 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `pw_passwd` and `pw_gecos` are never read [INFO] [stdout] --> src/main.rs:41:5 [INFO] [stdout] | [INFO] [stdout] 39 | struct Passwd { [INFO] [stdout] | ------ fields in this struct [INFO] [stdout] 40 | pw_name: String, [INFO] [stdout] 41 | pw_passwd: String, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 44 | pw_gecos: String, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:26:9 [INFO] [stdout] | [INFO] [stdout] 26 | / return Entry { [INFO] [stdout] 27 | | users: Vec::new(), [INFO] [stdout] 28 | | dest_user: String::new(), [INFO] [stdout] 29 | | cmd: String::new(), [INFO] [stdout] ... | [INFO] [stdout] 34 | | arbitrary_args: false, [INFO] [stdout] 35 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 26 ~ Entry { [INFO] [stdout] 27 + users: Vec::new(), [INFO] [stdout] 28 + dest_user: String::new(), [INFO] [stdout] 29 + cmd: String::new(), [INFO] [stdout] 30 + args: String::new(), [INFO] [stdout] 31 + argv0: String::new(), [INFO] [stdout] 32 + inherit_envs: Vec::new(), [INFO] [stdout] 33 + no_new_privs: true, [INFO] [stdout] 34 + arbitrary_args: false, [INFO] [stdout] 35 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:51:5 [INFO] [stdout] | [INFO] [stdout] 51 | / return errnowrapper(unsafe { [INFO] [stdout] 52 | | libc::initgroups(userarg.unwrap().as_ptr(), group) [INFO] [stdout] 53 | | }); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 51 ~ errnowrapper(unsafe { [INFO] [stdout] 52 + libc::initgroups(userarg.unwrap().as_ptr(), group) [INFO] [stdout] 53 ~ }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:60:5 [INFO] [stdout] | [INFO] [stdout] 60 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 60 - return Ok(()); [INFO] [stdout] 60 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 64 | return errnowrapper(unsafe { libc::setuid(id) }); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 64 - return errnowrapper(unsafe { libc::setuid(id) }); [INFO] [stdout] 64 + errnowrapper(unsafe { libc::setuid(id) }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:68:5 [INFO] [stdout] | [INFO] [stdout] 68 | return errnowrapper(unsafe { libc::setgid(gid) }); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 68 - return errnowrapper(unsafe { libc::setgid(gid) }); [INFO] [stdout] 68 + errnowrapper(unsafe { libc::setgid(gid) }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:73:9 [INFO] [stdout] | [INFO] [stdout] 73 | return libc::geteuid(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 73 - return libc::geteuid(); [INFO] [stdout] 73 + libc::geteuid() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:128:5 [INFO] [stdout] | [INFO] [stdout] 128 | / return Err(Error::new( [INFO] [stdout] 129 | | ErrorKind::PermissionDenied, [INFO] [stdout] 130 | | "Not allowed to become target user", [INFO] [stdout] 131 | | )); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 128 ~ Err(Error::new( [INFO] [stdout] 129 + ErrorKind::PermissionDenied, [INFO] [stdout] 130 + "Not allowed to become target user", [INFO] [stdout] 131 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:118:39 [INFO] [stdout] | [INFO] [stdout] 118 | let passwd: Passwd = getpwnam(&user)?; [INFO] [stdout] | ^^^^^ help: change this to: `user` [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: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:168:8 [INFO] [stdout] | [INFO] [stdout] 168 | if !key.is_some() || !value.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: try: `key.is_none()` [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] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:168:26 [INFO] [stdout] | [INFO] [stdout] 168 | if !key.is_some() || !value.is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `value.is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:187:5 [INFO] [stdout] | [INFO] [stdout] 187 | return errnowrapper(unsafe { libc::clearenv() }); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 187 - return errnowrapper(unsafe { libc::clearenv() }); [INFO] [stdout] 187 + errnowrapper(unsafe { libc::clearenv() }) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:228:5 [INFO] [stdout] | [INFO] [stdout] 228 | return CString::new(s.as_ref()).unwrap().into_raw(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 228 - return CString::new(s.as_ref()).unwrap().into_raw(); [INFO] [stdout] 228 + CString::new(s.as_ref()).unwrap().into_raw() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:250:5 [INFO] [stdout] | [INFO] [stdout] 250 | return args; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 250 - return args; [INFO] [stdout] 250 + args [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/main.rs:231:46 [INFO] [stdout] | [INFO] [stdout] 231 | fn create_execv_args(entry: &Entry, cmdargs: &Vec) -> Vec<*const libc::c_char> { [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] 231 - fn create_execv_args(entry: &Entry, cmdargs: &Vec) -> Vec<*const libc::c_char> { [INFO] [stdout] 231 + fn create_execv_args(entry: &Entry, cmdargs: &[String]) -> Vec<*const libc::c_char> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/main.rs:247:35 [INFO] [stdout] | [INFO] [stdout] 247 | args.insert(0, to_cstring(&entry.cmd.split_at(cmdbegin).1)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `entry.cmd.split_at(cmdbegin).1` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:266:28 [INFO] [stdout] | [INFO] [stdout] 266 | return Err(std::io::Error::new( [INFO] [stdout] | ____________________________^ [INFO] [stdout] 267 | | ErrorKind::Other, [INFO] [stdout] 268 | | "Error: Entry not a file", [INFO] [stdout] 269 | | )); [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] 266 ~ return Err(std::io::Error::other( [INFO] [stdout] 267 ~ "Error: Entry not a file", [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:287:42 [INFO] [stdout] | [INFO] [stdout] 287 | let args = create_execv_args(&entry, &cmdargs); [INFO] [stdout] | ^^^^^^^^ help: change this to: `cmdargs` [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: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/main.rs:290:5 [INFO] [stdout] | [INFO] [stdout] 290 | / become_user(&destuserpasswd).or_else(|e| { [INFO] [stdout] 291 | | return Err(Error::new( [INFO] [stdout] 292 | | ErrorKind::PermissionDenied, [INFO] [stdout] 293 | | format!("Failed to switch user: {}", &e.to_string()), [INFO] [stdout] 294 | | )); [INFO] [stdout] 295 | | })?; [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] = note: `#[warn(clippy::bind_instead_of_map)]` on by default [INFO] [stdout] help: use `map_err` instead [INFO] [stdout] | [INFO] [stdout] 290 ~ become_user(&destuserpasswd).map_err(|e| { [INFO] [stdout] 291 ~ return Error::new( [INFO] [stdout] 292 + ErrorKind::PermissionDenied, [INFO] [stdout] 293 + format!("Failed to switch user: {}", &e.to_string()), [INFO] [stdout] 294 ~ ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:291:9 [INFO] [stdout] | [INFO] [stdout] 291 | / return Err(Error::new( [INFO] [stdout] 292 | | ErrorKind::PermissionDenied, [INFO] [stdout] 293 | | format!("Failed to switch user: {}", &e.to_string()), [INFO] [stdout] 294 | | )); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 291 ~ Err(Error::new( [INFO] [stdout] 292 + ErrorKind::PermissionDenied, [INFO] [stdout] 293 + format!("Failed to switch user: {}", &e.to_string()), [INFO] [stdout] 294 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/main.rs:296:5 [INFO] [stdout] | [INFO] [stdout] 296 | / setup_environment(&destuserpasswd, &entry.inherit_envs) [INFO] [stdout] 297 | | .or_else(|e| { [INFO] [stdout] 298 | | return Err(Error::new( [INFO] [stdout] 299 | | ErrorKind::Other, [INFO] [stdout] 300 | | format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] 301 | | )); [INFO] [stdout] 302 | | })?; [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] help: use `map_err` instead [INFO] [stdout] | [INFO] [stdout] 297 ~ .map_err(|e| { [INFO] [stdout] 298 ~ return Error::new( [INFO] [stdout] 299 + ErrorKind::Other, [INFO] [stdout] 300 + format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] 301 ~ ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:298:13 [INFO] [stdout] | [INFO] [stdout] 298 | / return Err(Error::new( [INFO] [stdout] 299 | | ErrorKind::Other, [INFO] [stdout] 300 | | format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] 301 | | )); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 298 ~ Err(Error::new( [INFO] [stdout] 299 + ErrorKind::Other, [INFO] [stdout] 300 + format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] 301 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:298:24 [INFO] [stdout] | [INFO] [stdout] 298 | return Err(Error::new( [INFO] [stdout] | ________________________^ [INFO] [stdout] 299 | | ErrorKind::Other, [INFO] [stdout] 300 | | format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] 301 | | )); [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 298 ~ return Err(Error::other( [INFO] [stdout] 299 ~ format!("Environment setup failure: {}", &e.to_string()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/main.rs:304:5 [INFO] [stdout] | [INFO] [stdout] 304 | / drop_privs(&entry).or_else(|e| { [INFO] [stdout] 305 | | return Err(Error::new( [INFO] [stdout] 306 | | ErrorKind::Other, [INFO] [stdout] 307 | | format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] 308 | | )); [INFO] [stdout] 309 | | })?; [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] help: use `map_err` instead [INFO] [stdout] | [INFO] [stdout] 304 ~ drop_privs(&entry).map_err(|e| { [INFO] [stdout] 305 ~ return Error::new( [INFO] [stdout] 306 + ErrorKind::Other, [INFO] [stdout] 307 + format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] 308 ~ ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:305:9 [INFO] [stdout] | [INFO] [stdout] 305 | / return Err(Error::new( [INFO] [stdout] 306 | | ErrorKind::Other, [INFO] [stdout] 307 | | format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] 308 | | )); [INFO] [stdout] | |__________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 305 ~ Err(Error::new( [INFO] [stdout] 306 + ErrorKind::Other, [INFO] [stdout] 307 + format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] 308 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:305:20 [INFO] [stdout] | [INFO] [stdout] 305 | return Err(Error::new( [INFO] [stdout] | ____________________^ [INFO] [stdout] 306 | | ErrorKind::Other, [INFO] [stdout] 307 | | format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] 308 | | )); [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 305 ~ return Err(Error::other( [INFO] [stdout] 306 ~ format!("Failed to drop priviliges: {}", &e.to_string()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `Result.or_else(|x| Err(y))`, which is more succinctly expressed as `map_err(|x| y)` [INFO] [stdout] --> src/main.rs:312:9 [INFO] [stdout] | [INFO] [stdout] 312 | / errnowrapper(libc::execv(to_cstring(entry.cmd), args.as_ptr())) [INFO] [stdout] 313 | | .or_else(|e| { [INFO] [stdout] 314 | | return Err(Error::new( [INFO] [stdout] 315 | | ErrorKind::Other, [INFO] [stdout] 316 | | format!("execv failed: {}", &e.to_string()), [INFO] [stdout] 317 | | )); [INFO] [stdout] 318 | | })?; [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bind_instead_of_map [INFO] [stdout] help: use `map_err` instead [INFO] [stdout] | [INFO] [stdout] 313 ~ .map_err(|e| { [INFO] [stdout] 314 ~ return Error::new( [INFO] [stdout] 315 + ErrorKind::Other, [INFO] [stdout] 316 + format!("execv failed: {}", &e.to_string()), [INFO] [stdout] 317 ~ ); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:314:17 [INFO] [stdout] | [INFO] [stdout] 314 | / return Err(Error::new( [INFO] [stdout] 315 | | ErrorKind::Other, [INFO] [stdout] 316 | | format!("execv failed: {}", &e.to_string()), [INFO] [stdout] 317 | | )); [INFO] [stdout] | |__________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 314 ~ Err(Error::new( [INFO] [stdout] 315 + ErrorKind::Other, [INFO] [stdout] 316 + format!("execv failed: {}", &e.to_string()), [INFO] [stdout] 317 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this can be `std::io::Error::other(_)` [INFO] [stdout] --> src/main.rs:314:28 [INFO] [stdout] | [INFO] [stdout] 314 | return Err(Error::new( [INFO] [stdout] | ____________________________^ [INFO] [stdout] 315 | | ErrorKind::Other, [INFO] [stdout] 316 | | format!("execv failed: {}", &e.to_string()), [INFO] [stdout] 317 | | )); [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] help: use `std::io::Error::other` [INFO] [stdout] | [INFO] [stdout] 314 ~ return Err(Error::other( [INFO] [stdout] 315 ~ format!("execv failed: {}", &e.to_string()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `entryname` after checking its variant with `is_some` [INFO] [stdout] --> src/main.rs:327:21 [INFO] [stdout] | [INFO] [stdout] 326 | if entryname.is_some() { [INFO] [stdout] | ---------------------- help: try: `if let Some() = entryname` [INFO] [stdout] 327 | let entry = entryname.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/main.rs:332:9 [INFO] [stdout] | [INFO] [stdout] 332 | / match exec(entry, &cmdargs) { [INFO] [stdout] 333 | | Err(e) => { [INFO] [stdout] 334 | | eprintln!("The following error ocurred:"); [INFO] [stdout] 335 | | eprintln!("{}", e); [INFO] [stdout] ... | [INFO] [stdout] 339 | | _ => {} [INFO] [stdout] 340 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 332 ~ if let Err(e) = exec(entry, &cmdargs) { [INFO] [stdout] 333 + eprintln!("The following error ocurred:"); [INFO] [stdout] 334 + eprintln!("{}", e); [INFO] [stdout] 335 + [INFO] [stdout] 336 + std::process::exit(1); [INFO] [stdout] 337 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.34s [INFO] running `Command { std: "docker" "inspect" "4768486652daecefaf7f3ab189340ea5730f7e772693617839ff6e42db665e02", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4768486652daecefaf7f3ab189340ea5730f7e772693617839ff6e42db665e02", kill_on_drop: false }` [INFO] [stdout] 4768486652daecefaf7f3ab189340ea5730f7e772693617839ff6e42db665e02