From: Zbigniew Jędrzejewski-Szmek Date: Sat, 26 Aug 2023 11:03:38 +0000 (+0200) Subject: sd-id128: export sd_id128_get_app_specific() X-Git-Tag: v255-rc1~598^2~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=62b4bee9bc2b079ee966da68d5be77a74c48cea7;p=thirdparty%2Fsystemd.git 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. --- 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);