From: Aki Tuomi Date: Thu, 10 Oct 2019 09:57:08 +0000 (+0300) Subject: lib: var-expand - Support base64url for hash format X-Git-Tag: 2.4.0~4706 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eb08291010788f2097740ab80b3e3738f34bc27f;p=thirdparty%2Fdovecot%2Fcore.git lib: var-expand - Support base64url for hash format --- 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();