From 021f68f529da87d57177835f6b5649dc153a12d2 Mon Sep 17 00:00:00 2001 From: Jiri Skala Date: Thu, 11 Dec 2008 11:52:16 +0000 Subject: [PATCH] - fixed #467004 PPP sometimes gets incorrect DNS servers for mobile broadband connections --- ppp-2.4.4-bogus_dns_addr.patch | 104 +++++++++++++++++++++++++++++++++ ppp.spec | 7 ++- 2 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 ppp-2.4.4-bogus_dns_addr.patch diff --git a/ppp-2.4.4-bogus_dns_addr.patch b/ppp-2.4.4-bogus_dns_addr.patch new file mode 100644 index 0000000..4af8d7e --- /dev/null +++ b/ppp-2.4.4-bogus_dns_addr.patch @@ -0,0 +1,104 @@ +diff -up ppp-2.4.4/pppd/ipcp.c.bogus_dns_addr ppp-2.4.4/pppd/ipcp.c +--- ppp-2.4.4/pppd/ipcp.c.bogus_dns_addr 2005-08-26 01:59:34.000000000 +0200 ++++ ppp-2.4.4/pppd/ipcp.c 2008-12-11 12:39:05.000000000 +0100 +@@ -715,7 +715,8 @@ ipcp_cilen(f) + #define LENCIADDRS(neg) (neg ? CILEN_ADDRS : 0) + #define LENCIVJ(neg, old) (neg ? (old? CILEN_COMPRESS : CILEN_VJ) : 0) + #define LENCIADDR(neg) (neg ? CILEN_ADDR : 0) +-#define LENCIDNS(neg) (neg ? (CILEN_ADDR) : 0) ++#define LENCIDNS(neg) LENCIADDR(neg) ++#define LENCIWINS(neg) LENCIADDR(neg) + + /* + * First see if we want to change our options to the old +@@ -737,7 +738,9 @@ ipcp_cilen(f) + LENCIVJ(go->neg_vj, go->old_vj) + + LENCIADDR(go->neg_addr) + + LENCIDNS(go->req_dns1) + +- LENCIDNS(go->req_dns2)) ; ++ LENCIDNS(go->req_dns2) + ++ LENCIWINS(go->winsaddr[0]) + ++ LENCIWINS(go->winsaddr[1])) ; + } + + +@@ -810,6 +813,19 @@ ipcp_addci(f, ucp, lenp) + } else \ + neg = 0; \ + } ++ ++#define ADDCIWINS(opt, addr) \ ++ if (addr) { \ ++ if (len >= CILEN_ADDR) { \ ++ u_int32_t l; \ ++ PUTCHAR(opt, ucp); \ ++ PUTCHAR(CILEN_ADDR, ucp); \ ++ l = ntohl(addr); \ ++ PUTLONG(l, ucp); \ ++ len -= CILEN_ADDR; \ ++ } else \ ++ addr = 0; \ ++ } + + ADDCIADDRS(CI_ADDRS, !go->neg_addr && go->old_addrs, go->ouraddr, + go->hisaddr); +@@ -823,6 +839,10 @@ ipcp_addci(f, ucp, lenp) + + ADDCIDNS(CI_MS_DNS2, go->req_dns2, go->dnsaddr[1]); + ++ ADDCIWINS(CI_MS_WINS1, go->winsaddr[0]); ++ ++ ADDCIWINS(CI_MS_WINS2, go->winsaddr[1]); ++ + *lenp -= len; + } + +@@ -1159,6 +1179,15 @@ ipcp_nakci(f, p, len, treat_as_reject) + try.neg_addr = 1; + no.neg_addr = 1; + break; ++ case CI_MS_WINS1: ++ case CI_MS_WINS2: ++ if (cilen != CILEN_ADDR) ++ goto bad; ++ GETLONG(l, p); ++ ciaddr1 = htonl(l); ++ if (ciaddr1) ++ try.winsaddr[citype == CI_MS_WINS2] = ciaddr1; ++ break; + } + p = next; + } +@@ -1275,6 +1304,21 @@ ipcp_rejci(f, p, len) + try.neg = 0; \ + } + ++#define REJCIWINS(opt, addr) \ ++ if (addr && \ ++ ((cilen = p[1]) == CILEN_ADDR) && \ ++ len >= cilen && \ ++ p[0] == opt) { \ ++ u_int32_t l; \ ++ len -= cilen; \ ++ INCPTR(2, p); \ ++ GETLONG(l, p); \ ++ cilong = htonl(l); \ ++ /* Check rejected value. */ \ ++ if (cilong != addr) \ ++ goto bad; \ ++ try.winsaddr[opt == CI_MS_WINS2] = 0; \ ++ } + + REJCIADDRS(CI_ADDRS, !go->neg_addr && go->old_addrs, + go->ouraddr, go->hisaddr); +@@ -1288,6 +1332,10 @@ ipcp_rejci(f, p, len) + + REJCIDNS(CI_MS_DNS2, req_dns2, go->dnsaddr[1]); + ++ REJCIWINS(CI_MS_WINS1, go->winsaddr[0]); ++ ++ REJCIWINS(CI_MS_WINS2, go->winsaddr[1]); ++ + /* + * If there are any remaining CIs, then this packet is bad. + */ diff --git a/ppp.spec b/ppp.spec index 76bcca7..145bff5 100644 --- a/ppp.spec +++ b/ppp.spec @@ -1,7 +1,7 @@ Summary: The PPP (Point-to-Point Protocol) daemon. Name: ppp Version: 2.4.4 -Release: 8%{?dist} +Release: 9%{?dist} License: BSD and LGPLv2+ and GPLv2+ and Public Domain Group: System Environment/Daemons Source0: ftp://ftp.samba.org/pub/ppp/ppp-%{version}.tar.gz @@ -27,6 +27,7 @@ Patch23: ppp-2.4.2-dontwriteetc.patch Patch24: ppp-2.4.4-closelog.patch Patch25: ppp-2.4.4-response_len.patch Patch26: ppp-2.4.4-new_speeds.patch +Patch27: ppp-2.4.4-bogus_dns_addr.patch BuildRoot: %{_tmppath}/%{name}-root BuildPrereq: pam-devel, libpcap-devel @@ -70,6 +71,7 @@ This package contains the header files for building plugins for ppp. %patch24 -p1 -b .closelog %patch25 -p1 -b .response_len %patch26 -p1 -b .new_speeds +%patch27 -p1 -b .bogus_dns_addr rm -f scripts/*.local rm -f scripts/*.change_resolv_conf @@ -134,6 +136,9 @@ rm -rf $RPM_BUILD_ROOT %doc PLUGINS %changelog +* Thu Dec 11 2008 Jiri Skala 2.4.4.-9 +- fixed #467004 PPP sometimes gets incorrect DNS servers for mobile broadband connections + * Thu Aug 28 2008 Tom "spot" Callaway 2.4.4-8 - fix license tag