]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add base64tohex to allow values to be written to IP addresses, integers etc
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 17 Oct 2012 15:51:40 +0000 (16:51 +0100)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 17 Oct 2012 15:52:45 +0000 (16:52 +0100)
Remove base64tostr (will add tostring expansion later)

Rename strtobase64 to tobase64

src/modules/rlm_expr/rlm_expr.c

index 4a111bd921634bedc30964b54b81570c46a04f7d..9e2398bce4d4da44b035c5082594778fa416c5f3 100644 (file)
@@ -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