diff --git a/man/sd_id128_get_machine.xml b/man/sd_id128_get_machine.xml index fc13ae50f49..31e4b02d9bb 100644 --- a/man/sd_id128_get_machine.xml +++ b/man/sd_id128_get_machine.xml @@ -198,7 +198,10 @@ -ENXIO Returned by sd_id128_get_invocation() if no invocation ID is - set. + set. Also returned by sd_id128_get_app_specific(), + sd_id128_get_machine_app_specific(), and + sd_id128_get_boot_app_specific() when the app_id + parameter is all zeros. diff --git a/src/id128/id128.c b/src/id128/id128.c index 29cd2e2dc0e..18e08808057 100644 --- a/src/id128/id128.c +++ b/src/id128/id128.c @@ -235,7 +235,9 @@ static int parse_argv(int argc, char *argv[]) { break; case 'a': - r = sd_id128_from_string(optarg, &arg_app); + r = id128_from_string_nonzero(optarg, &arg_app); + if (r == -ENXIO) + return log_error_errno(r, "Application ID cannot be all zeros."); if (r < 0) return log_error_errno(r, "Failed to parse \"%s\" as application-ID: %m", optarg); break; diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c index adc73e4fdcd..9fda79ae266 100644 --- a/src/libsystemd/sd-id128/sd-id128.c +++ b/src/libsystemd/sd-id128/sd-id128.c @@ -346,6 +346,7 @@ _public_ int sd_id128_get_app_specific(sd_id128_t base, sd_id128_t app_id, sd_id } buf; assert_return(ret, -EINVAL); + assert_return(!sd_id128_is_null(app_id), -ENXIO); hmac_sha256(&base, sizeof(base), &app_id, sizeof(app_id), buf.hmac); diff --git a/src/test/test-id128.c b/src/test/test-id128.c index 10c061b917a..ae7df27d8f9 100644 --- a/src/test/test-id128.c +++ b/src/test/test-id128.c @@ -192,6 +192,10 @@ TEST(id128) { assert_se(sd_id128_get_machine_app_specific(SD_ID128_MAKE(51,df,0b,4b,c3,b0,4c,97,80,e2,99,b9,8c,a3,73,b8), &id2) >= 0); assert_se(!sd_id128_equal(id, id2)); } + + /* Check return values */ + assert_se(sd_id128_get_app_specific(SD_ID128_ALLF, SD_ID128_NULL, &id) == -ENXIO); + assert_se(sd_id128_get_app_specific(SD_ID128_NULL, SD_ID128_ALLF, &id) == 0); } TEST(sd_id128_get_invocation) {