From: Phil Mayers
Date: Wed, 19 Sep 2012 16:21:06 +0000 (+0100)
Subject: add urlquote xlat - useful for LDAP DNs with comma, backslash
X-Git-Tag: release_3_0_0_beta1~1697^2
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F90%2Fhead;p=thirdparty%2Ffreeradius-server.git
add urlquote xlat - useful for LDAP DNs with comma, backslash
---
diff --git a/src/main/xlat.c b/src/main/xlat.c
index b8079a50026..1c8c9a5ec58 100644
--- a/src/main/xlat.c
+++ b/src/main/xlat.c
@@ -759,6 +759,52 @@ static size_t xlat_lc(UNUSED void *instance, REQUEST *request,
return strlen(out);
}
+static size_t xlat_urlquote(UNUSED void *instance, REQUEST *request,
+ const char *fmt, char *out, size_t outlen,
+ UNUSED RADIUS_ESCAPE_STRING func)
+{
+ char *in, *o;
+ char buffer[1024];
+
+ if (outlen <= 1) return 0;
+
+ if (!radius_xlat(buffer, sizeof(buffer), fmt, request, func)) {
+ *out = '\0';
+ return 0;
+ }
+
+ in = buffer;
+ o = out;
+
+ while (*in && outlen > 1) {
+ if (isalnum(*in)) {
+ *o++ = *in++;
+ outlen--;
+ continue;
+ }
+
+ switch (*in) {
+ case '-':
+ case '_':
+ case '.':
+ case '~':
+ *o++ = *in++;
+ outlen--;
+ break;
+ default:
+ if (outlen <= 3)
+ break;
+ snprintf(o, 4, "%%%02x", *in++);
+ outlen -= 3;
+ o += 3;
+ }
+ }
+
+ *o = '\0';
+
+ return strlen(out);
+}
+
/**
* @brief Convert a string to uppercase
@@ -893,6 +939,7 @@ int xlat_register(const char *module, RAD_XLAT_FUNC func, void *instance)
XLAT_REGISTER(hex);
XLAT_REGISTER(string);
XLAT_REGISTER(module);
+ XLAT_REGISTER(urlquote);
#ifdef HAVE_REGEX_H
/*