From: Yu Watanabe Date: Sun, 2 Feb 2025 06:28:15 +0000 (+0900) Subject: udevadm-verify: document '--resolve-names=late' and accept 'never' as is X-Git-Tag: v258-rc1~1413^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F36241%2Fhead;p=thirdparty%2Fsystemd.git udevadm-verify: document '--resolve-names=late' and accept 'never' as is When '--resolve-names=late', systemd-udevd resolves user/group names during each event being processed, and does not verify names on parse. When '--resolve-names=never', systemd-udevd refuses any user/group names on parse. Hence, the parser of udev rules behaves diffrently. Let's not convert 'never' -> 'late' silently, and use the specified option as is. This also updates man page and shell completion for --resolve-names option. --- diff --git a/man/udevadm.xml b/man/udevadm.xml index 507ab49b484..021ae6d364e 100644 --- a/man/udevadm.xml +++ b/man/udevadm.xml @@ -882,13 +882,11 @@ - Specify when udevadm should resolve names of users - and groups. When set to early (the - default), names will be resolved when the rules are - parsed. When set to late, names will - be resolved for every event. When set to - never, names will never be resolved - and all devices will be owned by root. + Specify when udevadm should resolve names of users and groups specified + in udev rules. When set to early (the default), names will be resolved when + the rules are parsed. When set to late, names will be resolved during the + event being processed. When set to never, names will never be resolved and + relevant udev rules will be ignored. @@ -976,13 +974,14 @@ - + - Specify when udevadm should resolve names of users - and groups. When set to early (the - default), names will be resolved when the rules are - parsed. When set to never, names will - never be resolved. + Specify when udevadm should resolve names of users and groups specified + in udev rules. When set to early (the default), names will be resolved when + the rules are parsed. When set to late, names will not be verified, as + systemd-udevd resolves names during each event being processed. When set to + never, names will never be resolved and relevant rules will be ignored. + diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm index 02a025ff451..e9d11d32a3d 100644 --- a/shell-completion/bash/udevadm +++ b/shell-completion/bash/udevadm @@ -258,7 +258,7 @@ _udevadm() { comps=$( udevadm test --action help ) ;; -N|--resolve-names) - comps='early late never' + comps=$( udevadm test --resolve-names help ) ;; -D|--extra-rules-dir) comps='' @@ -304,7 +304,7 @@ _udevadm() { if __contains_word "$prev" ${OPTS[VERIFY_ARG]}; then case $prev in -N|--resolve-names) - comps='early never' + comps=$( udevadm test --resolve-names help ) ;; --root) comps='' diff --git a/shell-completion/zsh/_udevadm b/shell-completion/zsh/_udevadm index 7572b09f67f..ac112e751fe 100644 --- a/shell-completion/zsh/_udevadm +++ b/shell-completion/zsh/_udevadm @@ -88,7 +88,8 @@ _udevadm_test(){ '(-)'{-h,--help}'[Show help]' \ '(-)'{-V,--version}'[Show package version]' \ '--action=[The action string.]:actions:(add change remove move online offline bind unbind)' \ - '--subsystem=[The subsystem string.]' \ + '(-N --resolve-names)'{-N,--resolve-names=}'[When to resolve names.]:resolve:(early late never)' \ + '--subsystem=[The subsystem string.]' \ '(-D --extra-rules-dir=)'{-D,--extra-rules-dir=}'[Also load rules from the directory.]' \ '(-v --verbose)'{-v,--verbose}'[Show verbose logs.]' \ '*::devpath:_files -P /sys/ -W /sys' @@ -119,7 +120,7 @@ _udevadm_verify(){ _arguments \ '(- *)'{-h,--help}'[Show help]' \ '(- *)'{-V,--version}'[Show package version]' \ - '(-N --resolve-names)'{-N+,--resolve-names=}'[When to resolve names.]:resolve:(early never)' \ + '(-N --resolve-names)'{-N,--resolve-names=}'[When to resolve names.]:resolve:(early late never)' \ '--root=[Operate on catalog hierarchy under specified directory]:directories:_directories' \ --no-summary'[Do not show summary.]' \ --no-style'[Ignore style issues.]' \ diff --git a/src/udev/udevadm-verify.c b/src/udev/udevadm-verify.c index 9286a632e83..ca2e0e472cf 100644 --- a/src/udev/udevadm-verify.c +++ b/src/udev/udevadm-verify.c @@ -36,7 +36,7 @@ static int help(void) { "\n%sVerify udev rules files.%s\n\n" " -h --help Show this help\n" " -V --version Show package version\n" - " -N --resolve-names=early|never When to resolve names\n" + " -N --resolve-names=early|late|never When to resolve names\n" " --root=PATH Operate on an alternate filesystem root\n" " --no-summary Do not show summary\n" " --no-style Ignore style issues\n" @@ -80,13 +80,6 @@ static int parse_argv(int argc, char *argv[]) { r = parse_resolve_name_timing(optarg, &arg_resolve_name_timing); if (r <= 0) return r; - /* - * In the verifier "late" has the effect of "never", - * and "never" would generate irrelevant diagnostics, - * so map "never" to "late". - */ - if (arg_resolve_name_timing == RESOLVE_NAME_NEVER) - arg_resolve_name_timing = RESOLVE_NAME_LATE; break; case ARG_ROOT: r = parse_path_argument(optarg, /* suppress_root= */ true, &arg_root); diff --git a/test/meson.build b/test/meson.build index 92f184e3f57..f2fb5f79ce7 100644 --- a/test/meson.build +++ b/test/meson.build @@ -136,7 +136,7 @@ if want_tests != 'false' test('udev-rules-check', exe, suite : 'udev', - args : ['verify', '--resolve-names=never', all_rules]) + args : ['verify', '--resolve-names=late', all_rules]) endif ############################################################ diff --git a/test/units/TEST-17-UDEV.11.sh b/test/units/TEST-17-UDEV.11.sh index d781db8d1ea..33669a2a06d 100755 --- a/test/units/TEST-17-UDEV.11.sh +++ b/test/units/TEST-17-UDEV.11.sh @@ -103,6 +103,8 @@ assert_0 -h assert_0 --help assert_0 -V assert_0 --version +assert_0 -N help +assert_0 --resolve-names help # unrecognized option '--unknown' assert_1 --unknown @@ -112,7 +114,7 @@ assert_1 -N assert_1 -N now # option '--resolve-names' requires an argument assert_1 --resolve-names -# --resolve-names= takes "early" or "never" +# --resolve-names= takes "early", "late", or "never" assert_1 --resolve-names=now # Failed to parse rules file ./nosuchfile: No such file or directory assert_1 ./nosuchfile