/*
* %{Attribute-Name[*]} returns ALL of the
* the attributes, separated by a newline.
- */
+ */
if ((p[1] == '*') && (p[2] == ']')) {
int total = 0;
total += count + 1;
outlen -= (count + 1);
out += count;
-
+
*(out++) = '\n';
if (outlen == 0) break;
return total;
}
-
+
count = atoi(p + 1);
/*
case PW_PACKET_TYPE:
{
DICT_VALUE *dval;
-
+
dval = dict_valbyattr(da->attr, packet->code);
if (dval) {
snprintf(out, outlen, "%s", dval->name);
localvp.attribute = da->attr;
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.vp_ipaddr = packet->dst_ipaddr.ipaddr.ip4addr.s_addr;
break;
-
+
case PW_PACKET_SRC_PORT:
localvp.attribute = da->attr;
localvp.vp_integer = packet->src_port;
break;
-
+
case PW_PACKET_DST_PORT:
localvp.attribute = da->attr;
localvp.vp_integer = packet->dst_port;
strlcpy(out, "server_core", outlen);
}
return strlen(out);
-
+
case PW_PACKET_SRC_IPV6_ADDRESS:
if (packet->src_ipaddr.af != AF_INET6) {
return 0;
&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;
&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;
*/
fmt = fmt; /* -Wunused */
func = func; /* -Wunused FIXME: do escaping? */
-
+
regex = request_data_reference(request, request,
REQUEST_DATA_REGEX | *(int *)instance);
if (!regex) return 0;
}
#endif /* HAVE_REGEX_H */
+
/*
* Compare two xlat_t structs, based ONLY on the module name.
*/
p += 2;
xlat_string = xlat_name;
goto do_xlat;
-
+
} else { /* module name, followed by per-module string */
int stop = 0;
int delimitbrace = *open_p;
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.
*pa++ = *p++;
}
break;
-
+
case ' ':
case '\t':
spaces = TRUE;
p += 2;
}
}
-
+
/*
* Look up almost everything in the new tree of xlat
* functions. This makes it a little quicker...
p++; /* skip the character */
}
}
-
+
done:
if (free_xlat_string) free(xlat_string);
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++;
p++;
break;
case 'V': /* Request-Authenticator */
- if (request->packet->verified)
- strlcpy(q,"Verified",freespace);
- else
- strlcpy(q,"None",freespace);
+ strlcpy(q,"Verified",freespace);
q += strlen(q);
p++;
break;