summaryrefslogtreecommitdiff
path: root/accel-pppd/extra
AgeCommit message (Collapse)Author
2018-11-03pppd_compat: fix handling of fork() failuresGuillaume Nault
When accel-ppp is under stress (for example because of massive disconnections) it may enter a state where no session could be created or destroyed anymore. This happens when at least one of the pppd_compat fork() fail. In this case, the error code path doesn't unlock the sigchld handler, which prevents it from running the completion callbacks of running scripts. If the "fork-limit" option is used, failure to call the completion callback will prevent other scripts from running. This will block setting up and tearing down sessions, as those will wait indefinitely for their pppd_compat scripts to run. Therefore, we have to unlock the sigchld handler when fork() fails. We also need to call fork_queue_wakeup(), because the previous check_fork_limit() call already took one reference in the fork limit. Finally, ev_ses_pre_up() is a bit special because it has to tear the session down if the ip-pre-up script failed. Therefore it also has to call ap_session_terminate() upon fork() failures. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-10-26Merge branch 'master' of https://github.com/xebd/accel-pppDmitry Kozlov
2018-10-25fix gateway address setup fail due memory corruptionVladislav Grishenko
log: libnetlink: RTNETLINK answers: Invalid argument ppp0: f7bb00a79ef667d2: failed to set IPv4 address: Invalid argument ipaddr_add_peer() called only with mask equeal 0 or 32, but w/o zero-allocated structs it contans garbage in some cases. so, instead ipaddr_add() was called with wrong mask value. also, init chap-secrets mask for the same reason.
2018-10-23ipv6: fix IPv6 processing of sessions that only have only a link-local addressGuillaume Nault
Several modules assume that if ses->ipv6 is set, then ses->ipv6->addr_list contains at least one element. But this is not true if ipv6 was allocated by the pseudo ipdb backend of ipv6cp (ipv6cp_opt_intfid.c). That is, if the PPP session only has an automatic link-local address. This leads modules like pppd-compat and dhcpv6 to access invalid memory when trying to retrieve the IPv6 address of a PPP session. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-07-31Merge branch 'master' of ssh://git.code.sf.net/p/accel-ppp/codeDmitry Kozlov
2018-06-24pppd_compat: fix indentation in ev_radius_coa()Guillaume Nault
Missing tab was misleading. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-06-24pppd_compat: run scripts in the PPP device netnsGuillaume Nault
If the PPP device is set up into a specific network namespace, all the configuration that goes with it belongs to this same netns. Therefore, we need to run the up/down scripts in that namespace too. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-06-24pppd_compat: fix argv[0] when calling ip-pre-upGuillaume Nault
The first argument passed to the ip-pre-up script, was mistakenly set to the value of ip-up. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2018-06-04sstp: snmp: add missed files, fix 0d454ad7102506ecd12a36239f6604f7e4b57aaeVladislav Grishenko
2018-06-03sstp: add snmp supportVladislav Grishenko
2018-02-05pppd_compat: call ip-down even if ip-up is not specifiedDmitry Kozlov
2018-01-15cmake: add error messages if postgresql or snmp libraries not foundDmitry Kozlov
2018-01-13ipv6: consolidate and fix interface-id address generation for non-/128Vladislav Grishenko
2017-12-25ipv6pool: added gw-ip6-address option and special handling for /128 prefixesDmitry Kozlov
If pool specified with /128 prefix length, then initialize intf_id by gw_ip6_address and peer_intf_id by generated pool address.
2017-12-20ippool: fixed parsing /32 rangesDmitry Kozlov
2017-12-14ippool: implemented next pool supportDmitry Kozlov
config changes: [ip-pool] x.x.x.x/mask,name=pool1 y.y.y.y/mask,name=pool2,next=pool1
2017-12-07pppd_compat: mark session started if ip-up handler calledDmitry Kozlov
2017-12-07pppd_compat: fixed bug caused fork queue to stallDmitry Kozlov
2017-12-07chap-secrets: assume 4th field as pool nameVladislav Grishenko
Simplify previous commit, if 4th field isn't empty and doesn't start with reserved chars (*-!), assume it as pool name. Also, fix build warn without OPENSSL.
2017-12-06chap-secrets: allow to use pool name instead of address to specify ipv4 poolVladislav Grishenko
Chap-secrets' ipdb uses 4th field as static peer ipv4 address. With no radius and multiple same username sessions, it's impossible to use non-default pool for such sessions. Abuse chap-secret's 4th field as pool=name to specify session's pool name. With ippool module loaded after chap-secrets (default order), it will be used for allocation from the specified poll name. Compatibility considerations: * pppd will skip 'pool=*' with warn 'unknown host in auth. address list' same as 5th field - shaper, because starting from 4th field pppd parse list of value. so, no new effects here. * previous versions of accel-ppp will parse 'pool=*' as empty address. * with no 'pool=*' in chap-secrets or with no chap-secrets loaded, no behavior change. * with no ippool loaded, session will get no peer address. * with ippool loaded before chap-secrets, chap-secrets's ipdb will not be used, therefore neither ip addess not pool name will has no effect. * if chap-secrets' pool is invalid or not found, default pool will be used by ippool or address came from radius. * chap-secret's pool name might override pool came from radius, if radius module is loaded after chap-secrets and no address came from radius.
2017-12-05net-snmp: fixed crash on table requestDmitry Kozlov
2017-12-05ippool: rewrited parsersDmitry Kozlov
2017-12-05ipv6: nd: fix interface id addresses generation for prefixes > /64Vladislav Grishenko
2017-10-16pppd_compat: do not call ip-down if session was not startedDmitry Kozlov
2017-10-12pppd-compat: implemented fork-limitDmitry Kozlov
[ppppd-compat] fork-limit=N Specifies number of simultaneously running background processes.
2017-10-11pppd_compat: various improvemmentsDmitry Kozlov
implemented coinfig reload changed default value of ip-xxx scripts to be NULL (disabled)
2017-07-04support for openssl-1.1Dmitry Kozlov
2017-03-27net-snmp: add definition for U64 (if not set)Dmitry Kozlov
2016-11-12pppd-compat: move computation of tx_bytes and rx_bytesGuillaume Nault
tx_bytes and rx_bytes are only used in the ->stop_time branch, so let's compute them here rather than at the top of the function. Also, let's replace '4294967296llu' by 'UINT32_MAX + 1', to make it clear that a gigaword equals 2^32 bytes and is used to keep track of how many times the 32 bits tx and rx counters have overflowed. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2016-11-12pppd-compat: check available memory before setting environment variablesGuillaume Nault
Use snprintf() to ensure fill_env() isn't going to overflow 'mem'. Environment variables are either completely set or not defined at all (but are never truncated). For the ipv6 and ipv6_dp cases, the environment variable is now fully generated with a single format string for simplicity. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2016-05-31accel-ppp Debian x32 fix minor -Wformat warningsMarek Michalkiewicz
Hello, small patch to avoid gcc -Wformat warnings on Debian x32 where time_t is "long long" (64-bit signed, to be 2038 safe), not "unsigned long" (32-bit unsigned) corresponding to "%lu" format strings. Regards, Marek
2016-04-13logwtmp: check for username presenceDmitry Kozlov
2016-03-19pppd_compat: check for script existance before forkDmitry Kozlov
2015-12-25pppd_compat: change mode of radattr files to 0644Dmitry Kozlov
2015-12-02net-snmp: export interface counters in the sessionTableDmitry Kozlov
2015-11-30pppd_compat: fixed usage of mkstamp (fixed file descriptor leak)Dmitry Kozlov
2015-11-20replace mktemp with mkstempDmitry Kozlov
2015-11-17ippool: properly handle Cisco-AVPairDmitry Kozlov
2014-11-22remove trailing whitespacesDmitry Kozlov
2014-11-05pppd_compat: pass IPV6_PREFIX and IPV6_DELEGATED_PREFIX to ip-up/ip-down scriptsDmitry Kozlov
2014-10-03get rid of time(), use clock_gettime(CLOCK_MONOTONIC) insteadDmitry Kozlov
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-07-18ipv6: add support for prefixes greater than 64Dmitry Kozlov
2014-06-03get out of SPINLOCK_INITIALIZER as it is not cross-platform compatibleDmitry Kozlov
2014-06-03make IPv4 address to string conversions endian friendlyDmitry Kozlov
2014-05-12ippool: introduced shuffle optionDmitry Kozlov
By default list of IP address is serial at startup. This option shuffles initial IP list so it becomes more random.
2014-04-30net-snmp: add missing memdebug.h includeDmitry Kozlov
Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
2014-04-30net-snmp: fiexed improper handling of empty username when requesting session ↵Dmitry Kozlov
table Signed-off-by: Dmitry Kozlov <xeb@mail.ru>
2014-04-29net-snmp: unshare file descriptors namespaceGuillaume Nault
Use unshare(CLONE_FILES) to create a local file descriptors namespace for the SNMP thread. This is similar to what was done in bf5340 'net-snmp: run snmp in "special" thread', but without calling clone() directly. So the net-snmp plugin keeps running in a regular pthread. Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
2014-04-29Revert "net-snmp: run snmp in "special" thread"Guillaume Nault
This reverts commit bf5340291badcc631bd855bb924593cd445ecd26. snmp_thread() needs to be run as regular thread to allow Valgrind analysis. Using a different namespace for file desciptors will be done later on using unshare(). Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>