]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Added %{integer:...}
authorAlan T. DeKok <aland@freeradius.org>
Tue, 21 Dec 2010 09:01:16 +0000 (10:01 +0100)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 21 Dec 2010 09:02:41 +0000 (10:02 +0100)
Which takes an argument like %{integer:Event-Timestamp}, and prints
it as an integer, bypassing all of the named enumeration and date/time
expansion

src/main/xlat.c

index 023b2dc3ff853aa07ee64062505f92afd26bf8f4..1331df30f654c26dd2cbbbb4432d1ab3ff7eb3ad 100644 (file)
@@ -409,6 +409,34 @@ static size_t xlat_packet(void *instance, REQUEST *request,
        return valuepair2str(out, outlen, vp, da->type, func);
 }
 
+/*
+ *     Dynamically translate for check:, request:, reply:, etc.
+ */
+static size_t xlat_integer(void *instance, REQUEST *request,
+                          char *fmt, char *out, size_t outlen,
+                          RADIUS_ESCAPE_STRING func)
+{
+       VALUE_PAIR *vp;
+
+       while (isspace((int) *fmt) *fmt++;
+
+       if (!radius_get_vp(request, fmt, &vp)) {
+               *out = '\0';
+               return 0;
+       }
+
+       if ((vp->type != PW_TYPE_IPADDR) &&
+           (vp->type != PW_TYPE_INTEGER) &&
+           (vp->type != PW_TYPE_SHORT) &&
+           (vp->type != PW_TYPE_BYTE) &&
+           (vp->type != PW_TYPE_DATE)) {
+               *out = '\0';
+               return 0;
+       }
+
+       return snprintf(out, outlen, "%u", vp->vp_integer);
+}
+
 #ifdef HAVE_REGEX_H
 /*
  *     Pull %{0} to %{8} out of the packet.
@@ -644,6 +672,11 @@ int xlat_register(const char *module, RAD_XLAT_FUNC func, void *instance)
                rad_assert(c != NULL);
                c->internal = TRUE;
 
+               xlat_register("integer", xlat_integer, "");
+               c = xlat_find("integer");
+               rad_assert(c != NULL);
+               c->internal = TRUE;
+
 #ifdef HAVE_REGEX_H
                /*
                 *      Register xlat's for regexes.