From: Tim Duesterhus Date: Fri, 19 Apr 2024 19:01:27 +0000 (+0200) Subject: MINOR: Add support for UUIDv7 to the `uuid` sample fetch X-Git-Tag: v3.0-dev9~70 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3ef60012ae700f6cf56830063771fd1600f876b7;p=thirdparty%2Fhaproxy.git MINOR: Add support for UUIDv7 to the `uuid` sample fetch This adds support for UUIDv7 to the existing `uuid` sample fetch that was added in 8a694b859cf98f8b0855b4aa5a50ebf64b501215. --- diff --git a/doc/configuration.txt b/doc/configuration.txt index d2d654c191..16094c194a 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -21306,7 +21306,8 @@ txn.sess_term_state : string uuid([]) : string Returns a UUID following the RFC4122 standard. If the version is not specified, a UUID version 4 (fully random) is returned. - Currently, only version 4 is supported. + + Versions 4 and 7 are supported. var([,]) : undefined Returns a variable with the stored type. If the variable is not set, the diff --git a/src/sample.c b/src/sample.c index 8daa92424d..43ab003529 100644 --- a/src/sample.c +++ b/src/sample.c @@ -4781,10 +4781,15 @@ static int smp_check_uuid(struct arg *args, char **err) if (!args[0].type) { args[0].type = ARGT_SINT; args[0].data.sint = 4; - } - else if (args[0].data.sint != 4) { - memprintf(err, "Unsupported UUID version: '%lld'", args[0].data.sint); - return 0; + } else { + switch (args[0].data.sint) { + case 4: + case 7: + break; + default: + memprintf(err, "Unsupported UUID version: '%lld'", args[0].data.sint); + return 0; + } } return 1; @@ -4793,16 +4798,29 @@ static int smp_check_uuid(struct arg *args, char **err) // Generate a RFC4122 UUID (default is v4 = fully random) static int smp_fetch_uuid(const struct arg *args, struct sample *smp, const char *kw, void *private) { - if (args[0].data.sint == 4 || !args[0].type) { + long long int type = -1; + + if (!args[0].type) { + type = 4; + } else { + type = args[0].data.sint; + } + + switch (type) { + case 4: ha_generate_uuid_v4(&trash); - smp->data.type = SMP_T_STR; - smp->flags = SMP_F_VOL_TEST | SMP_F_MAY_CHANGE; - smp->data.u.str = trash; - return 1; + break; + case 7: + ha_generate_uuid_v7(&trash); + break; + default: + return 0; } - // more implementations of other uuid formats possible here - return 0; + smp->data.type = SMP_T_STR; + smp->flags = SMP_F_VOL_TEST | SMP_F_MAY_CHANGE; + smp->data.u.str = trash; + return 1; } /* Check if QUIC support was compiled and was not disabled by "no-quic" global option */