[INFO] cloning repository https://github.com/openeuler-mirror/utpasswd [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/openeuler-mirror/utpasswd" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fopeneuler-mirror%2Futpasswd", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fopeneuler-mirror%2Futpasswd'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] d3a700c4618eafb72bf3f3131c53d8bd9c056596 [INFO] linting openeuler-mirror/utpasswd against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fopeneuler-mirror%2Futpasswd" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'... [INFO] [stderr] done. [INFO] removed /workspace/builds/worker-4-tc1/source/rust-toolchain.toml [INFO] started tweaking git repo https://github.com/openeuler-mirror/utpasswd [INFO] finished tweaking git repo https://github.com/openeuler-mirror/utpasswd [INFO] tweaked toml for git repo https://github.com/openeuler-mirror/utpasswd written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/openeuler-mirror/utpasswd 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/openeuler-mirror/utpasswd 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 v4.5.46 [INFO] [stderr] Downloaded clap_builder v4.5.46 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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] 5c5bf2bef797471bf2aabdb4c68e16e610da6220139d1025e5b2dfd5a540cb7c [INFO] running `Command { std: "docker" "start" "-a" "5c5bf2bef797471bf2aabdb4c68e16e610da6220139d1025e5b2dfd5a540cb7c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "5c5bf2bef797471bf2aabdb4c68e16e610da6220139d1025e5b2dfd5a540cb7c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5c5bf2bef797471bf2aabdb4c68e16e610da6220139d1025e5b2dfd5a540cb7c", kill_on_drop: false }` [INFO] [stdout] 5c5bf2bef797471bf2aabdb4c68e16e610da6220139d1025e5b2dfd5a540cb7c [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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] 8d1be16cf158140dfc3e02e1e27fe28b39632254fbb848e8011b65435aba59ac [INFO] running `Command { std: "docker" "start" "-a" "8d1be16cf158140dfc3e02e1e27fe28b39632254fbb848e8011b65435aba59ac", kill_on_drop: false }` [INFO] [stderr] Compiling hashbrown v0.15.5 [INFO] [stderr] Compiling winnow v0.7.13 [INFO] [stderr] Compiling libc v0.2.175 [INFO] [stderr] Compiling utpasswd v0.1.0 (/opt/rustwide/workdir) [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Checking anstream v0.6.20 [INFO] [stderr] Checking clap_builder v4.5.46 [INFO] [stderr] Compiling indexmap v2.11.0 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Checking clap v4.5.46 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling system-deps v6.2.2 [INFO] [stderr] Compiling glib-sys v0.18.1 [INFO] [stderr] Compiling gobject-sys v0.18.0 [INFO] [stdout] warning: type `lu_prompt_fn` should have an upper camel case name [INFO] [stdout] --> src/libuser.rs:114:10 [INFO] [stdout] | [INFO] [stdout] 114 | pub type lu_prompt_fn = unsafe extern "C" fn( [INFO] [stdout] | ^^^^^^^^^^^^ help: convert the identifier to upper camel case: `LuPromptFn` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `temporary_cstring_as_ptr` has been renamed to `dangling_pointers_from_temporaries` [INFO] [stdout] --> src/libuser.rs:231:33 [INFO] [stdout] | [INFO] [stdout] 231 | #[allow(clippy::collapsible_if, temporary_cstring_as_ptr)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `dangling_pointers_from_temporaries` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(renamed_and_removed_lints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `temporary_cstring_as_ptr` has been renamed to `dangling_pointers_from_temporaries` [INFO] [stdout] --> src/libuser.rs:699:5 [INFO] [stdout] | [INFO] [stdout] 699 | temporary_cstring_as_ptr, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `dangling_pointers_from_temporaries` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `getpwnam`, `getpwuid`, and `time_t` [INFO] [stdout] --> src/passwd.rs:13:27 [INFO] [stdout] | [INFO] [stdout] 13 | use libc::{c_int, c_void, getpwnam, getpwuid, time_t}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^ ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Read` and `self` [INFO] [stdout] --> src/passwd.rs:18:15 [INFO] [stdout] | [INFO] [stdout] 18 | use std::io::{self, Read}; [INFO] [stdout] | ^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::ptr::addr_of` [INFO] [stdout] --> src/passwd.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | use std::ptr::addr_of; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `pam_conv` should have an upper camel case name [INFO] [stdout] --> src/passwd.rs:94:12 [INFO] [stdout] | [INFO] [stdout] 94 | pub struct pam_conv { [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `PamConv` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `pam_handle_t` should have an upper camel case name [INFO] [stdout] --> src/passwd.rs:106:10 [INFO] [stdout] | [INFO] [stdout] 106 | pub type pam_handle_t = pam_handle; [INFO] [stdout] | ^^^^^^^^^^^^ help: convert the identifier to upper camel case: `PamHandleT` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `temporary_cstring_as_ptr` has been renamed to `dangling_pointers_from_temporaries` [INFO] [stdout] --> src/passwd.rs:126:9 [INFO] [stdout] | [INFO] [stdout] 126 | #[allow(temporary_cstring_as_ptr)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `dangling_pointers_from_temporaries` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `temporary_cstring_as_ptr` has been renamed to `dangling_pointers_from_temporaries` [INFO] [stdout] --> src/passwd.rs:249:5 [INFO] [stdout] | [INFO] [stdout] 249 | temporary_cstring_as_ptr [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `dangling_pointers_from_temporaries` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after outer attribute [INFO] [stdout] --> src/passwd.rs:246:1 [INFO] [stdout] | [INFO] [stdout] 246 | / #[allow( [INFO] [stdout] 247 | | clippy::map_clone, [INFO] [stdout] 248 | | clippy::comparison_to_empty, [INFO] [stdout] 249 | | temporary_cstring_as_ptr [INFO] [stdout] 250 | | )] [INFO] [stdout] 251 | | [INFO] [stdout] | |_^ [INFO] [stdout] 252 | const USAGE_STR: &str = "utpasswd [-kdluefS?] [-k|--keep-tokens] [-d|--delete] [-l|--lock] [-u|--unlock] [-e|--expire] [-f|--forc... [INFO] [stdout] | --------------- the attribute applies to this constant item [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_outer_attr [INFO] [stdout] = note: `#[warn(clippy::empty_line_after_outer_attr)]` on by default [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `lu_prompt_fn` should have an upper camel case name [INFO] [stdout] --> src/libuser.rs:114:10 [INFO] [stdout] | [INFO] [stdout] 114 | pub type lu_prompt_fn = unsafe extern "C" fn( [INFO] [stdout] | ^^^^^^^^^^^^ help: convert the identifier to upper camel case: `LuPromptFn` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `temporary_cstring_as_ptr` has been renamed to `dangling_pointers_from_temporaries` [INFO] [stdout] --> src/libuser.rs:231:33 [INFO] [stdout] | [INFO] [stdout] 231 | #[allow(clippy::collapsible_if, temporary_cstring_as_ptr)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `dangling_pointers_from_temporaries` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(renamed_and_removed_lints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `temporary_cstring_as_ptr` has been renamed to `dangling_pointers_from_temporaries` [INFO] [stdout] --> src/libuser.rs:699:5 [INFO] [stdout] | [INFO] [stdout] 699 | temporary_cstring_as_ptr, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `dangling_pointers_from_temporaries` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `temporary_cstring_as_ptr` has been renamed to `dangling_pointers_from_temporaries` [INFO] [stdout] --> src/libuser.rs:804:9 [INFO] [stdout] | [INFO] [stdout] 804 | temporary_cstring_as_ptr, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `dangling_pointers_from_temporaries` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: duplicated attribute [INFO] [stdout] --> src/libuser.rs:805:9 [INFO] [stdout] | [INFO] [stdout] 805 | clippy::unnecessary_cast [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] note: first defined here [INFO] [stdout] --> src/libuser.rs:802:9 [INFO] [stdout] | [INFO] [stdout] 802 | clippy::unnecessary_cast, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] help: remove this attribute [INFO] [stdout] --> src/libuser.rs:805:9 [INFO] [stdout] | [INFO] [stdout] 805 | clippy::unnecessary_cast [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#duplicated_attributes [INFO] [stdout] = note: `#[warn(clippy::duplicated_attributes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `getpwnam`, `getpwuid`, and `time_t` [INFO] [stdout] --> src/passwd.rs:13:27 [INFO] [stdout] | [INFO] [stdout] 13 | use libc::{c_int, c_void, getpwnam, getpwuid, time_t}; [INFO] [stdout] | ^^^^^^^^ ^^^^^^^^ ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Read` and `self` [INFO] [stdout] --> src/passwd.rs:18:15 [INFO] [stdout] | [INFO] [stdout] 18 | use std::io::{self, Read}; [INFO] [stdout] | ^^^^ ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::ptr::addr_of` [INFO] [stdout] --> src/passwd.rs:23:5 [INFO] [stdout] | [INFO] [stdout] 23 | use std::ptr::addr_of; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `pam_conv` should have an upper camel case name [INFO] [stdout] --> src/passwd.rs:94:12 [INFO] [stdout] | [INFO] [stdout] 94 | pub struct pam_conv { [INFO] [stdout] | ^^^^^^^^ help: convert the identifier to upper camel case: `PamConv` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type `pam_handle_t` should have an upper camel case name [INFO] [stdout] --> src/passwd.rs:106:10 [INFO] [stdout] | [INFO] [stdout] 106 | pub type pam_handle_t = pam_handle; [INFO] [stdout] | ^^^^^^^^^^^^ help: convert the identifier to upper camel case: `PamHandleT` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `temporary_cstring_as_ptr` has been renamed to `dangling_pointers_from_temporaries` [INFO] [stdout] --> src/passwd.rs:126:9 [INFO] [stdout] | [INFO] [stdout] 126 | #[allow(temporary_cstring_as_ptr)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `dangling_pointers_from_temporaries` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lint `temporary_cstring_as_ptr` has been renamed to `dangling_pointers_from_temporaries` [INFO] [stdout] --> src/passwd.rs:249:5 [INFO] [stdout] | [INFO] [stdout] 249 | temporary_cstring_as_ptr [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `dangling_pointers_from_temporaries` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: empty line after outer attribute [INFO] [stdout] --> src/passwd.rs:246:1 [INFO] [stdout] | [INFO] [stdout] 246 | / #[allow( [INFO] [stdout] 247 | | clippy::map_clone, [INFO] [stdout] 248 | | clippy::comparison_to_empty, [INFO] [stdout] 249 | | temporary_cstring_as_ptr [INFO] [stdout] 250 | | )] [INFO] [stdout] 251 | | [INFO] [stdout] | |_^ [INFO] [stdout] 252 | const USAGE_STR: &str = "utpasswd [-kdluefS?] [-k|--keep-tokens] [-d|--delete] [-l|--lock] [-u|--unlock] [-e|--expire] [-f|--forc... [INFO] [stdout] | --------------- the attribute applies to this constant item [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_line_after_outer_attr [INFO] [stdout] = note: `#[warn(clippy::empty_line_after_outer_attr)]` on by default [INFO] [stdout] = help: if the empty line is unintentional, remove it [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `libc::passwd` [INFO] [stdout] --> src/passwd.rs:598:9 [INFO] [stdout] | [INFO] [stdout] 598 | use libc::passwd; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `libc::EACCES` [INFO] [stdout] --> src/passwd.rs:599:9 [INFO] [stdout] | [INFO] [stdout] 599 | use libc::EACCES; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `error_str` [INFO] [stdout] --> src/libuser.rs:155:13 [INFO] [stdout] | [INFO] [stdout] 155 | let error_str = unsafe { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_error_str` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `progname_name` [INFO] [stdout] --> src/libuser.rs:167:17 [INFO] [stdout] | [INFO] [stdout] 167 | let progname_name = get_progname_value().unwrap_or_else(|| "utpasswd".to_string()); [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_progname_name` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:234:9 [INFO] [stdout] | [INFO] [stdout] 234 | let mut ent: *mut lu_ent; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:280:9 [INFO] [stdout] | [INFO] [stdout] 280 | let mut ent: *mut lu_ent; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:359:9 [INFO] [stdout] | [INFO] [stdout] 359 | let mut ent: *mut lu_ent; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:481:5 [INFO] [stdout] | [INFO] [stdout] 481 | unsafe { [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:517:25 [INFO] [stdout] | [INFO] [stdout] 517 | sp_lstchg = unsafe { ent_value_int64(ent, lu_shadow_last_change.as_ptr()) }; [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:519:22 [INFO] [stdout] | [INFO] [stdout] 519 | sp_min = unsafe { ent_value_int64(ent, lu_shadow_min.as_ptr()) }; [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:521:22 [INFO] [stdout] | [INFO] [stdout] 521 | sp_max = unsafe { ent_value_int64(ent, lu_shadow_max.as_ptr()) }; [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:523:23 [INFO] [stdout] | [INFO] [stdout] 523 | sp_warn = unsafe { ent_value_int64(ent, lu_shadow_warning.as_ptr()) }; [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:525:24 [INFO] [stdout] | [INFO] [stdout] 525 | sp_inact = unsafe { ent_value_int64(ent, lu_shadow_inactive.as_ptr()) }; [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:498:13 [INFO] [stdout] | [INFO] [stdout] 498 | let mut lu_username_tmp = CString::new(LU_USERNAME).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:506:13 [INFO] [stdout] | [INFO] [stdout] 506 | let mut lu_shadow_passwd = CString::new(LU_SHADOWPASSWORD).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:509:13 [INFO] [stdout] | [INFO] [stdout] 509 | let mut lu_user_passwd = CString::new(LU_USERPASSWORD).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:516:17 [INFO] [stdout] | [INFO] [stdout] 516 | let mut lu_shadow_last_change = CString::new(LU_SHADOWLASTCHANGE).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:518:17 [INFO] [stdout] | [INFO] [stdout] 518 | let mut lu_shadow_min = CString::new(LU_SHADOWMIN).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:520:17 [INFO] [stdout] | [INFO] [stdout] 520 | let mut lu_shadow_max = CString::new(LU_SHADOWMAX).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:522:17 [INFO] [stdout] | [INFO] [stdout] 522 | let mut lu_shadow_warning = CString::new(LU_SHADOWWARNING).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:524:17 [INFO] [stdout] | [INFO] [stdout] 524 | let mut lu_shadow_inactive = CString::new(LU_SHADOWINACTIVE).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:606:25 [INFO] [stdout] | [INFO] [stdout] 606 | let mut time_format = CString::new("%Y-%m-%d").unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `str` [INFO] [stdout] --> src/libuser.rs:548:24 [INFO] [stdout] | [INFO] [stdout] 548 | Ok(str) => { /* do nothing */ } [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `strr` [INFO] [stdout] --> src/libuser.rs:586:20 [INFO] [stdout] | [INFO] [stdout] 586 | Ok(strr) => { /*空操作*/ } [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_strr` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_str` [INFO] [stdout] --> src/libuser.rs:622:21 [INFO] [stdout] | [INFO] [stdout] 622 | let date_str = unsafe { CStr::from_ptr(date.as_ptr()) }.to_str().unwrap(); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `ent` is never read [INFO] [stdout] --> src/libuser.rs:461:32 [INFO] [stdout] | [INFO] [stdout] 461 | let mut ent: *mut lu_ent = ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `current` is never read [INFO] [stdout] --> src/libuser.rs:463:36 [INFO] [stdout] | [INFO] [stdout] 463 | let mut current: *mut c_char = ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `current_user` is never read [INFO] [stdout] --> src/libuser.rs:464:41 [INFO] [stdout] | [INFO] [stdout] 464 | let mut current_user: *mut c_char = ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `realname` is never read [INFO] [stdout] --> src/libuser.rs:465:37 [INFO] [stdout] | [INFO] [stdout] 465 | let mut realname: *mut c_char = ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `status_cts` is never read [INFO] [stdout] --> src/libuser.rs:476:26 [INFO] [stdout] | [INFO] [stdout] 476 | let mut status_cts = CString::new("").unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `msg_cts` is never read [INFO] [stdout] --> src/libuser.rs:477:23 [INFO] [stdout] | [INFO] [stdout] 477 | let mut msg_cts = CString::new("").unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `status` is never read [INFO] [stdout] --> src/libuser.rs:478:37 [INFO] [stdout] | [INFO] [stdout] 478 | let mut status: *const c_char = ptr::null(); [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `msg` is never read [INFO] [stdout] --> src/libuser.rs:479:34 [INFO] [stdout] | [INFO] [stdout] 479 | let mut msg: *const c_char = ptr::null(); [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:653:9 [INFO] [stdout] | [INFO] [stdout] 653 | let mut ent: *mut lu_ent = ptr::null_mut(); [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `ent` is never read [INFO] [stdout] --> src/libuser.rs:711:32 [INFO] [stdout] | [INFO] [stdout] 711 | let mut ent: *mut lu_ent = ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `num_msg` [INFO] [stdout] --> src/passwd.rs:68:5 [INFO] [stdout] | [INFO] [stdout] 68 | num_msg: c_int, [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_num_msg` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `msg` [INFO] [stdout] --> src/passwd.rs:69:5 [INFO] [stdout] | [INFO] [stdout] 69 | msg: *const *const pam_message, [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_msg` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `resp` [INFO] [stdout] --> src/passwd.rs:70:5 [INFO] [stdout] | [INFO] [stdout] 70 | resp: *mut *mut pam_response, [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_resp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `appdata_ptr` [INFO] [stdout] --> src/passwd.rs:71:5 [INFO] [stdout] | [INFO] [stdout] 71 | appdata_ptr: *mut c_void, [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_appdata_ptr` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `matches` [INFO] [stdout] --> src/passwd.rs:417:9 [INFO] [stdout] | [INFO] [stdout] 417 | let matches = Command::new("passwd") [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/passwd.rs:552:9 [INFO] [stdout] | [INFO] [stdout] 552 | let mut retval: libc::c_int = 0; // Equivalent to int retval; [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/passwd.rs:561:9 [INFO] [stdout] | [INFO] [stdout] 561 | let mut pwd: *mut passwd = std::ptr::null_mut(); [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/passwd.rs:564:9 [INFO] [stdout] | [INFO] [stdout] 564 | let mut tty_name: *mut c_char = std::ptr::null_mut(); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/passwd.rs:565:9 [INFO] [stdout] | [INFO] [stdout] 565 | let mut ttyn: *mut c_char = std::ptr::null_mut(); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `retval` [INFO] [stdout] --> src/passwd.rs:552:9 [INFO] [stdout] | [INFO] [stdout] 552 | let mut retval: libc::c_int = 0; // Equivalent to int retval; [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_retval` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `pwd` [INFO] [stdout] --> src/passwd.rs:561:9 [INFO] [stdout] | [INFO] [stdout] 561 | let mut pwd: *mut passwd = std::ptr::null_mut(); [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pwd` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `tty_name` [INFO] [stdout] --> src/passwd.rs:564:9 [INFO] [stdout] | [INFO] [stdout] 564 | let mut tty_name: *mut c_char = std::ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tty_name` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ttyn` [INFO] [stdout] --> src/passwd.rs:565:9 [INFO] [stdout] | [INFO] [stdout] 565 | let mut ttyn: *mut c_char = std::ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ttyn` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static `conv` is never used [INFO] [stdout] --> src/passwd.rs:58:12 [INFO] [stdout] | [INFO] [stdout] 58 | static mut conv: pam_conv = pam_conv { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static `pamh` is never used [INFO] [stdout] --> src/passwd.rs:65:12 [INFO] [stdout] | [INFO] [stdout] 65 | static mut pamh: *mut pam_handle_t = std::ptr::null_mut(); [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `default_conv` is never used [INFO] [stdout] --> src/passwd.rs:67:15 [INFO] [stdout] | [INFO] [stdout] 67 | extern "C" fn default_conv( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `free_cstring` is never used [INFO] [stdout] --> src/passwd.rs:182:4 [INFO] [stdout] | [INFO] [stdout] 182 | fn free_cstring(ptr: *mut c_char) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `convert_to_c_char` is never used [INFO] [stdout] --> src/passwd.rs:190:4 [INFO] [stdout] | [INFO] [stdout] 190 | fn convert_to_c_char(opt_str: Option<&String>) -> *const libc::c_char { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `option_to_c_char_safe` is never used [INFO] [stdout] --> src/passwd.rs:227:4 [INFO] [stdout] | [INFO] [stdout] 227 | fn option_to_c_char_safe(opt: Option) -> Result<*const c_char, NulError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `USAGE_STR` is never used [INFO] [stdout] --> src/passwd.rs:252:7 [INFO] [stdout] | [INFO] [stdout] 252 | const USAGE_STR: &str = "utpasswd [-kdluefS?] [-k|--keep-tokens] [-d|--delete] [-l|--lock] [-u|--unlock] [-e|--expire] [-f|--force]... [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `build_command` is never used [INFO] [stdout] --> src/passwd.rs:255:4 [INFO] [stdout] | [INFO] [stdout] 255 | fn build_command() -> Command { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `print_c_char_ptr` is never used [INFO] [stdout] --> src/passwd.rs:530:4 [INFO] [stdout] | [INFO] [stdout] 530 | fn print_c_char_ptr(ptr: *mut c_char) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_USERNAME` is never used [INFO] [stdout] --> src/libuser.rs:19:11 [INFO] [stdout] | [INFO] [stdout] 19 | pub const LU_USERNAME: &str = "pw_name"; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_USERPASSWORD` is never used [INFO] [stdout] --> src/libuser.rs:20:11 [INFO] [stdout] | [INFO] [stdout] 20 | pub const LU_USERPASSWORD: &str = "pw_passwd"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_UIDNUMBER` is never used [INFO] [stdout] --> src/libuser.rs:21:11 [INFO] [stdout] | [INFO] [stdout] 21 | pub const LU_UIDNUMBER: &str = "pw_uid"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_GIDNUMBER` is never used [INFO] [stdout] --> src/libuser.rs:22:11 [INFO] [stdout] | [INFO] [stdout] 22 | pub const LU_GIDNUMBER: &str = "pw_gid"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_GECOS` is never used [INFO] [stdout] --> src/libuser.rs:23:11 [INFO] [stdout] | [INFO] [stdout] 23 | pub const LU_GECOS: &str = "pw_gecos"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_HOMEDIRECTORY` is never used [INFO] [stdout] --> src/libuser.rs:24:11 [INFO] [stdout] | [INFO] [stdout] 24 | pub const LU_HOMEDIRECTORY: &str = "pw_dir"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_LOGINSHELL` is never used [INFO] [stdout] --> src/libuser.rs:25:11 [INFO] [stdout] | [INFO] [stdout] 25 | pub const LU_LOGINSHELL: &str = "pw_shell"; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_GROUPNAME` is never used [INFO] [stdout] --> src/libuser.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub const LU_GROUPNAME: &str = "gr_name"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_GROUPPASSWORD` is never used [INFO] [stdout] --> src/libuser.rs:29:11 [INFO] [stdout] | [INFO] [stdout] 29 | pub const LU_GROUPPASSWORD: &str = "gr_passwd"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_MEMBERNAME` is never used [INFO] [stdout] --> src/libuser.rs:30:11 [INFO] [stdout] | [INFO] [stdout] 30 | pub const LU_MEMBERNAME: &str = "gr_mem"; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_ADMINISTRATORNAME` is never used [INFO] [stdout] --> src/libuser.rs:31:11 [INFO] [stdout] | [INFO] [stdout] 31 | pub const LU_ADMINISTRATORNAME: &str = "gr_adm"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWNAME` is never used [INFO] [stdout] --> src/libuser.rs:34:11 [INFO] [stdout] | [INFO] [stdout] 34 | pub const LU_SHADOWNAME: &str = LU_USERNAME; // Note: LU_SHADOWNAME is not distinct from LU_USERNAME. [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWPASSWORD` is never used [INFO] [stdout] --> src/libuser.rs:35:11 [INFO] [stdout] | [INFO] [stdout] 35 | pub const LU_SHADOWPASSWORD: &str = "sp_pwdp"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWLASTCHANGE` is never used [INFO] [stdout] --> src/libuser.rs:36:11 [INFO] [stdout] | [INFO] [stdout] 36 | pub const LU_SHADOWLASTCHANGE: &str = "sp_lstchg"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWMIN` is never used [INFO] [stdout] --> src/libuser.rs:37:11 [INFO] [stdout] | [INFO] [stdout] 37 | pub const LU_SHADOWMIN: &str = "sp_min"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWMAX` is never used [INFO] [stdout] --> src/libuser.rs:38:11 [INFO] [stdout] | [INFO] [stdout] 38 | pub const LU_SHADOWMAX: &str = "sp_max"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWWARNING` is never used [INFO] [stdout] --> src/libuser.rs:39:11 [INFO] [stdout] | [INFO] [stdout] 39 | pub const LU_SHADOWWARNING: &str = "sp_warn"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWINACTIVE` is never used [INFO] [stdout] --> src/libuser.rs:40:11 [INFO] [stdout] | [INFO] [stdout] 40 | pub const LU_SHADOWINACTIVE: &str = "sp_inact"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWEXPIRE` is never used [INFO] [stdout] --> src/libuser.rs:41:11 [INFO] [stdout] | [INFO] [stdout] 41 | pub const LU_SHADOWEXPIRE: &str = "sp_expire"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWFLAG` is never used [INFO] [stdout] --> src/libuser.rs:42:11 [INFO] [stdout] | [INFO] [stdout] 42 | pub const LU_SHADOWFLAG: &str = "sp_flag"; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_COMMONNAME` is never used [INFO] [stdout] --> src/libuser.rs:45:11 [INFO] [stdout] | [INFO] [stdout] 45 | pub const LU_COMMONNAME: &str = "cn"; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_GIVENNAME` is never used [INFO] [stdout] --> src/libuser.rs:46:11 [INFO] [stdout] | [INFO] [stdout] 46 | pub const LU_GIVENNAME: &str = "givenName"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SN` is never used [INFO] [stdout] --> src/libuser.rs:47:11 [INFO] [stdout] | [INFO] [stdout] 47 | pub const LU_SN: &str = "sn"; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_ROOMNUMBER` is never used [INFO] [stdout] --> src/libuser.rs:48:11 [INFO] [stdout] | [INFO] [stdout] 48 | pub const LU_ROOMNUMBER: &str = "roomNumber"; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_TELEPHONENUMBER` is never used [INFO] [stdout] --> src/libuser.rs:49:11 [INFO] [stdout] | [INFO] [stdout] 49 | pub const LU_TELEPHONENUMBER: &str = "telephoneNumber"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_HOMEPHONE` is never used [INFO] [stdout] --> src/libuser.rs:50:11 [INFO] [stdout] | [INFO] [stdout] 50 | pub const LU_HOMEPHONE: &str = "homePhone"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_EMAIL` is never used [INFO] [stdout] --> src/libuser.rs:51:11 [INFO] [stdout] | [INFO] [stdout] 51 | pub const LU_EMAIL: &str = "mail"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `lu_prompt_fn` is never used [INFO] [stdout] --> src/libuser.rs:114:10 [INFO] [stdout] | [INFO] [stdout] 114 | pub type lu_prompt_fn = unsafe extern "C" fn( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `strncmp` is never used [INFO] [stdout] --> src/libuser.rs:121:8 [INFO] [stdout] | [INFO] [stdout] 121 | pub fn strncmp(s1: &str, s2: &str, n: usize) -> i32 { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `option_to_ptr` is never used [INFO] [stdout] --> src/libuser.rs:137:8 [INFO] [stdout] | [INFO] [stdout] 137 | pub fn option_to_ptr(context: Option) -> *mut lu_context { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `convert_lu_error_ptr` is never used [INFO] [stdout] --> src/libuser.rs:144:4 [INFO] [stdout] | [INFO] [stdout] 144 | fn convert_lu_error_ptr(error_ptr: *mut lu_error) -> Option<*mut lu_error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `check_error` is never used [INFO] [stdout] --> src/libuser.rs:152:8 [INFO] [stdout] | [INFO] [stdout] 152 | pub fn check_error(x: Option<*mut lu_error>) -> Result<(), i32> { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `shutdown_libuser` is never used [INFO] [stdout] --> src/libuser.rs:174:8 [INFO] [stdout] | [INFO] [stdout] 174 | pub fn shutdown_libuser() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `startup_libuser` is never used [INFO] [stdout] --> src/libuser.rs:190:8 [INFO] [stdout] | [INFO] [stdout] 190 | pub fn startup_libuser(user: *const c_char) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_lock_password` is never used [INFO] [stdout] --> src/libuser.rs:232:8 [INFO] [stdout] | [INFO] [stdout] 232 | pub fn pwdb_lock_password(username_c: *const c_char) -> c_int { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_unlock_password` is never used [INFO] [stdout] --> src/libuser.rs:278:8 [INFO] [stdout] | [INFO] [stdout] 278 | pub fn pwdb_unlock_password(username_c: *const c_char, force: c_int) -> c_int { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_clear_password` is never used [INFO] [stdout] --> src/libuser.rs:357:8 [INFO] [stdout] | [INFO] [stdout] 357 | pub fn pwdb_clear_password(username_c: *const c_char) -> c_int { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `ent_value_int64` is never used [INFO] [stdout] --> src/libuser.rs:428:8 [INFO] [stdout] | [INFO] [stdout] 428 | pub fn ent_value_int64(ent: *mut lu_ent, attribute: *const c_char) -> libc::c_longlong { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_display_status` is never used [INFO] [stdout] --> src/libuser.rs:459:8 [INFO] [stdout] | [INFO] [stdout] 459 | pub fn pwdb_display_status(username_c: *const c_char) -> libc::c_int { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_update_gecos` is never used [INFO] [stdout] --> src/libuser.rs:651:8 [INFO] [stdout] | [INFO] [stdout] 651 | pub fn pwdb_update_gecos(username_c: *const libc::c_char, gecos: *const c_char) -> i32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_update_aging` is never used [INFO] [stdout] --> src/libuser.rs:702:8 [INFO] [stdout] | [INFO] [stdout] 702 | pub fn pwdb_update_aging( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_strerror` is never used [INFO] [stdout] --> src/libuser.rs:55:8 [INFO] [stdout] | [INFO] [stdout] 55 | fn lu_strerror(error: *mut lu_error) -> *const c_char; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_error_free` is never used [INFO] [stdout] --> src/libuser.rs:58:8 [INFO] [stdout] | [INFO] [stdout] 58 | fn lu_error_free(error: *mut *mut lu_error); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_end` is never used [INFO] [stdout] --> src/libuser.rs:60:8 [INFO] [stdout] | [INFO] [stdout] 60 | fn lu_end(context: *mut lu_context); [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_set_long` is never used [INFO] [stdout] --> src/libuser.rs:61:8 [INFO] [stdout] | [INFO] [stdout] 61 | fn lu_ent_set_long(ent: *mut lu_ent, attr: *const libc::c_char, value: libc::c_long); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_start` is never used [INFO] [stdout] --> src/libuser.rs:62:8 [INFO] [stdout] | [INFO] [stdout] 62 | fn lu_start( [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_get` is never used [INFO] [stdout] --> src/libuser.rs:71:8 [INFO] [stdout] | [INFO] [stdout] 71 | fn lu_ent_get(ent: *mut lu_ent, attribute: *const libc::c_char) -> *mut GValueArray; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_get_first_value_strdup` is never used [INFO] [stdout] --> src/libuser.rs:72:8 [INFO] [stdout] | [INFO] [stdout] 72 | fn lu_ent_get_first_value_strdup( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_prompt_console` is never used [INFO] [stdout] --> src/libuser.rs:76:8 [INFO] [stdout] | [INFO] [stdout] 76 | fn lu_prompt_console( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_user_modify` is never used [INFO] [stdout] --> src/libuser.rs:82:8 [INFO] [stdout] | [INFO] [stdout] 82 | fn lu_user_modify( [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_new` is never used [INFO] [stdout] --> src/libuser.rs:87:8 [INFO] [stdout] | [INFO] [stdout] 87 | fn lu_ent_new() -> *mut lu_ent; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_free` is never used [INFO] [stdout] --> src/libuser.rs:88:8 [INFO] [stdout] | [INFO] [stdout] 88 | fn lu_ent_free(ent: *mut lu_ent); [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_set_string` is never used [INFO] [stdout] --> src/libuser.rs:89:8 [INFO] [stdout] | [INFO] [stdout] 89 | fn lu_ent_set_string(ent: *mut lu_ent, attr: *const libc::c_char, value: *const libc::c_char); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_user_lock` is never used [INFO] [stdout] --> src/libuser.rs:90:8 [INFO] [stdout] | [INFO] [stdout] 90 | fn lu_user_lock( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_user_lookup_name` is never used [INFO] [stdout] --> src/libuser.rs:95:8 [INFO] [stdout] | [INFO] [stdout] 95 | fn lu_user_lookup_name( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_user_unlock` is never used [INFO] [stdout] --> src/libuser.rs:101:8 [INFO] [stdout] | [INFO] [stdout] 101 | fn lu_user_unlock( [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_user_removepass` is never used [INFO] [stdout] --> src/libuser.rs:106:8 [INFO] [stdout] | [INFO] [stdout] 106 | fn lu_user_removepass( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ENABLE_NLS` is never used [INFO] [stdout] --> src/utconfig.rs:12:15 [INFO] [stdout] | [INFO] [stdout] 12 | pub const ENABLE_NLS: bool = true; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_ALLOCA` is never used [INFO] [stdout] --> src/utconfig.rs:15:15 [INFO] [stdout] | [INFO] [stdout] 15 | pub const HAVE_ALLOCA: bool = true; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_ALLOCA_H` is never used [INFO] [stdout] --> src/utconfig.rs:18:15 [INFO] [stdout] | [INFO] [stdout] 18 | pub const HAVE_ALLOCA_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_DCGETTEXT` is never used [INFO] [stdout] --> src/utconfig.rs:21:15 [INFO] [stdout] | [INFO] [stdout] 21 | pub const HAVE_DCGETTEXT: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_GETTEXT` is never used [INFO] [stdout] --> src/utconfig.rs:24:15 [INFO] [stdout] | [INFO] [stdout] 24 | pub const HAVE_GETTEXT: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_INTTYPES_H` is never used [INFO] [stdout] --> src/utconfig.rs:30:15 [INFO] [stdout] | [INFO] [stdout] 30 | pub const HAVE_INTTYPES_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_MEMORY_H` is never used [INFO] [stdout] --> src/utconfig.rs:33:15 [INFO] [stdout] | [INFO] [stdout] 33 | pub const HAVE_MEMORY_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_STDINT_H` is never used [INFO] [stdout] --> src/utconfig.rs:36:15 [INFO] [stdout] | [INFO] [stdout] 36 | pub const HAVE_STDINT_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_STDLIB_H` is never used [INFO] [stdout] --> src/utconfig.rs:39:15 [INFO] [stdout] | [INFO] [stdout] 39 | pub const HAVE_STDLIB_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_STRINGS_H` is never used [INFO] [stdout] --> src/utconfig.rs:42:15 [INFO] [stdout] | [INFO] [stdout] 42 | pub const HAVE_STRINGS_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_STRING_H` is never used [INFO] [stdout] --> src/utconfig.rs:45:15 [INFO] [stdout] | [INFO] [stdout] 45 | pub const HAVE_STRING_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_SYS_STAT_H` is never used [INFO] [stdout] --> src/utconfig.rs:48:15 [INFO] [stdout] | [INFO] [stdout] 48 | pub const HAVE_SYS_STAT_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_SYS_TYPES_H` is never used [INFO] [stdout] --> src/utconfig.rs:51:15 [INFO] [stdout] | [INFO] [stdout] 51 | pub const HAVE_SYS_TYPES_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_UNISTD_H` is never used [INFO] [stdout] --> src/utconfig.rs:54:15 [INFO] [stdout] | [INFO] [stdout] 54 | pub const HAVE_UNISTD_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_BUGREPORT` is never used [INFO] [stdout] --> src/utconfig.rs:57:15 [INFO] [stdout] | [INFO] [stdout] 57 | pub const PACKAGE_BUGREPORT: &str = ""; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_NAME` is never used [INFO] [stdout] --> src/utconfig.rs:58:15 [INFO] [stdout] | [INFO] [stdout] 58 | pub const PACKAGE_NAME: &str = "passwd"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_STRING` is never used [INFO] [stdout] --> src/utconfig.rs:59:15 [INFO] [stdout] | [INFO] [stdout] 59 | pub const PACKAGE_STRING: &str = "passwd 0.80"; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_TARNAME` is never used [INFO] [stdout] --> src/utconfig.rs:60:15 [INFO] [stdout] | [INFO] [stdout] 60 | pub const PACKAGE_TARNAME: &str = "passwd"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_URL` is never used [INFO] [stdout] --> src/utconfig.rs:61:15 [INFO] [stdout] | [INFO] [stdout] 61 | pub const PACKAGE_URL: &str = ""; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_VERSION` is never used [INFO] [stdout] --> src/utconfig.rs:62:15 [INFO] [stdout] | [INFO] [stdout] 62 | pub const PACKAGE_VERSION: &str = "0.80"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `STDC_HEADERS` is never used [INFO] [stdout] --> src/utconfig.rs:68:15 [INFO] [stdout] | [INFO] [stdout] 68 | pub const STDC_HEADERS: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `WITH_AUDIT` is never used [INFO] [stdout] --> src/utconfig.rs:92:15 [INFO] [stdout] | [INFO] [stdout] 92 | pub const WITH_AUDIT: bool = true; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `WITH_SELINUX` is never used [INFO] [stdout] --> src/utconfig.rs:95:15 [INFO] [stdout] | [INFO] [stdout] 95 | pub const WITH_SELINUX: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `eprintln!` args [INFO] [stdout] --> src/libuser.rs:319:54 [INFO] [stdout] | [INFO] [stdout] 319 | get_progname_value().unwrap().to_string(), [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/libuser.rs:320:25 [INFO] [stdout] | [INFO] [stdout] 320 | "Warning: unlocked password would be empty." [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] = note: `#[warn(clippy::print_literal)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 318 ~ "{}: Warning: unlocked password would be empty.", [INFO] [stdout] 319 ~ get_progname_value().unwrap().to_string() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/libuser.rs:325:13 [INFO] [stdout] | [INFO] [stdout] 325 | / if retval != -2 { [INFO] [stdout] 326 | | if lu_user_unlock( [INFO] [stdout] 327 | | &mut get_libuser().unwrap() as *mut lu_context, [INFO] [stdout] 328 | | ent, [INFO] [stdout] ... | [INFO] [stdout] 334 | | } [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] 325 ~ if retval != -2 [INFO] [stdout] 326 ~ && lu_user_unlock( [INFO] [stdout] 327 | &mut get_libuser().unwrap() as *mut lu_context, [INFO] [stdout] ... [INFO] [stdout] 332 | retval = 0; [INFO] [stdout] 333 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `CStr::from_ptr(current).to_bytes().get(0)` [INFO] [stdout] --> src/libuser.rs:390:21 [INFO] [stdout] | [INFO] [stdout] 390 | && *CStr::from_ptr(current).to_bytes().get(0).unwrap_or(&0) == b'!' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `CStr::from_ptr(current).to_bytes().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: `to_string` applied to a type that implements `Display` in `eprintln!` args [INFO] [stdout] --> src/libuser.rs:394:50 [INFO] [stdout] | [INFO] [stdout] 394 | get_progname_value().unwrap().to_string(), [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/libuser.rs:395:21 [INFO] [stdout] | [INFO] [stdout] 395 | "Note: deleting a password also unlocks the password" [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 393 ~ "{}: Note: deleting a password also unlocks the password", [INFO] [stdout] 394 ~ get_progname_value().unwrap().to_string() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/libuser.rs:535:16 [INFO] [stdout] | [INFO] [stdout] 535 | if current_str.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `current_str.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: casting raw pointers to the same type and constness is unnecessary (`*mut common::lu_ent` -> `*mut common::lu_ent`) [INFO] [stdout] --> src/libuser.rs:667:13 [INFO] [stdout] | [INFO] [stdout] 667 | ent as *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `ent` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting raw pointers to the same type and constness is unnecessary (`*mut common::lu_ent` -> `*mut common::lu_ent`) [INFO] [stdout] --> src/libuser.rs:673:17 [INFO] [stdout] | [INFO] [stdout] 673 | ent as *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `ent` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting raw pointers to the same type and constness is unnecessary (`*mut common::lu_ent` -> `*mut common::lu_ent`) [INFO] [stdout] --> src/libuser.rs:682:17 [INFO] [stdout] | [INFO] [stdout] 682 | ent as *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `ent` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `0 as *const _` detected [INFO] [stdout] --> src/passwd.rs:60:18 [INFO] [stdout] | [INFO] [stdout] 60 | appdata_ptr: 0 as *const c_void as *mut c_void, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `std::ptr::null::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_ptr [INFO] [stdout] = note: `#[warn(clippy::zero_ptr)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/passwd.rs:145:13 [INFO] [stdout] | [INFO] [stdout] 145 | / match CStr::from_ptr(appdata_ptr as *const libc::c_char).to_str() { [INFO] [stdout] 146 | | Ok(s) => s, [INFO] [stdout] 147 | | Err(_) => "", [INFO] [stdout] 148 | | } [INFO] [stdout] | |_____________^ help: replace it with: `CStr::from_ptr(appdata_ptr as *const libc::c_char).to_str().unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/passwd.rs:405:29 [INFO] [stdout] | [INFO] [stdout] 405 | if !is_known && !arg.parse::().is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `arg.parse::().is_err()` [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: match expression looks like `matches!` macro [INFO] [stdout] --> src/passwd.rs:350:31 [INFO] [stdout] | [INFO] [stdout] 350 | let is_value_option = match arg.as_str() { [INFO] [stdout] | _______________________________^ [INFO] [stdout] 351 | | "-w" | "--warning" | "-x" | "--maximum" | "-n" | "--minimum" | "-i" | "--inactive" => { [INFO] [stdout] 352 | | true [INFO] [stdout] ... | [INFO] [stdout] 355 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 350 - let is_value_option = match arg.as_str() { [INFO] [stdout] 351 - "-w" | "--warning" | "-x" | "--maximum" | "-n" | "--minimum" | "-i" | "--inactive" => { [INFO] [stdout] 352 - true [INFO] [stdout] 353 - } [INFO] [stdout] 354 - _ => false, [INFO] [stdout] 355 - }; [INFO] [stdout] 350 + let is_value_option = matches!(arg.as_str(), "-w" | "--warning" | "-x" | "--maximum" | "-n" | "--minimum" | "-i" | "--inactive"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/passwd.rs:371:20 [INFO] [stdout] | [INFO] [stdout] 371 | if let Ok(_) = next_arg.parse::() { [INFO] [stdout] | -------^^^^^-------------------------- help: try: `if next_arg.parse::().is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `error_str` [INFO] [stdout] --> src/libuser.rs:155:13 [INFO] [stdout] | [INFO] [stdout] 155 | let error_str = unsafe { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_error_str` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `progname_name` [INFO] [stdout] --> src/libuser.rs:167:17 [INFO] [stdout] | [INFO] [stdout] 167 | let progname_name = get_progname_value().unwrap_or_else(|| "utpasswd".to_string()); [INFO] [stdout] | ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_progname_name` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:234:9 [INFO] [stdout] | [INFO] [stdout] 234 | let mut ent: *mut lu_ent; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:280:9 [INFO] [stdout] | [INFO] [stdout] 280 | let mut ent: *mut lu_ent; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:359:9 [INFO] [stdout] | [INFO] [stdout] 359 | let mut ent: *mut lu_ent; [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:481:5 [INFO] [stdout] | [INFO] [stdout] 481 | unsafe { [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:517:25 [INFO] [stdout] | [INFO] [stdout] 517 | sp_lstchg = unsafe { ent_value_int64(ent, lu_shadow_last_change.as_ptr()) }; [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:519:22 [INFO] [stdout] | [INFO] [stdout] 519 | sp_min = unsafe { ent_value_int64(ent, lu_shadow_min.as_ptr()) }; [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:521:22 [INFO] [stdout] | [INFO] [stdout] 521 | sp_max = unsafe { ent_value_int64(ent, lu_shadow_max.as_ptr()) }; [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:523:23 [INFO] [stdout] | [INFO] [stdout] 523 | sp_warn = unsafe { ent_value_int64(ent, lu_shadow_warning.as_ptr()) }; [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `unsafe` block [INFO] [stdout] --> src/libuser.rs:525:24 [INFO] [stdout] | [INFO] [stdout] 525 | sp_inact = unsafe { ent_value_int64(ent, lu_shadow_inactive.as_ptr()) }; [INFO] [stdout] | ^^^^^^ unnecessary `unsafe` block [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static variable `conv` should have an upper case name [INFO] [stdout] --> src/passwd.rs:58:12 [INFO] [stdout] | [INFO] [stdout] 58 | static mut conv: pam_conv = pam_conv { [INFO] [stdout] | ^^^^ help: convert the identifier to upper case: `CONV` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_upper_case_globals)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static variable `audit_fd` should have an upper case name [INFO] [stdout] --> src/passwd.rs:63:12 [INFO] [stdout] | [INFO] [stdout] 63 | static mut audit_fd: libc::c_int = -1; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: convert the identifier to upper case [INFO] [stdout] | [INFO] [stdout] 63 - static mut audit_fd: libc::c_int = -1; [INFO] [stdout] 63 + static mut AUDIT_FD: libc::c_int = -1; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static variable `pamh` should have an upper case name [INFO] [stdout] --> src/passwd.rs:65:12 [INFO] [stdout] | [INFO] [stdout] 65 | static mut pamh: *mut pam_handle_t = std::ptr::null_mut(); [INFO] [stdout] | ^^^^ help: convert the identifier to upper case: `PAMH` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:60:24 [INFO] [stdout] | [INFO] [stdout] 60 | fn lu_end(context: *mut lu_context); [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] = note: `#[warn(improper_ctypes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:61:29 [INFO] [stdout] | [INFO] [stdout] 61 | fn lu_ent_set_long(ent: *mut lu_ent, attr: *const libc::c_char, value: libc::c_long); [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:70:10 [INFO] [stdout] | [INFO] [stdout] 70 | ) -> *mut lu_context; [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:71:24 [INFO] [stdout] | [INFO] [stdout] 71 | fn lu_ent_get(ent: *mut lu_ent, attribute: *const libc::c_char) -> *mut GValueArray; [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:73:14 [INFO] [stdout] | [INFO] [stdout] 73 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:83:18 [INFO] [stdout] | [INFO] [stdout] 83 | context: *mut lu_context, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:84:14 [INFO] [stdout] | [INFO] [stdout] 84 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:87:24 [INFO] [stdout] | [INFO] [stdout] 87 | fn lu_ent_new() -> *mut lu_ent; [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:88:25 [INFO] [stdout] | [INFO] [stdout] 88 | fn lu_ent_free(ent: *mut lu_ent); [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:89:31 [INFO] [stdout] | [INFO] [stdout] 89 | fn lu_ent_set_string(ent: *mut lu_ent, attr: *const libc::c_char, value: *const libc::c_char); [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:91:18 [INFO] [stdout] | [INFO] [stdout] 91 | context: *mut lu_context, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:92:14 [INFO] [stdout] | [INFO] [stdout] 92 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:96:18 [INFO] [stdout] | [INFO] [stdout] 96 | context: *mut lu_context, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:98:14 [INFO] [stdout] | [INFO] [stdout] 98 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:102:18 [INFO] [stdout] | [INFO] [stdout] 102 | context: *mut lu_context, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:103:14 [INFO] [stdout] | [INFO] [stdout] 103 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:107:18 [INFO] [stdout] | [INFO] [stdout] 107 | context: *mut lu_context, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:108:14 [INFO] [stdout] | [INFO] [stdout] 108 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/libuser.rs:501:13 [INFO] [stdout] | [INFO] [stdout] 501 | check_error(convert_lu_error_ptr(error)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 501 | let _ = check_error(convert_lu_error_ptr(error)); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/libuser.rs:646:5 [INFO] [stdout] | [INFO] [stdout] 646 | check_error(convert_lu_error_ptr(error)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 646 | let _ = check_error(convert_lu_error_ptr(error)); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/libuser.rs:690:5 [INFO] [stdout] | [INFO] [stdout] 690 | check_error(error.as_mut().map(|e| e as *mut lu_error)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 690 | let _ = check_error(error.as_mut().map(|e| e as *mut lu_error)); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:498:13 [INFO] [stdout] | [INFO] [stdout] 498 | let mut lu_username_tmp = CString::new(LU_USERNAME).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:506:13 [INFO] [stdout] | [INFO] [stdout] 506 | let mut lu_shadow_passwd = CString::new(LU_SHADOWPASSWORD).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:509:13 [INFO] [stdout] | [INFO] [stdout] 509 | let mut lu_user_passwd = CString::new(LU_USERPASSWORD).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:516:17 [INFO] [stdout] | [INFO] [stdout] 516 | let mut lu_shadow_last_change = CString::new(LU_SHADOWLASTCHANGE).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:518:17 [INFO] [stdout] | [INFO] [stdout] 518 | let mut lu_shadow_min = CString::new(LU_SHADOWMIN).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:520:17 [INFO] [stdout] | [INFO] [stdout] 520 | let mut lu_shadow_max = CString::new(LU_SHADOWMAX).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:522:17 [INFO] [stdout] | [INFO] [stdout] 522 | let mut lu_shadow_warning = CString::new(LU_SHADOWWARNING).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:524:17 [INFO] [stdout] | [INFO] [stdout] 524 | let mut lu_shadow_inactive = CString::new(LU_SHADOWINACTIVE).unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:606:25 [INFO] [stdout] | [INFO] [stdout] 606 | let mut time_format = CString::new("%Y-%m-%d").unwrap(); [INFO] [stdout] | ----^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `str` [INFO] [stdout] --> src/libuser.rs:548:24 [INFO] [stdout] | [INFO] [stdout] 548 | Ok(str) => { /* do nothing */ } [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `strr` [INFO] [stdout] --> src/libuser.rs:586:20 [INFO] [stdout] | [INFO] [stdout] 586 | Ok(strr) => { /*空操作*/ } [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_strr` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `date_str` [INFO] [stdout] --> src/libuser.rs:622:21 [INFO] [stdout] | [INFO] [stdout] 622 | let date_str = unsafe { CStr::from_ptr(date.as_ptr()) }.to_str().unwrap(); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_date_str` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `ent` is never read [INFO] [stdout] --> src/libuser.rs:461:32 [INFO] [stdout] | [INFO] [stdout] 461 | let mut ent: *mut lu_ent = ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `current` is never read [INFO] [stdout] --> src/libuser.rs:463:36 [INFO] [stdout] | [INFO] [stdout] 463 | let mut current: *mut c_char = ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `current_user` is never read [INFO] [stdout] --> src/libuser.rs:464:41 [INFO] [stdout] | [INFO] [stdout] 464 | let mut current_user: *mut c_char = ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `realname` is never read [INFO] [stdout] --> src/libuser.rs:465:37 [INFO] [stdout] | [INFO] [stdout] 465 | let mut realname: *mut c_char = ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `status_cts` is never read [INFO] [stdout] --> src/libuser.rs:476:26 [INFO] [stdout] | [INFO] [stdout] 476 | let mut status_cts = CString::new("").unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `msg_cts` is never read [INFO] [stdout] --> src/libuser.rs:477:23 [INFO] [stdout] | [INFO] [stdout] 477 | let mut msg_cts = CString::new("").unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `status` is never read [INFO] [stdout] --> src/libuser.rs:478:37 [INFO] [stdout] | [INFO] [stdout] 478 | let mut status: *const c_char = ptr::null(); [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `msg` is never read [INFO] [stdout] --> src/libuser.rs:479:34 [INFO] [stdout] | [INFO] [stdout] 479 | let mut msg: *const c_char = ptr::null(); [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:653:9 [INFO] [stdout] | [INFO] [stdout] 653 | let mut ent: *mut lu_ent = ptr::null_mut(); [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `ent` is never read [INFO] [stdout] --> src/libuser.rs:711:32 [INFO] [stdout] | [INFO] [stdout] 711 | let mut ent: *mut lu_ent = ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:917:13 [INFO] [stdout] | [INFO] [stdout] 917 | let mut error_ptr = Box::into_raw(Box::new(lu_error { [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:942:13 [INFO] [stdout] | [INFO] [stdout] 942 | let mut error_ptr = Box::into_raw(Box::new(lu_error { [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/libuser.rs:1048:17 [INFO] [stdout] | [INFO] [stdout] 1048 | let mut error_ptr = Box::into_raw(Box::new(lu_error { [INFO] [stdout] | ----^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `num_msg` [INFO] [stdout] --> src/passwd.rs:68:5 [INFO] [stdout] | [INFO] [stdout] 68 | num_msg: c_int, [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_num_msg` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `msg` [INFO] [stdout] --> src/passwd.rs:69:5 [INFO] [stdout] | [INFO] [stdout] 69 | msg: *const *const pam_message, [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_msg` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `resp` [INFO] [stdout] --> src/passwd.rs:70:5 [INFO] [stdout] | [INFO] [stdout] 70 | resp: *mut *mut pam_response, [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_resp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `appdata_ptr` [INFO] [stdout] --> src/passwd.rs:71:5 [INFO] [stdout] | [INFO] [stdout] 71 | appdata_ptr: *mut c_void, [INFO] [stdout] | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_appdata_ptr` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `matches` [INFO] [stdout] --> src/passwd.rs:417:9 [INFO] [stdout] | [INFO] [stdout] 417 | let matches = Command::new("passwd") [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_matches` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/passwd.rs:552:9 [INFO] [stdout] | [INFO] [stdout] 552 | let mut retval: libc::c_int = 0; // Equivalent to int retval; [INFO] [stdout] | ----^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/passwd.rs:561:9 [INFO] [stdout] | [INFO] [stdout] 561 | let mut pwd: *mut passwd = std::ptr::null_mut(); [INFO] [stdout] | ----^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/passwd.rs:564:9 [INFO] [stdout] | [INFO] [stdout] 564 | let mut tty_name: *mut c_char = std::ptr::null_mut(); [INFO] [stdout] | ----^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/passwd.rs:565:9 [INFO] [stdout] | [INFO] [stdout] 565 | let mut ttyn: *mut c_char = std::ptr::null_mut(); [INFO] [stdout] | ----^^^^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `retval` [INFO] [stdout] --> src/passwd.rs:552:9 [INFO] [stdout] | [INFO] [stdout] 552 | let mut retval: libc::c_int = 0; // Equivalent to int retval; [INFO] [stdout] | ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_retval` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `pwd` [INFO] [stdout] --> src/passwd.rs:561:9 [INFO] [stdout] | [INFO] [stdout] 561 | let mut pwd: *mut passwd = std::ptr::null_mut(); [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pwd` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `tty_name` [INFO] [stdout] --> src/passwd.rs:564:9 [INFO] [stdout] | [INFO] [stdout] 564 | let mut tty_name: *mut c_char = std::ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_tty_name` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `ttyn` [INFO] [stdout] --> src/passwd.rs:565:9 [INFO] [stdout] | [INFO] [stdout] 565 | let mut ttyn: *mut c_char = std::ptr::null_mut(); [INFO] [stdout] | ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ttyn` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static `conv` is never used [INFO] [stdout] --> src/passwd.rs:58:12 [INFO] [stdout] | [INFO] [stdout] 58 | static mut conv: pam_conv = pam_conv { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static `pamh` is never used [INFO] [stdout] --> src/passwd.rs:65:12 [INFO] [stdout] | [INFO] [stdout] 65 | static mut pamh: *mut pam_handle_t = std::ptr::null_mut(); [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `default_conv` is never used [INFO] [stdout] --> src/passwd.rs:67:15 [INFO] [stdout] | [INFO] [stdout] 67 | extern "C" fn default_conv( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `free_cstring` is never used [INFO] [stdout] --> src/passwd.rs:182:4 [INFO] [stdout] | [INFO] [stdout] 182 | fn free_cstring(ptr: *mut c_char) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `convert_to_c_char` is never used [INFO] [stdout] --> src/passwd.rs:190:4 [INFO] [stdout] | [INFO] [stdout] 190 | fn convert_to_c_char(opt_str: Option<&String>) -> *const libc::c_char { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `option_to_c_char_safe` is never used [INFO] [stdout] --> src/passwd.rs:227:4 [INFO] [stdout] | [INFO] [stdout] 227 | fn option_to_c_char_safe(opt: Option) -> Result<*const c_char, NulError> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `USAGE_STR` is never used [INFO] [stdout] --> src/passwd.rs:252:7 [INFO] [stdout] | [INFO] [stdout] 252 | const USAGE_STR: &str = "utpasswd [-kdluefS?] [-k|--keep-tokens] [-d|--delete] [-l|--lock] [-u|--unlock] [-e|--expire] [-f|--force]... [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `build_command` is never used [INFO] [stdout] --> src/passwd.rs:255:4 [INFO] [stdout] | [INFO] [stdout] 255 | fn build_command() -> Command { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `print_c_char_ptr` is never used [INFO] [stdout] --> src/passwd.rs:530:4 [INFO] [stdout] | [INFO] [stdout] 530 | fn print_c_char_ptr(ptr: *mut c_char) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_USERNAME` is never used [INFO] [stdout] --> src/libuser.rs:19:11 [INFO] [stdout] | [INFO] [stdout] 19 | pub const LU_USERNAME: &str = "pw_name"; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_USERPASSWORD` is never used [INFO] [stdout] --> src/libuser.rs:20:11 [INFO] [stdout] | [INFO] [stdout] 20 | pub const LU_USERPASSWORD: &str = "pw_passwd"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_UIDNUMBER` is never used [INFO] [stdout] --> src/libuser.rs:21:11 [INFO] [stdout] | [INFO] [stdout] 21 | pub const LU_UIDNUMBER: &str = "pw_uid"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_GIDNUMBER` is never used [INFO] [stdout] --> src/libuser.rs:22:11 [INFO] [stdout] | [INFO] [stdout] 22 | pub const LU_GIDNUMBER: &str = "pw_gid"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_GECOS` is never used [INFO] [stdout] --> src/libuser.rs:23:11 [INFO] [stdout] | [INFO] [stdout] 23 | pub const LU_GECOS: &str = "pw_gecos"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_HOMEDIRECTORY` is never used [INFO] [stdout] --> src/libuser.rs:24:11 [INFO] [stdout] | [INFO] [stdout] 24 | pub const LU_HOMEDIRECTORY: &str = "pw_dir"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_LOGINSHELL` is never used [INFO] [stdout] --> src/libuser.rs:25:11 [INFO] [stdout] | [INFO] [stdout] 25 | pub const LU_LOGINSHELL: &str = "pw_shell"; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_GROUPNAME` is never used [INFO] [stdout] --> src/libuser.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub const LU_GROUPNAME: &str = "gr_name"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_GROUPPASSWORD` is never used [INFO] [stdout] --> src/libuser.rs:29:11 [INFO] [stdout] | [INFO] [stdout] 29 | pub const LU_GROUPPASSWORD: &str = "gr_passwd"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_MEMBERNAME` is never used [INFO] [stdout] --> src/libuser.rs:30:11 [INFO] [stdout] | [INFO] [stdout] 30 | pub const LU_MEMBERNAME: &str = "gr_mem"; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_ADMINISTRATORNAME` is never used [INFO] [stdout] --> src/libuser.rs:31:11 [INFO] [stdout] | [INFO] [stdout] 31 | pub const LU_ADMINISTRATORNAME: &str = "gr_adm"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWNAME` is never used [INFO] [stdout] --> src/libuser.rs:34:11 [INFO] [stdout] | [INFO] [stdout] 34 | pub const LU_SHADOWNAME: &str = LU_USERNAME; // Note: LU_SHADOWNAME is not distinct from LU_USERNAME. [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWPASSWORD` is never used [INFO] [stdout] --> src/libuser.rs:35:11 [INFO] [stdout] | [INFO] [stdout] 35 | pub const LU_SHADOWPASSWORD: &str = "sp_pwdp"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWLASTCHANGE` is never used [INFO] [stdout] --> src/libuser.rs:36:11 [INFO] [stdout] | [INFO] [stdout] 36 | pub const LU_SHADOWLASTCHANGE: &str = "sp_lstchg"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWMIN` is never used [INFO] [stdout] --> src/libuser.rs:37:11 [INFO] [stdout] | [INFO] [stdout] 37 | pub const LU_SHADOWMIN: &str = "sp_min"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWMAX` is never used [INFO] [stdout] --> src/libuser.rs:38:11 [INFO] [stdout] | [INFO] [stdout] 38 | pub const LU_SHADOWMAX: &str = "sp_max"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWWARNING` is never used [INFO] [stdout] --> src/libuser.rs:39:11 [INFO] [stdout] | [INFO] [stdout] 39 | pub const LU_SHADOWWARNING: &str = "sp_warn"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWINACTIVE` is never used [INFO] [stdout] --> src/libuser.rs:40:11 [INFO] [stdout] | [INFO] [stdout] 40 | pub const LU_SHADOWINACTIVE: &str = "sp_inact"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWEXPIRE` is never used [INFO] [stdout] --> src/libuser.rs:41:11 [INFO] [stdout] | [INFO] [stdout] 41 | pub const LU_SHADOWEXPIRE: &str = "sp_expire"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SHADOWFLAG` is never used [INFO] [stdout] --> src/libuser.rs:42:11 [INFO] [stdout] | [INFO] [stdout] 42 | pub const LU_SHADOWFLAG: &str = "sp_flag"; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_COMMONNAME` is never used [INFO] [stdout] --> src/libuser.rs:45:11 [INFO] [stdout] | [INFO] [stdout] 45 | pub const LU_COMMONNAME: &str = "cn"; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_GIVENNAME` is never used [INFO] [stdout] --> src/libuser.rs:46:11 [INFO] [stdout] | [INFO] [stdout] 46 | pub const LU_GIVENNAME: &str = "givenName"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_SN` is never used [INFO] [stdout] --> src/libuser.rs:47:11 [INFO] [stdout] | [INFO] [stdout] 47 | pub const LU_SN: &str = "sn"; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_ROOMNUMBER` is never used [INFO] [stdout] --> src/libuser.rs:48:11 [INFO] [stdout] | [INFO] [stdout] 48 | pub const LU_ROOMNUMBER: &str = "roomNumber"; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_TELEPHONENUMBER` is never used [INFO] [stdout] --> src/libuser.rs:49:11 [INFO] [stdout] | [INFO] [stdout] 49 | pub const LU_TELEPHONENUMBER: &str = "telephoneNumber"; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_HOMEPHONE` is never used [INFO] [stdout] --> src/libuser.rs:50:11 [INFO] [stdout] | [INFO] [stdout] 50 | pub const LU_HOMEPHONE: &str = "homePhone"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LU_EMAIL` is never used [INFO] [stdout] --> src/libuser.rs:51:11 [INFO] [stdout] | [INFO] [stdout] 51 | pub const LU_EMAIL: &str = "mail"; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `convert_lu_error_ptr` is never used [INFO] [stdout] --> src/libuser.rs:144:4 [INFO] [stdout] | [INFO] [stdout] 144 | fn convert_lu_error_ptr(error_ptr: *mut lu_error) -> Option<*mut lu_error> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_lock_password` is never used [INFO] [stdout] --> src/libuser.rs:232:8 [INFO] [stdout] | [INFO] [stdout] 232 | pub fn pwdb_lock_password(username_c: *const c_char) -> c_int { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_unlock_password` is never used [INFO] [stdout] --> src/libuser.rs:278:8 [INFO] [stdout] | [INFO] [stdout] 278 | pub fn pwdb_unlock_password(username_c: *const c_char, force: c_int) -> c_int { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_clear_password` is never used [INFO] [stdout] --> src/libuser.rs:357:8 [INFO] [stdout] | [INFO] [stdout] 357 | pub fn pwdb_clear_password(username_c: *const c_char) -> c_int { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `ent_value_int64` is never used [INFO] [stdout] --> src/libuser.rs:428:8 [INFO] [stdout] | [INFO] [stdout] 428 | pub fn ent_value_int64(ent: *mut lu_ent, attribute: *const c_char) -> libc::c_longlong { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_display_status` is never used [INFO] [stdout] --> src/libuser.rs:459:8 [INFO] [stdout] | [INFO] [stdout] 459 | pub fn pwdb_display_status(username_c: *const c_char) -> libc::c_int { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_update_gecos` is never used [INFO] [stdout] --> src/libuser.rs:651:8 [INFO] [stdout] | [INFO] [stdout] 651 | pub fn pwdb_update_gecos(username_c: *const libc::c_char, gecos: *const c_char) -> i32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `pwdb_update_aging` is never used [INFO] [stdout] --> src/libuser.rs:702:8 [INFO] [stdout] | [INFO] [stdout] 702 | pub fn pwdb_update_aging( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_set_long` is never used [INFO] [stdout] --> src/libuser.rs:61:8 [INFO] [stdout] | [INFO] [stdout] 61 | fn lu_ent_set_long(ent: *mut lu_ent, attr: *const libc::c_char, value: libc::c_long); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_get` is never used [INFO] [stdout] --> src/libuser.rs:71:8 [INFO] [stdout] | [INFO] [stdout] 71 | fn lu_ent_get(ent: *mut lu_ent, attribute: *const libc::c_char) -> *mut GValueArray; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_get_first_value_strdup` is never used [INFO] [stdout] --> src/libuser.rs:72:8 [INFO] [stdout] | [INFO] [stdout] 72 | fn lu_ent_get_first_value_strdup( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_user_modify` is never used [INFO] [stdout] --> src/libuser.rs:82:8 [INFO] [stdout] | [INFO] [stdout] 82 | fn lu_user_modify( [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_new` is never used [INFO] [stdout] --> src/libuser.rs:87:8 [INFO] [stdout] | [INFO] [stdout] 87 | fn lu_ent_new() -> *mut lu_ent; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_free` is never used [INFO] [stdout] --> src/libuser.rs:88:8 [INFO] [stdout] | [INFO] [stdout] 88 | fn lu_ent_free(ent: *mut lu_ent); [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_ent_set_string` is never used [INFO] [stdout] --> src/libuser.rs:89:8 [INFO] [stdout] | [INFO] [stdout] 89 | fn lu_ent_set_string(ent: *mut lu_ent, attr: *const libc::c_char, value: *const libc::c_char); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_user_lock` is never used [INFO] [stdout] --> src/libuser.rs:90:8 [INFO] [stdout] | [INFO] [stdout] 90 | fn lu_user_lock( [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_user_lookup_name` is never used [INFO] [stdout] --> src/libuser.rs:95:8 [INFO] [stdout] | [INFO] [stdout] 95 | fn lu_user_lookup_name( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_user_unlock` is never used [INFO] [stdout] --> src/libuser.rs:101:8 [INFO] [stdout] | [INFO] [stdout] 101 | fn lu_user_unlock( [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `lu_user_removepass` is never used [INFO] [stdout] --> src/libuser.rs:106:8 [INFO] [stdout] | [INFO] [stdout] 106 | fn lu_user_removepass( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `test_check_error_with_valid_error` is never used [INFO] [stdout] --> src/libuser.rs:915:8 [INFO] [stdout] | [INFO] [stdout] 915 | fn test_check_error_with_valid_error() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ENABLE_NLS` is never used [INFO] [stdout] --> src/utconfig.rs:12:15 [INFO] [stdout] | [INFO] [stdout] 12 | pub const ENABLE_NLS: bool = true; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_ALLOCA` is never used [INFO] [stdout] --> src/utconfig.rs:15:15 [INFO] [stdout] | [INFO] [stdout] 15 | pub const HAVE_ALLOCA: bool = true; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_ALLOCA_H` is never used [INFO] [stdout] --> src/utconfig.rs:18:15 [INFO] [stdout] | [INFO] [stdout] 18 | pub const HAVE_ALLOCA_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_DCGETTEXT` is never used [INFO] [stdout] --> src/utconfig.rs:21:15 [INFO] [stdout] | [INFO] [stdout] 21 | pub const HAVE_DCGETTEXT: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_GETTEXT` is never used [INFO] [stdout] --> src/utconfig.rs:24:15 [INFO] [stdout] | [INFO] [stdout] 24 | pub const HAVE_GETTEXT: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_INTTYPES_H` is never used [INFO] [stdout] --> src/utconfig.rs:30:15 [INFO] [stdout] | [INFO] [stdout] 30 | pub const HAVE_INTTYPES_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_MEMORY_H` is never used [INFO] [stdout] --> src/utconfig.rs:33:15 [INFO] [stdout] | [INFO] [stdout] 33 | pub const HAVE_MEMORY_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_STDINT_H` is never used [INFO] [stdout] --> src/utconfig.rs:36:15 [INFO] [stdout] | [INFO] [stdout] 36 | pub const HAVE_STDINT_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_STDLIB_H` is never used [INFO] [stdout] --> src/utconfig.rs:39:15 [INFO] [stdout] | [INFO] [stdout] 39 | pub const HAVE_STDLIB_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_STRINGS_H` is never used [INFO] [stdout] --> src/utconfig.rs:42:15 [INFO] [stdout] | [INFO] [stdout] 42 | pub const HAVE_STRINGS_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_STRING_H` is never used [INFO] [stdout] --> src/utconfig.rs:45:15 [INFO] [stdout] | [INFO] [stdout] 45 | pub const HAVE_STRING_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_SYS_STAT_H` is never used [INFO] [stdout] --> src/utconfig.rs:48:15 [INFO] [stdout] | [INFO] [stdout] 48 | pub const HAVE_SYS_STAT_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_SYS_TYPES_H` is never used [INFO] [stdout] --> src/utconfig.rs:51:15 [INFO] [stdout] | [INFO] [stdout] 51 | pub const HAVE_SYS_TYPES_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `HAVE_UNISTD_H` is never used [INFO] [stdout] --> src/utconfig.rs:54:15 [INFO] [stdout] | [INFO] [stdout] 54 | pub const HAVE_UNISTD_H: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_BUGREPORT` is never used [INFO] [stdout] --> src/utconfig.rs:57:15 [INFO] [stdout] | [INFO] [stdout] 57 | pub const PACKAGE_BUGREPORT: &str = ""; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_NAME` is never used [INFO] [stdout] --> src/utconfig.rs:58:15 [INFO] [stdout] | [INFO] [stdout] 58 | pub const PACKAGE_NAME: &str = "passwd"; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_STRING` is never used [INFO] [stdout] --> src/utconfig.rs:59:15 [INFO] [stdout] | [INFO] [stdout] 59 | pub const PACKAGE_STRING: &str = "passwd 0.80"; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_TARNAME` is never used [INFO] [stdout] --> src/utconfig.rs:60:15 [INFO] [stdout] | [INFO] [stdout] 60 | pub const PACKAGE_TARNAME: &str = "passwd"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_URL` is never used [INFO] [stdout] --> src/utconfig.rs:61:15 [INFO] [stdout] | [INFO] [stdout] 61 | pub const PACKAGE_URL: &str = ""; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PACKAGE_VERSION` is never used [INFO] [stdout] --> src/utconfig.rs:62:15 [INFO] [stdout] | [INFO] [stdout] 62 | pub const PACKAGE_VERSION: &str = "0.80"; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `STDC_HEADERS` is never used [INFO] [stdout] --> src/utconfig.rs:68:15 [INFO] [stdout] | [INFO] [stdout] 68 | pub const STDC_HEADERS: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `WITH_AUDIT` is never used [INFO] [stdout] --> src/utconfig.rs:92:15 [INFO] [stdout] | [INFO] [stdout] 92 | pub const WITH_AUDIT: bool = true; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `WITH_SELINUX` is never used [INFO] [stdout] --> src/utconfig.rs:95:15 [INFO] [stdout] | [INFO] [stdout] 95 | pub const WITH_SELINUX: bool = true; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `eprintln!` args [INFO] [stdout] --> src/libuser.rs:319:54 [INFO] [stdout] | [INFO] [stdout] 319 | get_progname_value().unwrap().to_string(), [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/libuser.rs:320:25 [INFO] [stdout] | [INFO] [stdout] 320 | "Warning: unlocked password would be empty." [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] = note: `#[warn(clippy::print_literal)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 318 ~ "{}: Warning: unlocked password would be empty.", [INFO] [stdout] 319 ~ get_progname_value().unwrap().to_string() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/libuser.rs:325:13 [INFO] [stdout] | [INFO] [stdout] 325 | / if retval != -2 { [INFO] [stdout] 326 | | if lu_user_unlock( [INFO] [stdout] 327 | | &mut get_libuser().unwrap() as *mut lu_context, [INFO] [stdout] 328 | | ent, [INFO] [stdout] ... | [INFO] [stdout] 334 | | } [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] 325 ~ if retval != -2 [INFO] [stdout] 326 ~ && lu_user_unlock( [INFO] [stdout] 327 | &mut get_libuser().unwrap() as *mut lu_context, [INFO] [stdout] ... [INFO] [stdout] 332 | retval = 0; [INFO] [stdout] 333 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: accessing first element with `CStr::from_ptr(current).to_bytes().get(0)` [INFO] [stdout] --> src/libuser.rs:390:21 [INFO] [stdout] | [INFO] [stdout] 390 | && *CStr::from_ptr(current).to_bytes().get(0).unwrap_or(&0) == b'!' [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `CStr::from_ptr(current).to_bytes().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: `to_string` applied to a type that implements `Display` in `eprintln!` args [INFO] [stdout] --> src/libuser.rs:394:50 [INFO] [stdout] | [INFO] [stdout] 394 | get_progname_value().unwrap().to_string(), [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/libuser.rs:395:21 [INFO] [stdout] | [INFO] [stdout] 395 | "Note: deleting a password also unlocks the password" [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 393 ~ "{}: Note: deleting a password also unlocks the password", [INFO] [stdout] 394 ~ get_progname_value().unwrap().to_string() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/libuser.rs:535:16 [INFO] [stdout] | [INFO] [stdout] 535 | if current_str.len() == 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `current_str.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: casting raw pointers to the same type and constness is unnecessary (`*mut common::lu_ent` -> `*mut common::lu_ent`) [INFO] [stdout] --> src/libuser.rs:667:13 [INFO] [stdout] | [INFO] [stdout] 667 | ent as *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `ent` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting raw pointers to the same type and constness is unnecessary (`*mut common::lu_ent` -> `*mut common::lu_ent`) [INFO] [stdout] --> src/libuser.rs:673:17 [INFO] [stdout] | [INFO] [stdout] 673 | ent as *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `ent` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting raw pointers to the same type and constness is unnecessary (`*mut common::lu_ent` -> `*mut common::lu_ent`) [INFO] [stdout] --> src/libuser.rs:682:17 [INFO] [stdout] | [INFO] [stdout] 682 | ent as *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `ent` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `0 as *const _` detected [INFO] [stdout] --> src/passwd.rs:60:18 [INFO] [stdout] | [INFO] [stdout] 60 | appdata_ptr: 0 as *const c_void as *mut c_void, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: try: `std::ptr::null::()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_ptr [INFO] [stdout] = note: `#[warn(clippy::zero_ptr)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/passwd.rs:145:13 [INFO] [stdout] | [INFO] [stdout] 145 | / match CStr::from_ptr(appdata_ptr as *const libc::c_char).to_str() { [INFO] [stdout] 146 | | Ok(s) => s, [INFO] [stdout] 147 | | Err(_) => "", [INFO] [stdout] 148 | | } [INFO] [stdout] | |_____________^ help: replace it with: `CStr::from_ptr(appdata_ptr as *const libc::c_char).to_str().unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/passwd.rs:405:29 [INFO] [stdout] | [INFO] [stdout] 405 | if !is_known && !arg.parse::().is_ok() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `arg.parse::().is_err()` [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: match expression looks like `matches!` macro [INFO] [stdout] --> src/passwd.rs:350:31 [INFO] [stdout] | [INFO] [stdout] 350 | let is_value_option = match arg.as_str() { [INFO] [stdout] | _______________________________^ [INFO] [stdout] 351 | | "-w" | "--warning" | "-x" | "--maximum" | "-n" | "--minimum" | "-i" | "--inactive" => { [INFO] [stdout] 352 | | true [INFO] [stdout] ... | [INFO] [stdout] 355 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 350 - let is_value_option = match arg.as_str() { [INFO] [stdout] 351 - "-w" | "--warning" | "-x" | "--maximum" | "-n" | "--minimum" | "-i" | "--inactive" => { [INFO] [stdout] 352 - true [INFO] [stdout] 353 - } [INFO] [stdout] 354 - _ => false, [INFO] [stdout] 355 - }; [INFO] [stdout] 350 + let is_value_option = matches!(arg.as_str(), "-w" | "--warning" | "-x" | "--maximum" | "-n" | "--minimum" | "-i" | "--inactive"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/passwd.rs:371:20 [INFO] [stdout] | [INFO] [stdout] 371 | if let Ok(_) = next_arg.parse::() { [INFO] [stdout] | -------^^^^^-------------------------- help: try: `if next_arg.parse::().is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static variable `conv` should have an upper case name [INFO] [stdout] --> src/passwd.rs:58:12 [INFO] [stdout] | [INFO] [stdout] 58 | static mut conv: pam_conv = pam_conv { [INFO] [stdout] | ^^^^ help: convert the identifier to upper case: `CONV` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_upper_case_globals)]` (part of `#[warn(nonstandard_style)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static variable `audit_fd` should have an upper case name [INFO] [stdout] --> src/passwd.rs:63:12 [INFO] [stdout] | [INFO] [stdout] 63 | static mut audit_fd: libc::c_int = -1; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: convert the identifier to upper case [INFO] [stdout] | [INFO] [stdout] 63 - static mut audit_fd: libc::c_int = -1; [INFO] [stdout] 63 + static mut AUDIT_FD: libc::c_int = -1; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: static variable `pamh` should have an upper case name [INFO] [stdout] --> src/passwd.rs:65:12 [INFO] [stdout] | [INFO] [stdout] 65 | static mut pamh: *mut pam_handle_t = std::ptr::null_mut(); [INFO] [stdout] | ^^^^ help: convert the identifier to upper case: `PAMH` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:60:24 [INFO] [stdout] | [INFO] [stdout] 60 | fn lu_end(context: *mut lu_context); [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] = note: `#[warn(improper_ctypes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:61:29 [INFO] [stdout] | [INFO] [stdout] 61 | fn lu_ent_set_long(ent: *mut lu_ent, attr: *const libc::c_char, value: libc::c_long); [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:70:10 [INFO] [stdout] | [INFO] [stdout] 70 | ) -> *mut lu_context; [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:71:24 [INFO] [stdout] | [INFO] [stdout] 71 | fn lu_ent_get(ent: *mut lu_ent, attribute: *const libc::c_char) -> *mut GValueArray; [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:73:14 [INFO] [stdout] | [INFO] [stdout] 73 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:83:18 [INFO] [stdout] | [INFO] [stdout] 83 | context: *mut lu_context, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:84:14 [INFO] [stdout] | [INFO] [stdout] 84 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:87:24 [INFO] [stdout] | [INFO] [stdout] 87 | fn lu_ent_new() -> *mut lu_ent; [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:88:25 [INFO] [stdout] | [INFO] [stdout] 88 | fn lu_ent_free(ent: *mut lu_ent); [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:89:31 [INFO] [stdout] | [INFO] [stdout] 89 | fn lu_ent_set_string(ent: *mut lu_ent, attr: *const libc::c_char, value: *const libc::c_char); [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:91:18 [INFO] [stdout] | [INFO] [stdout] 91 | context: *mut lu_context, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:92:14 [INFO] [stdout] | [INFO] [stdout] 92 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:96:18 [INFO] [stdout] | [INFO] [stdout] 96 | context: *mut lu_context, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:98:14 [INFO] [stdout] | [INFO] [stdout] 98 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:102:18 [INFO] [stdout] | [INFO] [stdout] 102 | context: *mut lu_context, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:103:14 [INFO] [stdout] | [INFO] [stdout] 103 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:107:18 [INFO] [stdout] | [INFO] [stdout] 107 | context: *mut lu_context, [INFO] [stdout] | ^^^^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `fn(*mut common::lu_string_cache, *const i8) -> *mut i8`, which is not FFI-safe [INFO] [stdout] --> src/libuser.rs:108:14 [INFO] [stdout] | [INFO] [stdout] 108 | ent: *mut lu_ent, [INFO] [stdout] | ^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider using an `extern fn(...) -> ...` function pointer instead [INFO] [stdout] = note: this function pointer has Rust-specific calling convention [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/libuser.rs:501:13 [INFO] [stdout] | [INFO] [stdout] 501 | check_error(convert_lu_error_ptr(error)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 501 | let _ = check_error(convert_lu_error_ptr(error)); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/libuser.rs:646:5 [INFO] [stdout] | [INFO] [stdout] 646 | check_error(convert_lu_error_ptr(error)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 646 | let _ = check_error(convert_lu_error_ptr(error)); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused `std::result::Result` that must be used [INFO] [stdout] --> src/libuser.rs:690:5 [INFO] [stdout] | [INFO] [stdout] 690 | check_error(error.as_mut().map(|e| e as *mut lu_error)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 690 | let _ = check_error(error.as_mut().map(|e| e as *mut lu_error)); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 8.68s [INFO] running `Command { std: "docker" "inspect" "8d1be16cf158140dfc3e02e1e27fe28b39632254fbb848e8011b65435aba59ac", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "8d1be16cf158140dfc3e02e1e27fe28b39632254fbb848e8011b65435aba59ac", kill_on_drop: false }` [INFO] [stdout] 8d1be16cf158140dfc3e02e1e27fe28b39632254fbb848e8011b65435aba59ac