diff options
author | Kozlov Dmitry <dima@server> | 2012-11-15 14:21:35 +0400 |
---|---|---|
committer | Kozlov Dmitry <xeb@mail.ru> | 2013-01-24 23:51:33 +0400 |
commit | 45026d43f6cfbe0f6efa446b47629cb948db5a9d (patch) | |
tree | be206f8519ba8169f7ca8e87f0cfc66b63ef9a74 | |
parent | 227298572c50013225752ff3af13ffc724d26ddf (diff) | |
download | accel-ppp-45026d43f6cfbe0f6efa446b47629cb948db5a9d.tar.gz accel-ppp-45026d43f6cfbe0f6efa446b47629cb948db5a9d.zip |
merge upstream
-rw-r--r-- | accel-pppd/CMakeLists.txt | 1 | ||||
-rw-r--r-- | accel-pppd/accel-ppp.conf | 4 | ||||
-rw-r--r-- | accel-pppd/accel-ppp.conf.5 | 9 | ||||
-rw-r--r-- | accel-pppd/cli/show_sessions.c | 2 | ||||
-rw-r--r-- | accel-pppd/cli/std_cmd.c | 2 | ||||
-rw-r--r-- | accel-pppd/cli/tcp.c | 4 | ||||
-rw-r--r-- | accel-pppd/cli/telnet.c | 4 | ||||
-rw-r--r-- | accel-pppd/ctrl/l2tp/l2tp.c | 2 | ||||
-rw-r--r-- | accel-pppd/extra/CMakeLists.txt | 1 | ||||
-rw-r--r-- | accel-pppd/include/events.h | 8 | ||||
-rw-r--r-- | accel-pppd/ppp/ppp_ipcp.h | 2 | ||||
-rw-r--r-- | accel-pppd/ppp/ppp_lcp.c | 8 | ||||
-rw-r--r-- | accel-pppd/radius/radius.c | 12 |
13 files changed, 49 insertions, 10 deletions
diff --git a/accel-pppd/CMakeLists.txt b/accel-pppd/CMakeLists.txt index 7b33e68..2fb80b9 100644 --- a/accel-pppd/CMakeLists.txt +++ b/accel-pppd/CMakeLists.txt @@ -64,6 +64,7 @@ ADD_EXECUTABLE(accel-pppd ppp/ppp_ipcp.c ppp/ipcp_opt_ipaddr.c ppp/ipcp_opt_dns.c + ppp/ipcp_opt_wins.c ppp/ipv6cp_opt_intfid.c ppp/ppp_ipv6cp.c ppp/ppp_ccp.c diff --git a/accel-pppd/accel-ppp.conf b/accel-pppd/accel-ppp.conf index 2e159de..7792ba7 100644 --- a/accel-pppd/accel-ppp.conf +++ b/accel-pppd/accel-ppp.conf @@ -111,6 +111,10 @@ verbose=1 #dns1=172.16.0.1 #dns2=172.16.1.1 +[wins] +#wins1=172.16.0.1 +#wins2=172.16.1.1 + [radius] #dictionary=/usr/local/share/accel-ppp/radius/dictionary nas-identifier=accel-ppp diff --git a/accel-pppd/accel-ppp.conf.5 b/accel-pppd/accel-ppp.conf.5 index 36299ff..70b6b6b 100644 --- a/accel-pppd/accel-ppp.conf.5 +++ b/accel-pppd/accel-ppp.conf.5 @@ -299,6 +299,13 @@ Specifies primary DNS to be sent to peer. .TP .BI "dns2=" x.x.x.x Specifies secondary DNS to be sent to peer. +.SH [wins] +.TP +.BI "wins1=" x.x.x.x +Specifies primary NBNS to be sent to peer. +.TP +.BI "wins2=" x.x.x.x +Specifies secondary NBNS to be sent to peer. .SH [dnsv6] .TP .BI "dns=" IPv6_address @@ -684,4 +691,4 @@ Specifies downstream rate limiting method. .TP .BI "leaf-qdisc=" "qdisc parameters" In case if htb is used as up-limiter or down-limiter specified leaf qdisc can be attached automaticaly. -At present on sfq qdisc is implemented. Parameters are same as for tc: [ limit NUMBER ] [ perturn SECS ] [ quantum BYTES ]. +At present only sfq qdisc is implemented. Parameters are same as for tc: [ limit NUMBER ] [ perturn SECS ] [ quantum BYTES ]. diff --git a/accel-pppd/cli/show_sessions.c b/accel-pppd/cli/show_sessions.c index 9e0ad2f..2140dec 100644 --- a/accel-pppd/cli/show_sessions.c +++ b/accel-pppd/cli/show_sessions.c @@ -148,7 +148,7 @@ static int show_ses_exec(const char *cmd, char * const *f, int f_cnt, void *cli) return CLI_CMD_OK; } } else if (!strcmp(f[i], "match")) { - if (i == f_cnt - 1) + if (i >= f_cnt - 2) return CLI_CMD_SYNTAX; match_key = find_column(f[++i]); if (!match_key) { diff --git a/accel-pppd/cli/std_cmd.c b/accel-pppd/cli/std_cmd.c index d2666d8..7a890d1 100644 --- a/accel-pppd/cli/std_cmd.c +++ b/accel-pppd/cli/std_cmd.c @@ -130,6 +130,8 @@ static int terminate_exec1(char * const *f, int f_cnt, void *cli) pthread_rwlock_rdlock(&ses_lock); list_for_each_entry(ses, &ses_list, entry) { + if (!ses->username) + continue; if (pcre_exec(re, NULL, ses->username, strlen(ses->username), 0, 0, NULL, 0) < 0) continue; if (hard) diff --git a/accel-pppd/cli/tcp.c b/accel-pppd/cli/tcp.c index 9ea914c..b2ed910 100644 --- a/accel-pppd/cli/tcp.c +++ b/accel-pppd/cli/tcp.c @@ -208,8 +208,10 @@ static int cln_write(struct triton_md_handler_t *h) _free(cln->xmit_buf); cln->xmit_pos = 0; - if (list_empty(&cln->xmit_queue)) + if (list_empty(&cln->xmit_queue)) { + cln->xmit_buf = NULL; break; + } cln->xmit_buf = list_entry(cln->xmit_queue.next, typeof(*cln->xmit_buf), entry); list_del(&cln->xmit_buf->entry); diff --git a/accel-pppd/cli/telnet.c b/accel-pppd/cli/telnet.c index e9e886d..5a42a99 100644 --- a/accel-pppd/cli/telnet.c +++ b/accel-pppd/cli/telnet.c @@ -518,8 +518,10 @@ static int cln_write(struct triton_md_handler_t *h) _free(cln->xmit_buf); cln->xmit_pos = 0; - if (list_empty(&cln->xmit_queue)) + if (list_empty(&cln->xmit_queue)) { + cln->xmit_buf = NULL; break; + } cln->xmit_buf = list_entry(cln->xmit_queue.next, typeof(*cln->xmit_buf), entry); list_del(&cln->xmit_buf->entry); diff --git a/accel-pppd/ctrl/l2tp/l2tp.c b/accel-pppd/ctrl/l2tp/l2tp.c index 7fb00ef..071a782 100644 --- a/accel-pppd/ctrl/l2tp/l2tp.c +++ b/accel-pppd/ctrl/l2tp/l2tp.c @@ -1318,7 +1318,7 @@ static int l2tp_conn_read(struct triton_md_handler_t *h) log_debug("duplicate packet %i\n", ntohs(pack->hdr.Ns)); if (!list_empty(&conn->send_queue)) l2tp_retransmit(conn); - if (l2tp_send_ZLB(conn)) + else if (l2tp_send_ZLB(conn)) goto drop; } else { l2tp_conn_log(log_debug, conn); diff --git a/accel-pppd/extra/CMakeLists.txt b/accel-pppd/extra/CMakeLists.txt index ea640b1..d3d48ea 100644 --- a/accel-pppd/extra/CMakeLists.txt +++ b/accel-pppd/extra/CMakeLists.txt @@ -1,6 +1,7 @@ ADD_LIBRARY(sigchld SHARED sigchld.c) ADD_LIBRARY(pppd_compat SHARED pppd_compat.c) TARGET_LINK_LIBRARIES(pppd_compat sigchld) +set_property(TARGET pppd_compat PROPERTY INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib/accel-ppp) ADD_LIBRARY(ippool SHARED ippool.c) ADD_LIBRARY(ipv6pool SHARED ipv6pool.c) ADD_LIBRARY(chap-secrets SHARED chap-secrets.c) diff --git a/accel-pppd/include/events.h b/accel-pppd/include/events.h index ca04d75..37dfa82 100644 --- a/accel-pppd/include/events.h +++ b/accel-pppd/include/events.h @@ -21,6 +21,7 @@ #define EV_SHAPER 101 #define EV_MPPE_KEYS 102 #define EV_DNS 103 +#define EV_WINS 104 #define EV_RADIUS_ACCESS_ACCEPT 200 #define EV_RADIUS_COA 201 @@ -57,5 +58,10 @@ struct ev_dns_t in_addr_t dns2; }; +struct ev_wins_t +{ + struct ap_session *ses; + in_addr_t wins1; + in_addr_t wins2; +}; #endif - diff --git a/accel-pppd/ppp/ppp_ipcp.h b/accel-pppd/ppp/ppp_ipcp.h index 301bdce..7412702 100644 --- a/accel-pppd/ppp/ppp_ipcp.h +++ b/accel-pppd/ppp/ppp_ipcp.h @@ -12,6 +12,8 @@ #define CI_ADDR 3 /* IP-Address */ #define CI_DNS1 129 /* Primary-DNS-Address */ #define CI_DNS2 131 /* Secondary-DNS-Address */ +#define CI_WINS1 130 /* Primary-NBNS-Address */ +#define CI_WINS2 132 /* Secondary-NBNS-Address */ struct ipcp_hdr_t { diff --git a/accel-pppd/ppp/ppp_lcp.c b/accel-pppd/ppp/ppp_lcp.c index 2d1e195..7bec629 100644 --- a/accel-pppd/ppp/ppp_lcp.c +++ b/accel-pppd/ppp/ppp_lcp.c @@ -683,10 +683,10 @@ static void send_echo_request(struct triton_timer_t *t) return; } - if (conf_ppp_verbose) { - log_ppp_debug("send [LCP EchoReq id=%x <magic %x>]\n", msg.hdr.id, msg.magic); - ppp_chan_send(lcp->ppp,&msg,ntohs(msg.hdr.len)+2); - } + if (conf_ppp_verbose) + log_ppp_debug("send [LCP EchoReq id=%x <magic %x>]\n", msg.hdr.id, lcp->magic); + + ppp_chan_send(lcp->ppp, &msg, ntohs(msg.hdr.len) + 2); } static void start_echo(struct ppp_lcp_t *lcp) diff --git a/accel-pppd/radius/radius.c b/accel-pppd/radius/radius.c index 67c18e6..9caf6f0 100644 --- a/accel-pppd/radius/radius.c +++ b/accel-pppd/radius/radius.c @@ -59,9 +59,11 @@ int rad_proc_attrs(struct rad_req_t *req) struct rad_attr_t *attr; struct ipv6db_addr_t *a; struct ev_dns_t dns; + struct ev_wins_t wins; int res = 0; dns.ses = NULL; + wins.ses = NULL; req->rpd->acct_interim_interval = conf_acct_interim_interval; list_for_each_entry(attr, &req->reply->attrs, entry) { @@ -75,6 +77,14 @@ int rad_proc_attrs(struct rad_req_t *req) dns.ses = req->rpd->ses; dns.dns2 = attr->val.ipaddr; break; + case MS_Primary_NBNS_Server: + wins.ses = req->rpd->ses; + wins.wins1 = attr->val.ipaddr; + break; + case MS_Secondary_NBNS_Server: + wins.ses = req->rpd->ses; + wins.wins2 = attr->val.ipaddr; + break; } continue; } else if (attr->vendor) @@ -137,6 +147,8 @@ int rad_proc_attrs(struct rad_req_t *req) if (dns.ses) triton_event_fire(EV_DNS, &dns); + if (wins.ses) + triton_event_fire(EV_WINS, &wins); return res; } |