summaryrefslogtreecommitdiff
path: root/accel-pppd/radius/serv.c
diff options
context:
space:
mode:
authorroot <root@debian11-vyos-build.polycomm.net>2021-12-28 12:50:44 +0300
committerroot <root@debian11-vyos-build.polycomm.net>2021-12-28 12:50:44 +0300
commit2804a115fc2cd0d785d9a6dcb0be247c97c32d69 (patch)
treed05428468c6378ee58a23f9234feb8f23ee0f384 /accel-pppd/radius/serv.c
parentcca47ac174d1f2a99ee4969423e2bbc4b2fb6af8 (diff)
downloadaccel-ppp-xebd-2804a115fc2cd0d785d9a6dcb0be247c97c32d69.tar.gz
accel-ppp-xebd-2804a115fc2cd0d785d9a6dcb0be247c97c32d69.zip
Added VRF support for radius request and DM/CoA server.
New configuration format: [radius] server=address,secret[,auth-port=1812][,acct-port=1813][,vrf=VRF_NAME][,req-limit=0][,fail-timeout=0,max-fail=0,][,weight=1][,backup] dae-server=x.x.x.x:port,secret[,vrf=VRF_NAME] By default, VRF name is undefined.
Diffstat (limited to 'accel-pppd/radius/serv.c')
-rw-r--r--accel-pppd/radius/serv.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/accel-pppd/radius/serv.c b/accel-pppd/radius/serv.c
index 6d1eb4c..47fdcc6 100644
--- a/accel-pppd/radius/serv.c
+++ b/accel-pppd/radius/serv.c
@@ -546,6 +546,8 @@ static void __add_server(struct rad_server_t *s)
s1->req_limit = s->req_limit;
s1->max_fail = s->max_fail;
s1->need_free = 0;
+ s1->vrf_default = s->vrf_default;
+ strcpy(s1->vrf_name, s->vrf_name);
_free(s);
return;
}
@@ -677,6 +679,7 @@ static void add_server_old(void)
s->fail_timeout = conf_fail_timeout;
s->req_limit = conf_req_limit;
s->max_fail = conf_max_fail;
+ s->vrf_default = 1;
if (auth_addr == acct_addr && !strcmp(auth_secret, acct_secret)) {
s->acct_port = acct_port;
@@ -695,6 +698,7 @@ static void add_server_old(void)
s->fail_timeout = conf_fail_timeout;
s->req_limit = conf_req_limit;
s->max_fail = conf_max_fail;
+ s->vrf_default = 1;
__add_server(s);
}
}
@@ -745,6 +749,7 @@ static int parse_server1(const char *_opt, struct rad_server_t *s)
s->fail_timeout = conf_fail_timeout;
s->req_limit = conf_req_limit;
s->max_fail = conf_max_fail;
+ s->vrf_default = 1;
return 0;
@@ -828,6 +833,23 @@ static int parse_server2(const char *_opt, struct rad_server_t *s)
} else
s->weight = 1;
+ ptr3 = strstr(ptr2, ",vrf=");
+ if (ptr3) {
+ endptr = strchrnul(ptr3 + 5, ',');
+ if (*endptr != ',' && *endptr != 0)
+ goto out;
+ if ( ( endptr - ptr3 - 5 ) > IFNAMSIZ - 1 ) {
+ log_error("radius: %s: too long vrf name, set vrf to default\n", _opt);
+ s->vrf_default = 1;
+ } else
+ {
+ s->vrf_default = 0;
+ bzero(s->vrf_name, sizeof(s->vrf_name));
+ strncpy(s->vrf_name, ptr3 + 5, endptr - ptr3 - 5);
+ }
+ } else
+ s->vrf_default = 1;
+
ptr3 = strstr(ptr2, ",backup");
if (ptr3)
s->backup = 1;