MINOR: sample: Add b64dec sample converter
Add "b64dec" as a new converter which can be used to decode a base64
encoded string into its binary representation. It performs the inverse
operation of the "base64" converter.
diff --git a/doc/configuration.txt b/doc/configuration.txt
index 7f77f4f..edd9e79 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -12410,6 +12410,10 @@
This prefix is followed by a name. The separator is a '.'. The name may only
contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
+b64dec
+ Converts (decodes) a base64 encoded input string to its binary
+ representation. It performs the inverse operation of base64().
+
base64
Converts a binary input sample to a base64 string. It is used to log or
transfer binary content in a way that can be reliably transferred (eg:
diff --git a/src/sample.c b/src/sample.c
index 71d4e32..20a59be 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -1464,6 +1464,23 @@
}
#endif
+static int sample_conv_base642bin(const struct arg *arg_p, struct sample *smp, void *private)
+{
+ struct chunk *trash = get_trash_chunk();
+ int bin_len;
+
+ trash->len = 0;
+ bin_len = base64dec(smp->data.u.str.str, smp->data.u.str.len, trash->str, trash->size);
+ if (bin_len < 0)
+ return 0;
+
+ trash->len = bin_len;
+ smp->data.u.str = *trash;
+ smp->data.type = SMP_T_BIN;
+ smp->flags &= ~SMP_F_CONST;
+ return 1;
+}
+
static int sample_conv_bin2base64(const struct arg *arg_p, struct sample *smp, void *private)
{
struct chunk *trash = get_trash_chunk();
@@ -2714,6 +2731,7 @@
{ "debug", sample_conv_debug, 0, NULL, SMP_T_ANY, SMP_T_ANY },
#endif
+ { "b64dec", sample_conv_base642bin,0, NULL, SMP_T_STR, SMP_T_BIN },
{ "base64", sample_conv_bin2base64,0, NULL, SMP_T_BIN, SMP_T_STR },
{ "upper", sample_conv_str2upper, 0, NULL, SMP_T_STR, SMP_T_STR },
{ "lower", sample_conv_str2lower, 0, NULL, SMP_T_STR, SMP_T_STR },