From eb08291010788f2097740ab80b3e3738f34bc27f Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Thu, 10 Oct 2019 12:57:08 +0300 Subject: [PATCH] lib: var-expand - Support base64url for hash format --- src/lib/test-var-expand.c | 1 + src/lib/var-expand.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/lib/test-var-expand.c b/src/lib/test-var-expand.c index 558ef76b86..77cf6589df 100644 --- a/src/lib/test-var-expand.c +++ b/src/lib/test-var-expand.c @@ -289,6 +289,7 @@ static void test_var_expand_extensions(void) { "rounds,salt,expand: %{sha1;rounds=1000,salt=%{other-value}:value} %{other-value}", "rounds,salt,expand: 49a598ee110af615e175f2e4511cc5d7ccff96ab other-example" }, { "format: %4.8{sha1:value}", "format: 9c272973" }, { "base64: %{sha1;format=base64:value}", "base64: w0mcJylzCn+AfvuGdqkty2+KP48=" }, + { "base64url: %{sha1;format=base64url:value}", "base64url: w0mcJylzCn-AfvuGdqkty2-KP48" }, }; static const struct var_expand_func_table func_table[] = { diff --git a/src/lib/var-expand.c b/src/lib/var-expand.c index 7ddaec0a63..c0c0ed2d5b 100644 --- a/src/lib/var-expand.c +++ b/src/lib/var-expand.c @@ -201,7 +201,8 @@ var_expand_hash(struct var_expand_context *ctx, enum { FORMAT_HEX, FORMAT_HEX_UC, - FORMAT_BASE64 + FORMAT_BASE64, + FORMAT_BASE64_URL, } format = FORMAT_HEX; const char *p = strchr(key, ';'); @@ -289,6 +290,8 @@ var_expand_hash(struct var_expand_context *ctx, format = FORMAT_HEX_UC; } else if (strcmp(value, "base64") == 0) { format = FORMAT_BASE64; + } else if (strcmp(value, "base64url") == 0) { + format = FORMAT_BASE64_URL; } else { *error_r = t_strdup_printf( "Cannot parse hash arguments:" @@ -344,6 +347,13 @@ var_expand_hash(struct var_expand_context *ctx, *result_r = str_c(dest); return 1; } + case FORMAT_BASE64_URL: { + string_t *dest = t_str_new(64); + base64url_encode(BASE64_ENCODE_FLAG_NO_PADDING, 0, + tmp->data, tmp->used, dest); + *result_r = str_c(dest); + return 1; + } } i_unreached(); -- 2.47.3