Delete trailing whitespace.
[freeradius.git] / src / main / xlat.c
index b299f30..f2528ed 100644 (file)
 #include <freeradius-devel/ident.h>
 RCSID("$Id$")
 
-#include       <freeradius-devel/autoconf.h>
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <ctype.h>
-
 #include       <freeradius-devel/radiusd.h>
-
 #include       <freeradius-devel/rad_assert.h>
 
+#include       <ctype.h>
+
 typedef struct xlat_t {
        char            module[MAX_STRING_LEN];
        int             length;
@@ -175,7 +169,7 @@ static int xlat_packet(void *instance, REQUEST *request,
                /*
                 *      %{Attribute-Name[*]} returns ALL of the
                 *      the attributes, separated by a newline.
-                */             
+                */
                if ((p[1] == '*') && (p[2] == ']')) {
                        int total = 0;
 
@@ -187,7 +181,7 @@ static int xlat_packet(void *instance, REQUEST *request,
                                total += count + 1;
                                outlen -= (count + 1);
                                out += count;
-                               
+
                                *(out++) = '\n';
 
                                if (outlen == 0) break;
@@ -195,7 +189,7 @@ static int xlat_packet(void *instance, REQUEST *request,
 
                        return total;
                }
-               
+
                count = atoi(p + 1);
 
                /*
@@ -244,7 +238,7 @@ static int xlat_packet(void *instance, REQUEST *request,
                        case PW_PACKET_TYPE:
                        {
                                DICT_VALUE *dval;
-                               
+
                                dval = dict_valbyattr(da->attr, packet->code);
                                if (dval) {
                                        snprintf(out, outlen, "%s", dval->name);
@@ -261,25 +255,25 @@ static int xlat_packet(void *instance, REQUEST *request,
                                        return 0;
                                }
                                localvp.attribute = da->attr;
-                               localvp.lvalue = packet->src_ipaddr.ipaddr.ip4addr.s_addr;
+                               localvp.vp_ipaddr = packet->src_ipaddr.ipaddr.ip4addr.s_addr;
                                break;
-                       
+
                        case PW_PACKET_DST_IP_ADDRESS:
                                if (packet->dst_ipaddr.af != AF_INET) {
                                        return 0;
                                }
                                localvp.attribute = da->attr;
-                               localvp.lvalue = packet->dst_ipaddr.ipaddr.ip4addr.s_addr;
+                               localvp.vp_ipaddr = packet->dst_ipaddr.ipaddr.ip4addr.s_addr;
                                break;
-                       
+
                        case PW_PACKET_SRC_PORT:
                                localvp.attribute = da->attr;
-                               localvp.lvalue = packet->src_port;
+                               localvp.vp_integer = packet->src_port;
                                break;
-                       
+
                        case PW_PACKET_DST_PORT:
                                localvp.attribute = da->attr;
-                               localvp.lvalue = packet->dst_port;
+                               localvp.vp_integer = packet->dst_port;
                                break;
 
                        case PW_PACKET_AUTHENTICATION_VECTOR:
@@ -299,7 +293,7 @@ static int xlat_packet(void *instance, REQUEST *request,
                                        strlcpy(out, "server_core", outlen);
                                }
                                return strlen(out);
-                       
+
                        case PW_PACKET_SRC_IPV6_ADDRESS:
                                if (packet->src_ipaddr.af != AF_INET6) {
                                        return 0;
@@ -309,7 +303,7 @@ static int xlat_packet(void *instance, REQUEST *request,
                                       &packet->src_ipaddr.ipaddr.ip6addr,
                                       sizeof(packet->src_ipaddr.ipaddr.ip6addr));
                                break;
-                       
+
                        case PW_PACKET_DST_IPV6_ADDRESS:
                                if (packet->dst_ipaddr.af != AF_INET6) {
                                        return 0;
@@ -319,14 +313,14 @@ static int xlat_packet(void *instance, REQUEST *request,
                                       &packet->dst_ipaddr.ipaddr.ip6addr,
                                       sizeof(packet->dst_ipaddr.ipaddr.ip6addr));
                                break;
-                       
+
                        case PW_SERVER_IDENTITY:
                                if (!request->listener || !request->listener->identity) return 0;
 
                                snprintf(out, outlen, "%s", request->listener->identity);
                                return strlen(out);
                                break;
-                       
+
                        default:
                                return 0; /* not found */
                                break;
@@ -367,7 +361,7 @@ static int xlat_regex(void *instance, REQUEST *request,
         */
        fmt = fmt;              /* -Wunused */
        func = func;            /* -Wunused FIXME: do escaping? */
-       
+
        regex = request_data_reference(request, request,
                                 REQUEST_DATA_REGEX | *(int *)instance);
        if (!regex) return 0;
@@ -381,6 +375,7 @@ static int xlat_regex(void *instance, REQUEST *request,
 }
 #endif                         /* HAVE_REGEX_H */
 
+
 /*
  *     Compare two xlat_t structs, based ONLY on the module name.
  */
@@ -553,7 +548,7 @@ void xlat_free(void)
  *     Decode an attribute name into a string.
  */
 static void decode_attribute(const char **from, char **to, int freespace,
-                            int *open, REQUEST *request,
+                            int *open_p, REQUEST *request,
                             RADIUS_ESCAPE_STRING func)
 {
        int     do_length = 0;
@@ -563,8 +558,9 @@ static void decode_attribute(const char **from, char **to, int freespace,
        const char *p;
        char *q, *pa;
        int found=0, retlen=0;
-       int openbraces = *open;
+       int openbraces = *open_p;
        const xlat_t *c;
+       int spaces = FALSE;
 
        p = *from;
        q = *to;
@@ -611,7 +607,7 @@ static void decode_attribute(const char **from, char **to, int freespace,
                 */
        } else if (*p == '}') {
                openbraces--;
-               rad_assert(openbraces == *open);
+               rad_assert(openbraces == *open_p);
 
                p++;
                xlat_string = xlat_name;
@@ -621,10 +617,10 @@ static void decode_attribute(const char **from, char **to, int freespace,
                p += 2;
                xlat_string = xlat_name;
                goto do_xlat;
-               
+
        } else {      /* module name, followed by per-module string */
                int stop = 0;
-               int delimitbrace = *open;
+               int delimitbrace = *open_p;
 
                rad_assert(*p == ':');
                p++;                    /* skip the ':' */
@@ -639,17 +635,18 @@ static void decode_attribute(const char **from, char **to, int freespace,
                        openbraces++;
                        p++;
                }
-               
+
                xlat_string = rad_malloc(strlen(p) + 1); /* always returns */
                free_xlat_string = TRUE;
                pa = xlat_string;
-               
+
                /*
                 *  Copy over the rest of the string, which is per-module
                 *  data.
                 */
                while (*p && !stop) {
                        switch(*p) {
+
                                /*
                                 *      What the heck is this supposed
                                 *      to be doing?
@@ -659,6 +656,13 @@ static void decode_attribute(const char **from, char **to, int freespace,
                                *pa++ = *p++;
                                break;
 
+                       case ':':
+                               if (!spaces && p[1] == '-') {
+                                       p += 2;
+                                       stop = 1;
+                                       break;
+                               }
+
                                /*
                                 *      This is pretty hokey...  we
                                 *      should use the functions in
@@ -678,7 +682,12 @@ static void decode_attribute(const char **from, char **to, int freespace,
                                        *pa++ = *p++;
                                }
                                break;
-                               
+
+                       case ' ':
+                       case '\t':
+                               spaces = TRUE;
+                               /* FALL-THROUGH */
+
                        default:
                                *pa++ = *p++;
                                break;
@@ -696,7 +705,7 @@ static void decode_attribute(const char **from, char **to, int freespace,
                                p += 2;
                        }
                }
-               
+
                /*
                 *      Look up almost everything in the new tree of xlat
                 *      functions.  This makes it a little quicker...
@@ -732,7 +741,7 @@ static void decode_attribute(const char **from, char **to, int freespace,
 
                q += retlen;
 
-               while((*p != '\0') && (openbraces > *open)) {
+               while((*p != '\0') && (openbraces > *open_p)) {
                        /*
                         *      Handle escapes outside of the loop.
                         */
@@ -761,11 +770,11 @@ static void decode_attribute(const char **from, char **to, int freespace,
                        p++;    /* skip the character */
                }
        }
-       
+
        done:
        if (free_xlat_string) free(xlat_string);
 
-       *open = openbraces;
+       *open_p = openbraces;
        *from = p;
        *to = q;
 }
@@ -927,7 +936,7 @@ int radius_xlat(char *out, int outlen, const char *fmt,
                                break;
                        case 'l': /* request timestamp */
                                snprintf(tmpdt, sizeof(tmpdt), "%lu",
-                                        (unsigned long) request->timestamp);
+                                        (unsigned long) request->received.tv_sec);
                                strlcpy(q,tmpdt,freespace);
                                q += strlen(q);
                                p++;
@@ -966,12 +975,12 @@ int radius_xlat(char *out, int outlen, const char *fmt,
                                p++;
                                break;
                        case 'A': /* radacct_dir */
-                               strlcpy(q,radacct_dir,freespace-1);
+                               strlcpy(q,radacct_dir,freespace);
                                q += strlen(q);
                                p++;
                                break;
                        case 'C': /* ClientName */
-                               strlcpy(q,client_name_old(&request->packet->src_ipaddr),freespace-1);
+                               strlcpy(q,client_name_old(&request->packet->src_ipaddr),freespace);
                                q += strlen(q);
                                p++;
                                break;
@@ -994,7 +1003,7 @@ int radius_xlat(char *out, int outlen, const char *fmt,
                                p++;
                                break;
                        case 'L': /* radlog_dir */
-                               strlcpy(q,radlog_dir,freespace-1);
+                               strlcpy(q,radlog_dir,freespace);
                                q += strlen(q);
                                p++;
                                break;
@@ -1003,7 +1012,7 @@ int radius_xlat(char *out, int outlen, const char *fmt,
                                p++;
                                break;
                        case 'R': /* radius_dir */
-                               strlcpy(q,radius_dir,freespace-1);
+                               strlcpy(q,radius_dir,freespace);
                                q += strlen(q);
                                p++;
                                break;
@@ -1030,10 +1039,7 @@ int radius_xlat(char *out, int outlen, const char *fmt,
                                p++;
                                break;
                        case 'V': /* Request-Authenticator */
-                               if (request->packet->verified)
-                                       strlcpy(q,"Verified",freespace-1);
-                               else
-                                       strlcpy(q,"None",freespace-1);
+                               strlcpy(q,"Verified",freespace);
                                q += strlen(q);
                                p++;
                                break;