mirror of
https://github.com/systemd/systemd.git
synced 2024-11-26 19:53:45 +08:00
sd-id128: add an app-specific flavour of the invocation ID too
This commit is contained in:
parent
6f9a1adf6d
commit
615906cdcf
@ -63,6 +63,12 @@
|
||||
<paramdef>sd_id128_t *<parameter>ret</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>int <function>sd_id128_get_invocation_app_specific</function></funcdef>
|
||||
<paramdef>sd_id128_t <parameter>app_id</parameter></paramdef>
|
||||
<paramdef>sd_id128_t *<parameter>ret</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
@ -126,12 +132,16 @@
|
||||
for details. The ID is cached internally. In future a different mechanism to determine the invocation ID
|
||||
may be added.</para>
|
||||
|
||||
<para><function>sd_id128_get_invocation_app_specific()</function> derives an application-specific ID from
|
||||
the invocation ID.</para>
|
||||
|
||||
<para>Note that <function>sd_id128_get_machine_app_specific()</function>,
|
||||
<function>sd_id128_get_boot()</function>, <function>sd_id128_get_boot_app_specific()</function>, and
|
||||
<function>sd_id128_get_invocation()</function> always return UUID Variant 1 Version 4 compatible IDs.
|
||||
<function>sd_id128_get_machine()</function> will also return a UUID Variant 1 Version 4 compatible ID on
|
||||
new installations but might not on older. It is possible to convert the machine ID non-reversibly into a
|
||||
UUID Variant 1 Version 4 compatible one. For more information, see
|
||||
<function>sd_id128_get_boot()</function>, <function>sd_id128_get_boot_app_specific()</function>,
|
||||
<function>sd_id128_get_invocation()</function> and
|
||||
<function>sd_id128_get_invocation_app_specific</function> always return UUID Variant 1 Version 4
|
||||
compatible IDs. <function>sd_id128_get_machine()</function> will also return a UUID Variant 1 Version 4
|
||||
compatible ID on new installations but might not on older. It is possible to convert the machine ID
|
||||
non-reversibly into a UUID Variant 1 Version 4 compatible one. For more information, see
|
||||
<citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>. It is
|
||||
hence guaranteed that these functions will never return the ID consisting of all zero or all one bits
|
||||
(<constant>SD_ID128_NULL</constant>, <constant>SD_ID128_ALLF</constant>) — with the possible exception of
|
||||
@ -262,6 +272,7 @@ As man:sd-id128(3) macro:
|
||||
<para><function>sd_id128_get_machine_app_specific()</function> was added in version 233.</para>
|
||||
<para><function>sd_id128_get_boot_app_specific()</function> was added in version 240.</para>
|
||||
<para><function>sd_id128_get_app_specific()</function> was added in version 255.</para>
|
||||
<para><function>sd_id128_get_invocation_app_specific()</function> was added in version 256.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
|
@ -839,6 +839,7 @@ LIBSYSTEMD_256 {
|
||||
global:
|
||||
sd_bus_creds_get_pidfd_dup;
|
||||
sd_bus_creds_new_from_pidfd;
|
||||
sd_id128_get_invocation_app_specific;
|
||||
sd_journal_stream_fd_with_namespace;
|
||||
sd_event_source_get_inotify_path;
|
||||
} LIBSYSTEMD_255;
|
||||
|
@ -390,3 +390,16 @@ _public_ int sd_id128_get_boot_app_specific(sd_id128_t app_id, sd_id128_t *ret)
|
||||
|
||||
return sd_id128_get_app_specific(id, app_id, ret);
|
||||
}
|
||||
|
||||
_public_ int sd_id128_get_invocation_app_specific(sd_id128_t app_id, sd_id128_t *ret) {
|
||||
sd_id128_t id;
|
||||
int r;
|
||||
|
||||
assert_return(ret, -EINVAL);
|
||||
|
||||
r = sd_id128_get_invocation(&id);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return sd_id128_get_app_specific(id, app_id, ret);
|
||||
}
|
||||
|
@ -53,6 +53,7 @@ int sd_id128_get_invocation(sd_id128_t *ret);
|
||||
int sd_id128_get_app_specific(sd_id128_t base, sd_id128_t app_id, sd_id128_t *ret);
|
||||
int sd_id128_get_machine_app_specific(sd_id128_t app_id, sd_id128_t *ret);
|
||||
int sd_id128_get_boot_app_specific(sd_id128_t app_id, sd_id128_t *ret);
|
||||
int sd_id128_get_invocation_app_specific(sd_id128_t app_id, sd_id128_t *ret);
|
||||
|
||||
#define SD_ID128_ARRAY(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) \
|
||||
{ .bytes = { 0x##v0, 0x##v1, 0x##v2, 0x##v3, 0x##v4, 0x##v5, 0x##v6, 0x##v7, \
|
||||
|
@ -199,7 +199,7 @@ TEST(id128) {
|
||||
}
|
||||
|
||||
TEST(sd_id128_get_invocation) {
|
||||
sd_id128_t id;
|
||||
sd_id128_t id = SD_ID128_NULL;
|
||||
int r;
|
||||
|
||||
/* Query the invocation ID */
|
||||
@ -208,6 +208,36 @@ TEST(sd_id128_get_invocation) {
|
||||
log_warning_errno(r, "Failed to get invocation ID, ignoring: %m");
|
||||
else
|
||||
log_info("Invocation ID: " SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(id));
|
||||
|
||||
sd_id128_t appid = SD_ID128_NULL;
|
||||
r = sd_id128_get_invocation_app_specific(SD_ID128_MAKE(59,36,e9,92,fd,11,42,fe,87,c9,e9,b5,6c,9e,4f,04), &appid);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to get invocation ID, ignoring: %m");
|
||||
else {
|
||||
assert(!sd_id128_equal(id, appid));
|
||||
log_info("Per-App Invocation ID: " SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(appid));
|
||||
}
|
||||
|
||||
sd_id128_t appid2 = SD_ID128_NULL;
|
||||
r = sd_id128_get_invocation_app_specific(SD_ID128_MAKE(59,36,e9,92,fd,11,42,fe,87,c9,e9,b5,6c,9e,4f,05), &appid2); /* slightly different appid */
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to get invocation ID, ignoring: %m");
|
||||
else {
|
||||
assert(!sd_id128_equal(id, appid2));
|
||||
assert(!sd_id128_equal(appid, appid2));
|
||||
log_info("Per-App Invocation ID 2: " SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(appid2));
|
||||
}
|
||||
|
||||
sd_id128_t appid3 = SD_ID128_NULL;
|
||||
r = sd_id128_get_invocation_app_specific(SD_ID128_MAKE(59,36,e9,92,fd,11,42,fe,87,c9,e9,b5,6c,9e,4f,04), &appid3); /* same appid as before */
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to get invocation ID, ignoring: %m");
|
||||
else {
|
||||
assert(!sd_id128_equal(id, appid3));
|
||||
assert(sd_id128_equal(appid, appid3));
|
||||
assert(!sd_id128_equal(appid2, appid3));
|
||||
log_info("Per-App Invocation ID 3: " SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(appid3));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(benchmark_sd_id128_get_machine_app_specific) {
|
||||
|
Loading…
Reference in New Issue
Block a user