]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
define escaping rules for secrets
authorAlan T. DeKok <aland@freeradius.org>
Fri, 21 Jul 2023 17:37:30 +0000 (13:37 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 21 Jul 2023 17:37:30 +0000 (13:37 -0400)
Through the simple expedient of mashing all characters to '.'

The length of the secret still leaks, but that's not too bad.

As escaping is only done for data types "string" and "octets",
other secret values will not be escaped.  Perhaps we can fix that
later if we care.

src/lib/util/value.c
src/lib/util/value.h

index ba53c00c214ab445a0540ca712b64351ffa9dc51..b64afa1bdf5190e0c6d580140bad0f145091e2d2 100644 (file)
@@ -369,6 +369,22 @@ fr_sbuff_escape_rules_t fr_value_escape_double = {
        .do_oct = true
 };
 
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wgnu-designator"
+#endif
+
+/** Escape secret fields by simply mashing all data to '.'
+ *
+ *  The length of the secret still leaks, but that is likely fine.  Fixing that is more work.
+ *
+ */
+fr_sbuff_escape_rules_t fr_value_escape_secret = {
+       .name = "secret",
+       .subs = {
+               [ 0 ... 255 ] = '.',
+       },
+};
+
 fr_sbuff_escape_rules_t fr_value_escape_single = {
        .name = "single",
        .chr = '\\',
index 39cf43df315b5996628b798e51d5fb5851612d24..eee1cbbf549b1f009e862a776bb3eb94f08a91d1 100644 (file)
@@ -81,6 +81,7 @@ extern fr_sbuff_escape_rules_t fr_value_escape_double;
 extern fr_sbuff_escape_rules_t fr_value_escape_single;
 extern fr_sbuff_escape_rules_t fr_value_escape_solidus;
 extern fr_sbuff_escape_rules_t fr_value_escape_backtick;
+extern fr_sbuff_escape_rules_t fr_value_escape_secret;
 extern fr_sbuff_escape_rules_t *fr_value_escape_by_quote[T_TOKEN_LAST];
 extern fr_sbuff_escape_rules_t *fr_value_escape_by_char[UINT8_MAX + 1];