#include "tbf.h"
#include "cluster.h"
-#ifdef LAC
#include "l2tplac.h"
-#endif
#include "pppoe.h"
extern tunnelt *tunnel;
LOG(3, s, t, "PAP login %s/%s\n", user, pass);
}
-#ifdef LAC
if ((!config->disable_lac_func) && lac_conf_forwardtoremotelns(s, user))
{
// Creating a tunnel/session has been started
return;
}
-#endif
if (session[s].ip || !(r = radiusnew(s)))
{
packet.username = calloc(l + 1, 1);
memcpy(packet.username, p, l);
-#ifdef LAC
if ((!config->disable_lac_func) && lac_conf_forwardtoremotelns(s, packet.username))
{
free(packet.username);
// Creating a tunnel/session has been started
return;
}
-#endif
run_plugins(PLUGIN_PRE_AUTH, &packet);
if (!packet.continue_auth)
// (i.e. this routine writes to p[-4]).
void processipin(sessionidt s, tunnelidt t, uint8_t *p, uint16_t l)
{
- in_addr_t ip;
+ in_addr_t ip, ip_dst;
CSTAT(processipin);
}
ip = ntohl(*(uint32_t *)(p + 12));
+ ip_dst = *(uint32_t *)(p + 16);
if (l > MAXETHER)
{
if (session[s].tbf_in)
{
- // Are we throttling this session?
- if (config->cluster_iam_master)
- tbf_queue_packet(session[s].tbf_in, p, l);
- else
- master_throttle_packet(session[s].tbf_in, p, l);
- return;
+ if (!config->no_throttle_local_IP || !sessionbyip(ip_dst))
+ {
+ // Are we throttling this session?
+ if (config->cluster_iam_master)
+ tbf_queue_packet(session[s].tbf_in, p, l);
+ else
+ master_throttle_packet(session[s].tbf_in, p, l);
+ return;
+ }
}
// send to ethernet
return;
// no spoof
- if (ipv4 != session[s].ip && memcmp(&config->ipv6_prefix, &ip, 8) && sessionbyipv6(ip) != s)
+ if ((ipv4 != session[s].ip || memcmp(&config->ipv6_prefix, &ip, 8)) && sessionbyipv6(ip) != s)
{
char str[INET6_ADDRSTRLEN];
LOG(5, s, t, "Dropping packet with spoofed IP %s\n",
q[1] = radius[r].id; // ID
q[4] = 16; // value size (size of challenge)
memcpy(q + 5, radius[r].auth, 16); // challenge
- strcpy((char *) q + 21, hostname); // our name
- *(uint16_t *) (q + 2) = htons(strlen(hostname) + 21); // length
- tunnelsend(b, strlen(hostname) + 21 + (q - b), t); // send it
+ strcpy((char *) q + 21, config->multi_n_hostname[tunnel[t].indexudp][0]?config->multi_n_hostname[tunnel[t].indexudp]:hostname); // our name
+ *(uint16_t *) (q + 2) = htons(strlen(config->multi_n_hostname[tunnel[t].indexudp][0]?config->multi_n_hostname[tunnel[t].indexudp]:hostname) + 21); // length
+ tunnelsend(b, strlen(config->multi_n_hostname[tunnel[t].indexudp][0]?config->multi_n_hostname[tunnel[t].indexudp]:hostname) + 21 + (q - b), t); // send it
}
// fill in a L2TP message with a PPP frame,