]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: sample: Add b64dec sample converter
authorHolger Just <hello@holgerjust.de>
Fri, 5 May 2017 22:56:53 +0000 (00:56 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 12 May 2017 13:56:52 +0000 (15:56 +0200)
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.

doc/configuration.txt
src/sample.c

index 7f77f4ff78e7950fcffdbd32f50086c5e0dc9f7b..edd9e79ba49fc5db169ac211b93eb2d15baac241 100644 (file)
@@ -12410,6 +12410,10 @@ and(<value>)
   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:
index 71d4e32a655a6c40cbd02640021aa6cac665533c..20a59bea9876945957515befa50d05a1063ce1b3 100644 (file)
@@ -1464,6 +1464,23 @@ static int sample_conv_debug(const struct arg *arg_p, struct sample *smp, void *
 }
 #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 @@ static struct sample_conv_kw_list sample_conv_kws = {ILH, {
        { "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  },