summaryrefslogtreecommitdiff
path: root/accel-pppd/radius/radius.c
AgeCommit message (Collapse)Author
2018-12-20iputils: add 'src' and 'gw' parameters to iproute_del()Guillaume Nault
Rework iproute_del() to have the same parameters as iproute_add(). This will allow callers to specify more precisely the route they want to delete. Callers will later be converted to make use of these parameters to ensure that the removed route precisely matches the one that was originaly inserted. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-12-04radius: implement Framed-IPv6-Route attributeGuillaume Nault
Framed-IPv6-Route is the IPv6 counterpart of Framed-Route. It's only used for defining routes to be added locally by accel-ppp. Routes that should be announced to the peer using Router Advertisements should be defined in the Route-IPv6-Information attribute (but that's currently not implemented). Framed-IPv6-Route format is: <network in CIDR notation> [<gateway IPv6 address> [<route metric>]] The gateway address and the route metric are optionals, but the metric can only be set if a gateway address is given. One can use the unspecified address '::' to define a route with no gateway and a non-default route metric. When no gateway address is defined, the session's network interface is used directly. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-11-12ipcp: fix uninitialised memory access when negociating *-NBNS-AddressGuillaume Nault
When handling the EV_WINS event, IPCP assumes that the ->wins1 and ->wins2 fields of the event structure are properly set. But that may not be the case. If only one of the MS-Primary-NBNS-Server or MS-Secondary-NBNS-Server RADIUS attributes was received, then only ->wins1 or ->wins2 is set, while the other keeps a non initialised value. This uninitialised value is then copied by ev_wins() and proposed to the peer when negociating the Primary-NBNS-Address or Secondary-NBNS-Address IPCP options. That leaks four bytes of the stack to the network and prevents using the values found in the [wins] section of accel-ppp.conf as fallback. Fix this by initialising the whole event structure in rad_proc_attrs(). Then, in ev_wins(), we can check if ->wins1 or ->wins2 is properly set before copying them. That allows to propery fallback to accel-ppp.conf values when one of the values was not provided by RADIUS. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-11-12ipcp: fix uninitialised memory access when negociating *-DNS-AddressGuillaume Nault
When handling the EV_DNS event, IPCP assumes that the ->dns1 and ->dns2 fields of the event structure are properly set. But that may not be the case. If only one of the MS-Primary-DNS-Server or MS-Secondary-DNS-Server RADIUS attributes was received, then only ->dns1 or ->dns2 is set, while the other keeps a non initialised value. This uninitialised value is then copied by ev_dns() and proposed to the peer when negociating the Primary-DNS-Address or Secondary-DNS-Address IPCP options. That leaks four bytes of the stack to the network and prevents using the values found in the [dns] section of accel-ppp.conf as fallback. Fix this by initialising the whole event structure in rad_proc_attrs(). Then, in ev_dns(), we can check if ->dns1 or ->dns2 is properly set before copying them. That allows to propery fallback to accel-ppp.conf values when one of the values was not provided by RADIUS. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-04-06radius: allow CoA/DM by single username attributeDmitry Kozlov
2018-02-21radius: add support for route priority (metric) in Framed-RouteGuillaume Nault
Let an optional route priority (aka metric) be defined in RADIUS Framed-Route attributes. The priority is an integer placed at the end of the route string. This is backward compatible with the previous format and also conforms with the recommended format defined by RFC 2865 (although we don't allow multiple metrics). Framed-Route format is: <network> [<gateway> [<priority>]] For example, 'Framed-Route = "192.0.2.0/24 203.0.113.1 8"' will let the following route be installed (assuming 203.0.113.1 is routed through eth0): $ ip route show [...] 192.0.2.0/24 via 203.0.113.1 dev eth0 metric 8 It's possible to use the unspecified gateway (0.0.0.0) if one wants to set a priority without specifying a gateway address. Finally, route deletion now also takes the priority into account, in order to avoid removing a different route accidentally. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2017-10-17radius: implemented lua supportDmitry Kozlov
to get radius object use session:module("radius") function radius object provides flollowing functions: radius:attrs() - returns array of attributes {"name" = NAME, "vendor" = VENDOR|nil} radius:attr(name[,vendor]) - returns value of attribute (may return multiple results) Example: function ip_up(ses) rad = ses:module("radius") attrs = rad:attrs() if attrs then print("attrs:") for _,a in pairs(attrs) do io.write("\t") if a.vendor then io.write(a.vendor..":") end io.write(a.name.."=") print(rad:attr(a.name, a.vendor)) end end end
2016-07-09radius: do not execute interface rename immediately, store new name for ↵Dmitry Kozlov
later use Bacause interface may not still exists in authentication phase
2016-06-07Merge branch 'master' of ssh://git.code.sf.net/p/accel-ppp/codeDmitry Kozlov
2016-06-07radius: update Session-Timeout by CoADmitry Kozlov
2016-06-02radius: initialise ipv6db addresses completelyGuillaume Nault
The 'installed' bit of the allocated ipv6db_addr_t structure needs to be initialised. This is because ap_session_ifdown() reads this bit to know if the address or route needs to be removed from the kernel. The 'installed' bit is set by ap_session_accounting_started() and the ND and DHCPV6 protocol handlers, but disconnection could happen before these steps. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2016-04-30radius: add Delegated-IPv6-Prefix to accounting packetsDmitry Kozlov
2016-01-03radius: implemented handling of Framed-Route attributeDmitry Kozlov
Framed-Route has following syntax: Framed-Route=address[/mask] [gateway] If gateway is not specified then route would be attached to session interface.
2015-02-21radius: override session's idle and timeout timers values by Idle-Timeout ↵Dmitry Kozlov
and Session-Timeout attributes
2015-02-20ppp: set unit_idx from NAS_Port attribute if presentFrançois Cachereul
Signed-off-by: François Cachereul <f.cachereul@alphalink.fr>
2014-11-22remove trailing whitespacesDmitry Kozlov
2014-11-05radius: early ipv6_dp assignmentDmitry Kozlov
2014-10-29radius: fix call to memset on rdp->auth_ctxFrançois Cachereul
The mistake was revealed by gcc 4.9.0 Signed-off-by: François Cachereul <f.cachereul@alphalink.fr> Signed-off-by: Guillaume Nault <g.nault@alphalink.fr> Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
2014-10-23radius: introduced max-fail optionDmitry Kozlov
Before this patch any single fail (no responce for max_try requests) caused radius server to enter "fail" state, which may be unwanted behaviour, because radius may not respond for interim Accounting-Request by some reasons. This patch introduces "max-fail" option which specifies number of unreplied requests in a row after which server enters into "fail" state. (Actual only for multi-server configurations)
2014-10-04radius: various bug fixesDmitry Kozlov
2014-10-03get rid of time(), use clock_gettime(CLOCK_MONOTONIC) insteadDmitry Kozlov
2014-09-26radius: cancel starting accounting request if session terminated before ↵Dmitry Kozlov
server replied
2014-09-20rewrite of authentication/accounting proceduresDmitry Kozlov
This patch gets rid of synchronuos style of authentication/accounting. Synchronous style of authentication/accounting produced sleeping threads which becomes a problem when lots of sessions started/stopped and all they want authorization/accounting.
2014-06-17radius: introduced attr-tunnel-type optionDmitry Kozlov
If specified then accel-ppp will send tunnel type as string (pppoe,pptp,l2tp,ipoe).
2014-05-12radius: use NAS-Port-Id in Access-Accept for interface renamingDmitry Kozlov
2014-05-12radius: add support for Nas-Port-Id attribute (interface name)Dmitry Kozlov
2013-10-23radius: skip vendor specific attributes when searching session for DM/CoADmitry Kozlov
This fixes invalid assosiation vendor specific Cisco-AVPair to Username attribute which both have same id and prevents to find sessions in some circumstances. Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
2013-10-11radius,ippool,chap-secrets: do not assign local address if session is not pppDmitry Kozlov
Do not assign local address for non-PPP (IPoE at present) sessions in specified modules. This enforces ctrl to assign proper local address by itself. Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
2013-08-14radius: don't assign address if Framed-IP-Address=255.255.255.254Kozlov Dmitry
2013-04-11radius: implemented default-realm optionKozlov Dmitry
2013-03-18radius: assign ipv4 either if gw-ip-address is not specified for non-ppp ↵Dmitry Kozlov
sessions
2013-01-25Fix boolean options parsing in configuration fileGuillaume Nault
Explicitely interpret zero values when parsing boolean options. This allows to unset boolean parameters such as "verbose" when reloading the configuration. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2013-01-24backport 1.7Kozlov Dmitry
* l2tp: Fix allocation checking when adding octets AVP * cli, tcp: Fix non-NULL terminated string reception * Fix va_end() missing calls * chap-secrets: implemented encryption * auth_pap: make messages like other auth modules * cli: check xmit_buf is not null at enter to write function * pppoe: implemented regular expression support * chap-secrets: implemented encryption * ippool: fixed initialization order * optional shaper compiling * ppp: dns/wins code cleanup
2013-01-24merge upstreamKozlov Dmitry
2012-09-05generalize interface statistics gatheringKozlov Dmitry
2012-08-29add 'ppp' filed to CTRL to identify ppp sessionsKozlov Dmitry
2012-08-15radius: fixed broken authentication procedureKozlov Dmitry
2012-08-11ipoe: fixed packet output pathKozlov Dmitry
2012-07-19radius: implemented Idle-TimeoutKozlov Dmitry
2012-07-19radius: multiple disctionary options supportKozlov Dmitry
2012-07-10initial session backup implementationKozlov Dmitry
2012-06-22initial ipoe implementationKozlov Dmitry
2012-06-19general preparation for IPoE integrationKozlov Dmitry
2012-04-30ippool: implemented vendor/attr options to specify which radius attribute ↵Kozlov Dmitry
containes pool name
2012-04-29radius: fix reading of req-limit optionKozlov Dmitry
2012-03-11radius: add support for MS-Primary-DNS-Server/MS-Secondary-DNS-Server attributesKozlov Dmitry
2011-12-27radius: implemented simultaneous requests limitingKozlov Dmitry
2011-12-27radius, ippool: implemented Framed-Pool attributeKozlov Dmitry
2011-09-05radius: per-server statisticsKozlov Dmitry
2011-09-03radius: servers reloadKozlov Dmitry