]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-id128: export sd_id128_get_app_specific()
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 26 Aug 2023 11:03:38 +0000 (13:03 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 29 Aug 2023 14:06:47 +0000 (17:06 +0300)
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
src/libsystemd/sd-id128/sd-id128.c
src/systemd/sd-id128.h
src/test/test-id128.c

index ea13e02719b86cc386fe41563675976419a4002e..56a8831f0fec07c6c8591a695bd327e66ec31df2 100644 (file)
@@ -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;
index be6da9c88aafa27b9e396aaba8a73f0f85bda818..adc73e4fdcd372cddb43194db06333e5e876baea 100644 (file)
@@ -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);
 }
index 3303c374cee7f744ac6f137fb176d98c618f735a..a984a9d85e15ca37b989b83a2a0a46184d8b5c15 100644 (file)
@@ -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);
 
index 58dc88110e7b1f9c601182f9a8c29ec1c41b00a8..912e8c9aaa3f1a0b97e1248a239795f8c610588e 100644 (file)
@@ -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);