From 62b4bee9bc2b079ee966da68d5be77a74c48cea7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 26 Aug 2023 13:03:38 +0200 Subject: [PATCH] sd-id128: export sd_id128_get_app_specific() We exported sd_id128_get_machine_app_specific() and sd_id128_get_boot_app_specific(). But those operate on the current machine, and sometimes the user might want to do the same calculation for a different machine, or an earlier boot, etc. We expose the underlying implementation to make this easy. --- src/libsystemd/libsystemd.sym | 5 +++++ src/libsystemd/sd-id128/sd-id128.c | 8 ++++---- src/systemd/sd-id128.h | 1 + src/test/test-id128.c | 4 ++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index ea13e02719b..56a8831f0fe 100644 --- a/src/libsystemd/libsystemd.sym +++ b/src/libsystemd/libsystemd.sym @@ -828,3 +828,8 @@ global: sd_journal_step_one; sd_session_get_leader; } LIBSYSTEMD_253; + +LIBSYSTEMD_255 { +global: + sd_id128_get_app_specific; +} LIBSYSTEMD_254; diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c index be6da9c88aa..adc73e4fdcd 100644 --- a/src/libsystemd/sd-id128/sd-id128.c +++ b/src/libsystemd/sd-id128/sd-id128.c @@ -338,14 +338,14 @@ _public_ int sd_id128_randomize(sd_id128_t *ret) { return 0; } -static int get_app_specific(sd_id128_t base, sd_id128_t app_id, sd_id128_t *ret) { +_public_ int sd_id128_get_app_specific(sd_id128_t base, sd_id128_t app_id, sd_id128_t *ret) { assert_cc(sizeof(sd_id128_t) < SHA256_DIGEST_SIZE); /* Check that we don't need to pad with zeros. */ union { uint8_t hmac[SHA256_DIGEST_SIZE]; sd_id128_t result; } buf; - assert(ret); + assert_return(ret, -EINVAL); hmac_sha256(&base, sizeof(base), &app_id, sizeof(app_id), buf.hmac); @@ -364,7 +364,7 @@ _public_ int sd_id128_get_machine_app_specific(sd_id128_t app_id, sd_id128_t *re if (r < 0) return r; - return get_app_specific(id, app_id, ret); + return sd_id128_get_app_specific(id, app_id, ret); } _public_ int sd_id128_get_boot_app_specific(sd_id128_t app_id, sd_id128_t *ret) { @@ -377,5 +377,5 @@ _public_ int sd_id128_get_boot_app_specific(sd_id128_t app_id, sd_id128_t *ret) if (r < 0) return r; - return get_app_specific(id, app_id, ret); + return sd_id128_get_app_specific(id, app_id, ret); } diff --git a/src/systemd/sd-id128.h b/src/systemd/sd-id128.h index 3303c374cee..a984a9d85e1 100644 --- a/src/systemd/sd-id128.h +++ b/src/systemd/sd-id128.h @@ -50,6 +50,7 @@ int sd_id128_get_machine(sd_id128_t *ret); int sd_id128_get_boot(sd_id128_t *ret); 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); diff --git a/src/test/test-id128.c b/src/test/test-id128.c index 58dc88110e7..912e8c9aaa3 100644 --- a/src/test/test-id128.c +++ b/src/test/test-id128.c @@ -172,6 +172,10 @@ TEST(id128) { assert_se(lseek(fd, 0, SEEK_SET) == 0); assert_se(id128_read_fd(fd, ID128_FORMAT_ANY, NULL) == -EUCLEAN); + assert_se(sd_id128_get_app_specific(SD_ID128_MAKE(51,df,0b,4b,c3,b0,4c,97,80,e2,99,b9,8c,a3,73,b8), + SD_ID128_MAKE(f0,3d,aa,eb,1c,33,4b,43,a7,32,17,29,44,bf,77,2e), &id) >= 0); + assert_se(sd_id128_equal(id, SD_ID128_MAKE(1d,ee,59,54,e7,5c,4d,6f,b9,6c,c6,c0,4c,a1,8a,86))); + if (sd_booted() > 0 && sd_id128_get_machine(NULL) >= 0) { assert_se(sd_id128_get_machine_app_specific(SD_ID128_MAKE(f0,3d,aa,eb,1c,33,4b,43,a7,32,17,29,44,bf,77,2e), &id) >= 0); assert_se(sd_id128_get_machine_app_specific(SD_ID128_MAKE(f0,3d,aa,eb,1c,33,4b,43,a7,32,17,29,44,bf,77,2e), &id2) >= 0); -- 2.47.3