From: Arran Cudbard-Bell Date: Wed, 17 Oct 2012 15:51:40 +0000 (+0100) Subject: Add base64tohex to allow values to be written to IP addresses, integers etc X-Git-Tag: release_2_2_1~247 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f1c71a4b67aae8d9ab060f2ae974f14642f967aa;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 4a111bd9216..9e2398bce4d 100644 --- a/src/modules/rlm_expr/rlm_expr.c +++ b/src/modules/rlm_expr/rlm_expr.c @@ -567,11 +567,11 @@ 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, - char *fmt, char *out, size_t outlen, - UNUSED RADIUS_ESCAPE_STRING func) +static size_t base64_xlat(UNUSED void *instance, REQUEST *request, + char *fmt, char *out, size_t outlen, + UNUSED RADIUS_ESCAPE_STRING func) { size_t len; char buffer[1024]; @@ -588,17 +588,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, char *fmt, char *out, size_t outlen, UNUSED RADIUS_ESCAPE_STRING func) { @@ -627,23 +627,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; @@ -688,8 +679,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