-* Wed Aug 2 2006 Brendan O'Dea <bod@optus.net> 2.2.0
+* Thu Aug 3 2006 Brendan O'Dea <bod@optus.net> 2.2.0
- Only poll clifd if successfully bound.
- Add "Practical VPNs" document from Liran Tal as Docs/vpn .
- Add Multilink support from Khaled Al Hamwi.
AVP is not present.
- Add radius_bind_{min,max} to simplify firewalling of RADIUS ports.
- Fix sign problem with reporting of unknown RADIUS VSAs.
+- Allow DNS servers to be specified either using the old or new
+ vendor-specific Ascend formats.
* Tue Apr 18 2006 Brendan O'Dea <bod@optus.net> 2.1.18
- Don't shutdown on TerminateReq, wait for CDN.
// L2TPNS Radius Stuff
-char const *cvs_id_radius = "$Id: radius.c,v 1.54 2006/08/02 13:35:39 bodea Exp $";
+char const *cvs_id_radius = "$Id: radius.c,v 1.55 2006/08/02 14:17:30 bodea Exp $";
#include <time.h>
#include <stdio.h>
uint8_t *e = buf + len;
for (; p + 2 <= e && p[1] && p + p[1] <= e; p += p[1])
{
+ if (*p == 26 && p[1] >= 7)
+ {
+ // Vendor-Specific Attribute
+ uint32_t vendor = ntohl(*(int *)(p + 2));
+ uint8_t attrib = *(p + 6);
+ int attrib_length = *(p + 7) - 2;
+
+ LOG(4, s, session[s].tunnel, " Radius reply contains Vendor-Specific. Vendor=%u Attrib=%u Length=%d\n", vendor, attrib, attrib_length);
+ if (vendor == 9 && attrib == 1) // Cisco-AVPair
+ {
+ if (attrib_length < 0) continue;
+ LOG(3, s, session[s].tunnel, " Cisco-AVPair value: %.*s\n",
+ attrib_length, p + 8);
+
+ handle_avpair(s, p + 8, attrib_length);
+ continue;
+ }
+ else if (vendor == 529 && attrib >= 135 && attrib <= 136) // Ascend
+ {
+ // handle old-format ascend DNS attributes below
+ p += 6;
+ }
+ else
+ {
+ LOG(3, s, session[s].tunnel, " Unknown vendor-specific\n");
+ continue;
+ }
+ }
+
if (*p == 8)
{
// Framed-IP-Address
session[s].idle_timeout = ntohl(*(uint32_t *)(p + 2));
LOG(3, s, session[s].tunnel, " Radius reply contains Idle-Timeout = %u\n", session[s].idle_timeout);
}
- else if (*p == 26 && p[1] >= 7)
- {
- // Vendor-Specific Attribute
- uint32_t vendor = ntohl(*(int *)(p + 2));
- uint8_t attrib = *(p + 6);
- int attrib_length = *(p + 7) - 2;
-
- LOG(3, s, session[s].tunnel, " Radius reply contains Vendor-Specific. Vendor=%u Attrib=%u Length=%d\n", vendor, attrib, attrib_length);
- if (vendor != 9 || attrib != 1)
- {
- LOG(3, s, session[s].tunnel, " Unknown vendor-specific\n");
- continue;
- }
-
- if (attrib_length > 0)
- {
- LOG(3, s, session[s].tunnel, " Cisco-AVPair value: %.*s\n",
- attrib_length, p + 8);
-
- handle_avpair(s, p + 8, attrib_length);
- }
- }
else if (*p == 99)
{
// Framed-IPv6-Route