]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udevadm-verify: document '--resolve-names=late' and accept 'never' as is 36241/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 2 Feb 2025 06:28:15 +0000 (15:28 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 2 Feb 2025 06:55:01 +0000 (15:55 +0900)
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.

man/udevadm.xml
shell-completion/bash/udevadm
shell-completion/zsh/_udevadm
src/udev/udevadm-verify.c
test/meson.build
test/units/TEST-17-UDEV.11.sh

index 507ab49b48435391c1ee9820da02bd3c71e3430d..021ae6d364ea1bda2bdf56a9fa2a4f5a597af4b2 100644 (file)
           <term><option>-N</option></term>
           <term><option>--resolve-names=<constant>early</constant>|<constant>late</constant>|<constant>never</constant></option></term>
           <listitem>
-            <para>Specify when udevadm should resolve names of users
-            and groups.  When set to <constant>early</constant> (the
-            default), names will be resolved when the rules are
-            parsed. When set to <constant>late</constant>, names will
-            be resolved for every event. When set to
-            <constant>never</constant>, names will never be resolved
-            and all devices will be owned by root.</para>
+            <para>Specify when <command>udevadm</command> should resolve names of users and groups specified
+            in udev rules. When set to <constant>early</constant> (the default), names will be resolved when
+            the rules are parsed. When set to <constant>late</constant>, names will be resolved during the
+            event being processed. When set to <constant>never</constant>, names will never be resolved and
+            relevant udev rules will be ignored.</para>
 
             <xi:include href="version-info.xml" xpointer="v209"/>
           </listitem>
       <variablelist>
         <varlistentry>
           <term><option>-N</option></term>
-          <term><option>--resolve-names=<constant>early</constant>|<constant>never</constant></option></term>
+          <term><option>--resolve-names=<constant>early</constant>|<constant>late</constant>|<constant>never</constant></option></term>
           <listitem>
-            <para>Specify when udevadm should resolve names of users
-            and groups.  When set to <constant>early</constant> (the
-            default), names will be resolved when the rules are
-            parsed. When set to <constant>never</constant>, names will
-            never be resolved.</para>
+            <para>Specify when <command>udevadm</command> should resolve names of users and groups specified
+            in udev rules. When set to <constant>early</constant> (the default), names will be resolved when
+            the rules are parsed. When set to <constant>late</constant>, names will not be verified, as
+            <command>systemd-udevd</command> resolves names during each event being processed. When set to
+            <constant>never</constant>, names will never be resolved and relevant rules will be ignored.
+            </para>
 
             <xi:include href="version-info.xml" xpointer="v254"/>
           </listitem>
index 02a025ff451ccb6676498ebc657b1323c02c70ad..e9d11d32a3d462b0c62bc9b1007679e2a86e09e9 100644 (file)
@@ -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=''
index 7572b09f67fc277a7b3eb155f2d718388be677ae..ac112e751fe4e5c0f363064f71bc7093e00ef886 100644 (file)
@@ -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.]' \
index 9286a632e83b1f0e5c1703c98fb4be8d7608a0e1..ca2e0e472cf116f0d885a0291a8e474896f2e49c 100644 (file)
@@ -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);
index 92f184e3f576769fbb9c1306a536d431dbfb7044..f2fb5f79ce78dccfc3a88c0664bfdf0cb190a845 100644 (file)
@@ -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
 
 ############################################################
index d781db8d1ea09b0def8e247652522992f80811f6..33669a2a06da03d84fe4e13e742f2d81425e8fed 100755 (executable)
@@ -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