diff options
author | Frantisek Sumsal <frantisek@sumsal.cz> | 2022-03-10 16:15:54 +0100 |
---|---|---|
committer | Frantisek Sumsal <frantisek@sumsal.cz> | 2022-03-10 19:03:22 +0100 |
commit | 6ceb0a4094908dd213a78b9f6d0c59a684831ab0 (patch) | |
tree | 4e1d6720898bf86ccb1f39a97b7f1ccca5a5c5a6 | |
parent | core: be a bit more defensive when resolving specifiers (diff) | |
download | systemd-6ceb0a4094908dd213a78b9f6d0c59a684831ab0.tar.xz systemd-6ceb0a4094908dd213a78b9f6d0c59a684831ab0.zip |
core: introduce %R specifier for pretty hostname
Resolves: #20054
-rw-r--r-- | man/standard-specifiers.xml | 5 | ||||
-rw-r--r-- | man/systemd.unit.xml | 9 | ||||
-rw-r--r-- | src/shared/specifier.c | 15 | ||||
-rw-r--r-- | src/shared/specifier.h | 2 | ||||
-rw-r--r-- | src/test/test-specifier.c | 2 |
5 files changed, 32 insertions, 1 deletions
diff --git a/man/standard-specifiers.xml b/man/standard-specifiers.xml index f1666365b9..abbd47f778 100644 --- a/man/standard-specifiers.xml +++ b/man/standard-specifiers.xml @@ -34,6 +34,11 @@ <entry>Short host name</entry> <entry>The hostname of the running system, truncated at the first dot to remove any domain component.</entry> </row> + <row id='R'> + <entry><literal>%R</literal></entry> + <entry>Pretty host name</entry> + <entry>The pretty hostname of the running system, as read from the <varname>PRETTY_HOSTNAME=</varname> field of <filename>/etc/machine-info</filename>. If not set, resolves to the short hostname. See <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information.</entry> + </row> <row id='m'> <entry><literal>%m</literal></entry> <entry>Machine ID</entry> diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml index b20072f0a2..8f2f649747 100644 --- a/man/systemd.unit.xml +++ b/man/systemd.unit.xml @@ -2031,6 +2031,8 @@ Note that this setting is <emphasis>not</emphasis> influenced by the <varname>Us </row> <row> <entry><literal>%l</literal></entry> + <!-- We do not use the common definition from standard-specifiers.xml here since we want a + slightly more verbose explanation here, referring to the reload cycle. --> <entry>Short host name</entry> <entry>The hostname of the running system at the point in time the unit configuration is loaded, truncated at the first dot to remove any domain component.</entry> </row> @@ -2063,6 +2065,13 @@ Note that this setting is <emphasis>not</emphasis> influenced by the <varname>Us <entry>Same as <literal>%p</literal>, but with escaping undone.</entry> </row> <row> + <!-- We do not use the common definition from standard-specifiers.xml here since we want a + slightly more verbose explanation here, referring to the reload cycle. --> + <entry><literal>%R</literal></entry> + <entry>Pretty host name</entry> + <entry>The pretty hostname of the running system at the point in time the unit configuration is loaded, as read from the <varname>PRETTY_HOSTNAME=</varname> field of <filename>/etc/machine-info</filename>. If not set, resolves to the short hostname. See <citerefentry><refentrytitle>machine-info</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information.</entry> + </row> + <row> <entry><literal>%s</literal></entry> <entry>User shell</entry> <entry>This is the shell of the user running the service manager instance. In case of the system manager this resolves to <literal>/bin/sh</literal>.</entry> diff --git a/src/shared/specifier.c b/src/shared/specifier.c index 8c5a4fa831..a02012407b 100644 --- a/src/shared/specifier.c +++ b/src/shared/specifier.c @@ -223,6 +223,21 @@ int specifier_short_host_name(char specifier, const void *data, const char *root return 0; } +int specifier_pretty_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + char *n = NULL; + + assert(ret); + + if (get_pretty_hostname(&n) < 0) { + n = gethostname_short_malloc(); + if (!n) + return -ENOMEM; + } + + *ret = n; + return 0; +} + int specifier_kernel_release(char specifier, const void *data, const char *root, const void *userdata, char **ret) { struct utsname uts; char *n; diff --git a/src/shared/specifier.h b/src/shared/specifier.h index eae5f12ad7..2f2553cfdc 100644 --- a/src/shared/specifier.h +++ b/src/shared/specifier.h @@ -21,6 +21,7 @@ int specifier_machine_id(char specifier, const void *data, const char *root, con int specifier_boot_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); int specifier_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret); int specifier_short_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret); +int specifier_pretty_host_name(char specifier, const void *data, const char *root, const void *userdata, char **ret); int specifier_kernel_release(char specifier, const void *data, const char *root, const void *userdata, char **ret); int specifier_architecture(char specifier, const void *data, const char *root, const void *userdata, char **ret); int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret); @@ -75,6 +76,7 @@ int specifier_var_tmp_dir(char specifier, const void *data, const char *root, co { 'B', specifier_os_build_id, NULL }, \ { 'H', specifier_host_name, NULL }, \ { 'l', specifier_short_host_name, NULL }, \ + { 'R', specifier_pretty_host_name,NULL }, \ { 'm', specifier_machine_id, NULL }, \ { 'M', specifier_os_image_id, NULL }, \ { 'o', specifier_os_id, NULL }, \ diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c index ded2dcd55a..231625de95 100644 --- a/src/test/test-specifier.c +++ b/src/test/test-specifier.c @@ -73,7 +73,7 @@ TEST(specifier_printf) { assert_se(streq(w, "xxx a=AAAA b=BBBB e= yyy")); free(w); - r = specifier_printf("machine=%m, boot=%b, host=%H, version=%v, arch=%a, empty=%e", SIZE_MAX, table, NULL, NULL, &w); + r = specifier_printf("machine=%m, boot=%b, host=%H, pretty=%R, version=%v, arch=%a, empty=%e", SIZE_MAX, table, NULL, NULL, &w); assert_se(r >= 0); assert_se(w); puts(w); |