From: Arran Cudbard-Bell Date: Wed, 17 Oct 2012 14:59:47 +0000 (+0100) Subject: Add base64tohex to allow values to be written to IP addresses, integers etc X-Git-Tag: release_3_0_0_beta1~1660^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad414a6e258d6b17db7615205c7679a9dc2cae4e;p=thirdparty%2Ffreeradius-server.git Add base64tohex to allow values to be written to IP addresses, integers etc Remove base64tostr (will add tostring expansion later) Rename strtobase64 to tobase64 --- diff --git a/src/modules/rlm_expr/rlm_expr.c b/src/modules/rlm_expr/rlm_expr.c index 7e2438d731e..b8ad1c5b17e 100644 --- a/src/modules/rlm_expr/rlm_expr.c +++ b/src/modules/rlm_expr/rlm_expr.c @@ -620,10 +620,10 @@ static size_t md5_xlat(UNUSED void *instance, REQUEST *request, /** * @brief Encode string as base64 * - * Example: "%{strtobase64:foo}" == "Zm9v" + * Example: "%{tobase64:foo}" == "Zm9v" */ -static size_t base64_encode_xlat(UNUSED void *instance, REQUEST *request, - const char *fmt, char *out, size_t outlen) +static size_t base64_xlat(UNUSED void *instance, REQUEST *request, + const char *fmt, char *out, size_t outlen) { size_t len; char buffer[1024]; @@ -640,17 +640,17 @@ static size_t base64_encode_xlat(UNUSED void *instance, REQUEST *request, return 0; } - fr_base64_encode(buffer, len, out, outlen); + fr_base64_encode((uint8_t *) buffer, len, out, outlen); return strlen(out); } /** - * @brief Decode base64 string + * @brief Convert base64 to hex * - * Example: "%{base64tostr:Zm9v}" == "foo" + * Example: "%{base64tohex:Zm9v}" == "666f6f" */ -static size_t base64_decode_xlat(UNUSED void *instance, REQUEST *request, +static size_t base64_to_hex_xlat(UNUSED void *instance, REQUEST *request, const char *fmt, char *out, size_t outlen) { char *p; @@ -678,23 +678,14 @@ static size_t base64_decode_xlat(UNUSED void *instance, REQUEST *request, p = decbuf; while ((declen-- > 0) && (--freespace > 0)) { - /* - * Non-printable characters get replaced with their - * mime-encoded equivalents. - */ - if (*p > 31) { - *out++ = *p++; - continue; - } - if (freespace < 3) break; - snprintf(out, 4, "=%02X", *p++); + snprintf(out, 3, "%02x", *p++); /* Already decremented */ - freespace -= 2; - out += 3; + freespace -= 1; + out += 2; } return outlen - freespace; @@ -760,8 +751,8 @@ static int expr_instantiate(CONF_SECTION *conf, void **instance) xlat_register("tolower", lc_xlat, inst); xlat_register("toupper", uc_xlat, inst); xlat_register("md5", md5_xlat, inst); - xlat_register("strtobase64", base64_encode_xlat, inst); - xlat_register("base64tostr", base64_decode_xlat, inst); + xlat_register("tobase64", base64_xlat, inst); + xlat_register("base64tohex", base64_to_hex_xlat, inst); /* * Initialize various paircompare functions