diff options
Diffstat (limited to 'patches/ppp-2.4.7')
32 files changed, 2695 insertions, 0 deletions
diff --git a/patches/ppp-2.4.7/0001-adaptive_echos.patch b/patches/ppp-2.4.7/0001-adaptive_echos.patch new file mode 100644 index 000000000..c736a350d --- /dev/null +++ b/patches/ppp-2.4.7/0001-adaptive_echos.patch @@ -0,0 +1,69 @@ +From: Marco d'Itri <md@linux.it> +Date: Thu, 1 Jun 2017 16:18:34 +0200 +Subject: [PATCH] adaptive_echos + +--- + pppd/lcp.c | 19 +++++++++++++++++++ + pppd/pppd.8 | 5 +++++ + 2 files changed, 24 insertions(+) + +diff --git a/pppd/lcp.c b/pppd/lcp.c +index 8ed2778bfb67..c97a64b7774f 100644 +--- a/pppd/lcp.c ++++ b/pppd/lcp.c +@@ -73,6 +73,7 @@ static void lcp_delayed_up __P((void *)); + */ + int lcp_echo_interval = 0; /* Interval between LCP echo-requests */ + int lcp_echo_fails = 0; /* Tolerance to unanswered echo-requests */ ++bool lcp_echo_adaptive = 0; /* request echo only if the link was idle */ + bool lax_recv = 0; /* accept control chars in asyncmap */ + bool noendpoint = 0; /* don't send/accept endpoint discriminator */ + +@@ -151,6 +152,8 @@ static option_t lcp_option_list[] = { + OPT_PRIO }, + { "lcp-echo-interval", o_int, &lcp_echo_interval, + "Set time in seconds between LCP echo requests", OPT_PRIO }, ++ { "lcp-echo-adaptive", o_bool, &lcp_echo_adaptive, ++ "Suppress LCP echo requests if traffic was received", 1 }, + { "lcp-restart", o_int, &lcp_fsm[0].timeouttime, + "Set time in seconds between LCP retransmissions", OPT_PRIO }, + { "lcp-max-terminate", o_int, &lcp_fsm[0].maxtermtransmits, +@@ -2332,6 +2335,22 @@ LcpSendEchoRequest (f) + } + + /* ++ * If adaptive echos have been enabled, only send the echo request if ++ * no traffic was received since the last one. ++ */ ++ if (lcp_echo_adaptive) { ++ static unsigned int last_pkts_in = 0; ++ ++ update_link_stats(f->unit); ++ link_stats_valid = 0; ++ ++ if (link_stats.pkts_in != last_pkts_in) { ++ last_pkts_in = link_stats.pkts_in; ++ return; ++ } ++ } ++ ++ /* + * Make and send the echo request frame. + */ + if (f->state == OPENED) { +diff --git a/pppd/pppd.8 b/pppd/pppd.8 +index e2768b135273..b7fd0bdaab52 100644 +--- a/pppd/pppd.8 ++++ b/pppd/pppd.8 +@@ -558,6 +558,11 @@ to 1) if the \fIproxyarp\fR option is used, and will enable the + dynamic IP address option (i.e. set /proc/sys/net/ipv4/ip_dynaddr to + 1) in demand mode if the local address changes. + .TP ++.B lcp\-echo\-adaptive ++If this option is used with the \fIlcp\-echo\-failure\fR option then ++pppd will send LCP echo\-request frames only if no traffic was received ++from the peer since the last echo\-request was sent. ++.TP + .B lcp\-echo\-failure \fIn + If this option is given, pppd will presume the peer to be dead + if \fIn\fR LCP echo\-requests are sent without receiving a valid LCP diff --git a/patches/ppp-2.4.7/0002-Makefiles-cleanup.patch b/patches/ppp-2.4.7/0002-Makefiles-cleanup.patch new file mode 100644 index 000000000..94871e177 --- /dev/null +++ b/patches/ppp-2.4.7/0002-Makefiles-cleanup.patch @@ -0,0 +1,291 @@ +From: Marco d'Itri <md@linux.it> +Date: Thu, 1 Jun 2017 16:19:36 +0200 +Subject: [PATCH] Makefiles cleanup + +Factor-out $COPTS and $LDOPTS to allow distributions to easily override +them. Properly use $LDFLAGS when linking and $CFLAGS when compiling. +Do not strip the installed binaries: this should be done by the +packaging system if required. +--- + chat/Makefile.linux | 5 +++-- + pppd/Makefile.linux | 7 ++++--- + pppd/plugins/Makefile.linux | 4 ++-- + pppd/plugins/pppoatm/Makefile.linux | 4 ++-- + pppd/plugins/pppol2tp/Makefile.linux | 4 ++-- + pppd/plugins/radius/Makefile.linux | 16 +++++++++------- + pppd/plugins/rp-pppoe/Makefile.linux | 10 ++++++---- + pppdump/Makefile.linux | 9 ++++++--- + pppstats/Makefile.linux | 7 ++++--- + 9 files changed, 38 insertions(+), 28 deletions(-) + +diff --git a/chat/Makefile.linux b/chat/Makefile.linux +index 1065ac519576..a41d485b4168 100644 +--- a/chat/Makefile.linux ++++ b/chat/Makefile.linux +@@ -12,20 +12,21 @@ CDEFS= $(CDEF1) $(CDEF2) $(CDEF3) $(CDEF4) + + COPTS= -O2 -g -pipe + CFLAGS= $(COPTS) $(CDEFS) ++LDFLAGS=$(LDOPTS) + + INSTALL= install + + all: chat + + chat: chat.o +- $(CC) -o chat chat.o ++ $(CC) $(LDFLAGS) -o chat chat.o + + chat.o: chat.c + $(CC) -c $(CFLAGS) -o chat.o chat.c + + install: chat + mkdir -p $(BINDIR) $(MANDIR) +- $(INSTALL) -s -c chat $(BINDIR) ++ $(INSTALL) -c chat $(BINDIR) + $(INSTALL) -c -m 644 chat.8 $(MANDIR) + + clean: +diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux +index a74c914fd3ac..16b3ee879791 100644 +--- a/pppd/Makefile.linux ++++ b/pppd/Makefile.linux +@@ -83,6 +83,7 @@ INCLUDE_DIRS= -I../include + COMPILE_FLAGS= -DHAVE_PATHS_H -DIPX_CHANGE -DHAVE_MMAP + + CFLAGS= $(COPTS) $(COMPILE_FLAGS) $(INCLUDE_DIRS) '-DDESTDIR="@DESTDIR@"' ++LDFLAGS=$(LDOPTS) + + ifdef CHAPMS + CFLAGS += -DCHAPMS=1 +@@ -102,7 +103,7 @@ ifdef USE_SRP + CFLAGS += -DUSE_SRP -DOPENSSL -I/usr/local/ssl/include + LIBS += -lsrp -L/usr/local/ssl/lib -lcrypto + TARGETS += srp-entry +-EXTRAINSTALL = $(INSTALL) -s -c -m 555 srp-entry $(BINDIR)/srp-entry ++EXTRAINSTALL = $(INSTALL) -c -m 555 srp-entry $(BINDIR)/srp-entry + MANPAGES += srp-entry.8 + EXTRACLEAN += srp-entry.o + NEEDDES=y +@@ -208,13 +209,13 @@ all: $(TARGETS) + install: pppd + mkdir -p $(BINDIR) $(MANDIR) + $(EXTRAINSTALL) +- $(INSTALL) -s -c -m 555 pppd $(BINDIR)/pppd ++ $(INSTALL) -c -m 555 pppd $(BINDIR)/pppd + if chgrp pppusers $(BINDIR)/pppd 2>/dev/null; then \ + chmod o-rx,u+s $(BINDIR)/pppd; fi + $(INSTALL) -c -m 444 pppd.8 $(MANDIR) + + pppd: $(PPPDOBJS) +- $(CC) $(CFLAGS) $(LDFLAGS) -o pppd $(PPPDOBJS) $(LIBS) ++ $(CC) $(LDFLAGS) -o pppd $(PPPDOBJS) $(LIBS) + + srp-entry: srp-entry.c + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ srp-entry.c $(LIBS) +diff --git a/pppd/plugins/Makefile.linux b/pppd/plugins/Makefile.linux +index ab8cf50d9472..732cc8b411d2 100644 +--- a/pppd/plugins/Makefile.linux ++++ b/pppd/plugins/Makefile.linux +@@ -1,7 +1,7 @@ + #CC = gcc + COPTS = -O2 -g + CFLAGS = $(COPTS) -I.. -I../../include -fPIC +-LDFLAGS = -shared ++LDFLAGS = $(LDOPTS) + INSTALL = install + + DESTDIR = $(INSTROOT)@DESTDIR@ +@@ -30,7 +30,7 @@ all: $(PLUGINS) + for d in $(SUBDIRS); do $(MAKE) $(MFLAGS) -C $$d all; done + + %.so: %.c +- $(CC) -o $@ $(LDFLAGS) $(CFLAGS) $^ ++ $(CC) -o $@ $(LDFLAGS) -shared $(CFLAGS) $^ + + VERSION = $(shell awk -F '"' '/VERSION/ { print $$2; }' ../patchlevel.h) + +diff --git a/pppd/plugins/pppoatm/Makefile.linux b/pppd/plugins/pppoatm/Makefile.linux +index 20f62e631d23..002603c6cbef 100644 +--- a/pppd/plugins/pppoatm/Makefile.linux ++++ b/pppd/plugins/pppoatm/Makefile.linux +@@ -1,7 +1,7 @@ + #CC = gcc + COPTS = -O2 -g + CFLAGS = $(COPTS) -I../.. -I../../../include -fPIC +-LDFLAGS = -shared ++LDFLAGS = $(LDOPTS) + INSTALL = install + + #*********************************************************************** +@@ -33,7 +33,7 @@ endif + all: $(PLUGIN) + + $(PLUGIN): $(PLUGIN_OBJS) +- $(CC) $(CFLAGS) -o $@ -shared $^ $(LIBS) ++ $(CC) $(LDFLAGS) -o $@ -shared $^ $(LIBS) + + install: all + $(INSTALL) -d -m 755 $(LIBDIR) +diff --git a/pppd/plugins/pppol2tp/Makefile.linux b/pppd/plugins/pppol2tp/Makefile.linux +index ea3538e22d56..de5cc12e79c3 100644 +--- a/pppd/plugins/pppol2tp/Makefile.linux ++++ b/pppd/plugins/pppol2tp/Makefile.linux +@@ -1,7 +1,7 @@ + #CC = gcc + COPTS = -O2 -g + CFLAGS = $(COPTS) -I. -I../.. -I../../../include -fPIC +-LDFLAGS = -shared ++LDFLAGS = $(LDOPTS) + INSTALL = install + + #*********************************************************************** +@@ -16,7 +16,7 @@ PLUGINS := pppol2tp.so openl2tp.so + all: $(PLUGINS) + + %.so: %.o +- $(CC) $(CFLAGS) -o $@ -shared $^ $(LIBS) ++ $(CC) $(LDFLAGS) -o $@ -shared $^ $(LIBS) + + install: all + $(INSTALL) -d -m 755 $(LIBDIR) +diff --git a/pppd/plugins/radius/Makefile.linux b/pppd/plugins/radius/Makefile.linux +index 24ed3e580c4d..436ff2fd0c23 100644 +--- a/pppd/plugins/radius/Makefile.linux ++++ b/pppd/plugins/radius/Makefile.linux +@@ -12,7 +12,9 @@ VERSION = $(shell awk -F '"' '/VERSION/ { print $$2; }' ../../patchlevel.h) + INSTALL = install + + PLUGIN=radius.so radattr.so radrealms.so +-CFLAGS=-I. -I../.. -I../../../include -O2 -fPIC -DRC_LOG_FACILITY=LOG_DAEMON ++COPTS=-g -O2 ++CFLAGS = $(COPTS) -I. -I../.. -I../../../include -fPIC -DRC_LOG_FACILITY=LOG_DAEMON ++LDFLAGS= $(LDOPTS) + + # Uncomment the next line to include support for Microsoft's + # MS-CHAP authentication protocol. +@@ -36,20 +38,20 @@ all: $(PLUGIN) + + install: all + $(INSTALL) -d -m 755 $(LIBDIR) +- $(INSTALL) -s -c -m 755 radius.so $(LIBDIR) +- $(INSTALL) -s -c -m 755 radattr.so $(LIBDIR) +- $(INSTALL) -s -c -m 755 radrealms.so $(LIBDIR) ++ $(INSTALL) -c -m 755 radius.so $(LIBDIR) ++ $(INSTALL) -c -m 755 radattr.so $(LIBDIR) ++ $(INSTALL) -c -m 755 radrealms.so $(LIBDIR) + $(INSTALL) -c -m 444 pppd-radius.8 $(MANDIR) + $(INSTALL) -c -m 444 pppd-radattr.8 $(MANDIR) + + radius.so: radius.o libradiusclient.a +- $(CC) -o radius.so -shared radius.o libradiusclient.a ++ $(CC) $(LDFLAGS) -o radius.so -shared radius.o libradiusclient.a + + radattr.so: radattr.o +- $(CC) -o radattr.so -shared radattr.o ++ $(CC) $(LDFLAGS) -o radattr.so -shared radattr.o + + radrealms.so: radrealms.o +- $(CC) -o radrealms.so -shared radrealms.o ++ $(CC) $(LDFLAGS) -o radrealms.so -shared radrealms.o + + CLIENTOBJS = avpair.o buildreq.o config.o dict.o ip_util.o \ + clientid.o sendserver.o lock.o util.o md5.o +diff --git a/pppd/plugins/rp-pppoe/Makefile.linux b/pppd/plugins/rp-pppoe/Makefile.linux +index 5d7a2719545d..00e0af6da20c 100644 +--- a/pppd/plugins/rp-pppoe/Makefile.linux ++++ b/pppd/plugins/rp-pppoe/Makefile.linux +@@ -27,10 +27,12 @@ RP_VERSION=3.8p + + COPTS=-O2 -g + CFLAGS=$(COPTS) -I../../../include '-DRP_VERSION="$(RP_VERSION)"' ++LDFLAGS=$(LDOPTS) ++ + all: rp-pppoe.so pppoe-discovery + + pppoe-discovery: pppoe-discovery.o debug.o +- $(CC) -o pppoe-discovery pppoe-discovery.o debug.o ++ $(CC) $(LDFLAGS) -o pppoe-discovery pppoe-discovery.o debug.o + + pppoe-discovery.o: pppoe-discovery.c + $(CC) $(CFLAGS) -c -o pppoe-discovery.o pppoe-discovery.c +@@ -39,13 +41,13 @@ debug.o: debug.c + $(CC) $(CFLAGS) -c -o debug.o debug.c + + rp-pppoe.so: plugin.o discovery.o if.o common.o +- $(CC) -o rp-pppoe.so -shared plugin.o discovery.o if.o common.o ++ $(CC) $(LDFLAGS) -o rp-pppoe.so -shared $^ + + install: all + $(INSTALL) -d -m 755 $(LIBDIR) +- $(INSTALL) -s -c -m 4550 rp-pppoe.so $(LIBDIR) ++ $(INSTALL) -c -m 4550 rp-pppoe.so $(LIBDIR) + $(INSTALL) -d -m 755 $(BINDIR) +- $(INSTALL) -s -c -m 555 pppoe-discovery $(BINDIR) ++ $(INSTALL) -c -m 555 pppoe-discovery $(BINDIR) + + clean: + rm -f *.o *.so pppoe-discovery +diff --git a/pppdump/Makefile.linux b/pppdump/Makefile.linux +index ac028f6bf4f0..65e5c14914fb 100644 +--- a/pppdump/Makefile.linux ++++ b/pppdump/Makefile.linux +@@ -2,7 +2,10 @@ DESTDIR = $(INSTROOT)@DESTDIR@ + BINDIR = $(DESTDIR)/sbin + MANDIR = $(DESTDIR)/share/man/man8 + +-CFLAGS= -O -I../include/net ++COPTS=-O2 -g ++CFLAGS= $(COPTS) -I../include/net ++LDFLAGS=$(LDOPTS) ++ + OBJS = pppdump.o bsd-comp.o deflate.o zlib.o + + INSTALL= install +@@ -10,12 +13,12 @@ INSTALL= install + all: pppdump + + pppdump: $(OBJS) +- $(CC) -o pppdump $(OBJS) ++ $(CC) $(LDFLAGS) -o pppdump $(OBJS) + + clean: + rm -f pppdump $(OBJS) *~ + + install: + mkdir -p $(BINDIR) $(MANDIR) +- $(INSTALL) -s -c pppdump $(BINDIR) ++ $(INSTALL) -c pppdump $(BINDIR) + $(INSTALL) -c -m 444 pppdump.8 $(MANDIR) +diff --git a/pppstats/Makefile.linux b/pppstats/Makefile.linux +index cca6f0f61d87..9ec8e803665a 100644 +--- a/pppstats/Makefile.linux ++++ b/pppstats/Makefile.linux +@@ -10,23 +10,24 @@ PPPSTATSRCS = pppstats.c + PPPSTATOBJS = pppstats.o + + #CC = gcc +-COPTS = -O ++COPTS = -O2 -g + COMPILE_FLAGS = -I../include + LIBS = + + INSTALL= install + + CFLAGS = $(COPTS) $(COMPILE_FLAGS) ++LDFLAGS= $(LDOPTS) + + all: pppstats + + install: pppstats + -mkdir -p $(MANDIR) +- $(INSTALL) -s -c pppstats $(BINDIR) ++ $(INSTALL) -c pppstats $(BINDIR) + $(INSTALL) -c -m 444 pppstats.8 $(MANDIR) + + pppstats: $(PPPSTATSRCS) +- $(CC) $(CFLAGS) -o pppstats pppstats.c $(LIBS) ++ $(CC) $(LDFLAGS) $(CFLAGS) -o pppstats pppstats.c $(LIBS) + + clean: + rm -f pppstats *~ #* core diff --git a/patches/ppp-2.4.7/0003-Bug-306261-pppd-does-not-properly-close-dev-ppp-on-p.patch b/patches/ppp-2.4.7/0003-Bug-306261-pppd-does-not-properly-close-dev-ppp-on-p.patch new file mode 100644 index 000000000..4c598ea63 --- /dev/null +++ b/patches/ppp-2.4.7/0003-Bug-306261-pppd-does-not-properly-close-dev-ppp-on-p.patch @@ -0,0 +1,38 @@ +From: Simon Peter <dn.tlp@gmx.net> +Date: Fri, 2 Jun 2017 11:03:30 +0200 +Subject: [PATCH] Bug#306261: pppd does not properly close /dev/ppp on persist + +When using the kernel PPPoE driver, pppd never +closes /dev/ppp when the link has come down. + +It opens superfluous fds to the device each time it re-opens the +connection, with the unclosed ones falsely reported always ready for +data by select(). + +This makes pppd eat up 100% CPU time after the first persist because of +the always instantly returning select() on the unclosed fds. + +The problem also occurs with the upstream version, but does not occur +when a pty/tty device is used for the ppp connection. +--- + pppd/sys-linux.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/pppd/sys-linux.c b/pppd/sys-linux.c +index e5e9baf8821f..f92174854207 100644 +--- a/pppd/sys-linux.c ++++ b/pppd/sys-linux.c +@@ -458,6 +458,13 @@ int generic_establish_ppp (int fd) + if (new_style_driver) { + int flags; + ++ /* if a ppp_fd is already open, close it first */ ++ if(ppp_fd > 0) { ++ close(ppp_fd); ++ remove_fd(ppp_fd); ++ ppp_fd = -1; ++ } ++ + /* Open an instance of /dev/ppp and connect the channel to it */ + if (ioctl(fd, PPPIOCGCHAN, &chindex) == -1) { + error("Couldn't get channel number: %m"); diff --git a/patches/ppp-2.4.7/0004-Bug-284382-ppp-linkpidfile-is-not-created-upon-detac.patch b/patches/ppp-2.4.7/0004-Bug-284382-ppp-linkpidfile-is-not-created-upon-detac.patch new file mode 100644 index 000000000..cc65303ad --- /dev/null +++ b/patches/ppp-2.4.7/0004-Bug-284382-ppp-linkpidfile-is-not-created-upon-detac.patch @@ -0,0 +1,44 @@ +From: "herbert@gondor.apana.org.au" <herbert@gondor.apana.org.au> +Date: Fri, 2 Jun 2017 11:08:21 +0200 +Subject: [PATCH] Bug#284382: ppp: linkpidfile is not created upon detachment + +Package: ppp +Version: 2.4.2+20040428-2 +Severity: wishlist + +When pppd detaches from the parent normally, that is, without nodetach +or updetach set, the linkpidfile is not created even when linkname is +set. + +This is because the create_linkpidfile call in detach() is only made +if the linkpidfile is filled in. However, linkpidfile is never filled +in until create_linkpidfile has been called. + +IMHO the call should be made uncondtionally in detach() since +create_linkpidfile does its own check on linkname anyway. + +Please note that the version of pppd in woody always wrote the +linkpidfile after detaching. It did so in main() however. That +call has now been removed which is why I'm seeing this problem. + +[...] + +-- +--- + pppd/main.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/pppd/main.c b/pppd/main.c +index 6d50d1bac1d9..439fedced8ff 100644 +--- a/pppd/main.c ++++ b/pppd/main.c +@@ -770,8 +770,7 @@ detach() + /* update pid files if they have been written already */ + if (pidfilename[0]) + create_pidfile(pid); +- if (linkpidfile[0]) +- create_linkpidfile(pid); ++ create_linkpidfile(pid); + exit(0); /* parent dies */ + } + setsid(); diff --git a/patches/ppp-2.4.7/0005-support-building-pppdump-with-the-system-zlib.patch b/patches/ppp-2.4.7/0005-support-building-pppdump-with-the-system-zlib.patch new file mode 100644 index 000000000..ef5ef1e6d --- /dev/null +++ b/patches/ppp-2.4.7/0005-support-building-pppdump-with-the-system-zlib.patch @@ -0,0 +1,57 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:09:30 +0200 +Subject: [PATCH] support building pppdump with the system zlib + +--- + pppdump/Makefile.linux | 28 ++++++++++++++++++++++++++-- + 1 file changed, 26 insertions(+), 2 deletions(-) + +diff --git a/pppdump/Makefile.linux b/pppdump/Makefile.linux +index 65e5c14914fb..87777fab5e94 100644 +--- a/pppdump/Makefile.linux ++++ b/pppdump/Makefile.linux +@@ -2,18 +2,42 @@ DESTDIR = $(INSTROOT)@DESTDIR@ + BINDIR = $(DESTDIR)/sbin + MANDIR = $(DESTDIR)/share/man/man8 + ++DO_DEFLATE=y ++DO_BSD_COMPRESS=y ++HAVE_ZLIB=n ++ + COPTS=-O2 -g + CFLAGS= $(COPTS) -I../include/net + LDFLAGS=$(LDOPTS) + +-OBJS = pppdump.o bsd-comp.o deflate.o zlib.o ++OBJS = pppdump.o ++LIBS = ++ ++ifdef DO_DEFLATE ++CFLAGS += -DDO_DEFLATE=1 ++OBJS += deflate.o ++ifdef HAVE_ZLIB ++LIBS += -lz ++else ++OBJS += zlib.o ++endif ++else ++CFLAGS += -DDO_DEFLATE=0 ++endif ++ ++ifdef DO_BSD_COMPRESS ++CFLAGS += -DDO_BSD_COMPRESS=1 ++OBJS += bsd-comp.o ++else ++CFLAGS += -DDO_BSD_COMPRESS=0 ++endif + + INSTALL= install + + all: pppdump + + pppdump: $(OBJS) +- $(CC) $(LDFLAGS) -o pppdump $(OBJS) ++ $(CC) $(LDFLAGS) -o pppdump $(OBJS) $(LIBS) + + clean: + rm -f pppdump $(OBJS) *~ diff --git a/patches/ppp-2.4.7/0006-disable-unneeded-code-in-the-pppoatm-plugin.patch b/patches/ppp-2.4.7/0006-disable-unneeded-code-in-the-pppoatm-plugin.patch new file mode 100644 index 000000000..55e262592 --- /dev/null +++ b/patches/ppp-2.4.7/0006-disable-unneeded-code-in-the-pppoatm-plugin.patch @@ -0,0 +1,88 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:10:13 +0200 +Subject: [PATCH] disable unneeded code in the pppoatm plugin + +This patch halves the size of the PPPoA plugin by disabling features +which are never used with normal DSL connections (i.e. parsing of QoS +configuration directives and DNS resolution of VP/VC addresses). +It is especially useful for install images and embedded systems. + +A next step could be removing text2qos.c, text2atm.c, misc.c and ans.c +and encourage users interested in the complete features to link the +plugin with the real libatm. I really doubt anybody cares, anyway. +--- + pppd/plugins/pppoatm/Makefile.linux | 4 ++++ + pppd/plugins/pppoatm/pppoatm.c | 4 ++++ + pppd/plugins/pppoatm/text2atm.c | 4 ++++ + 3 files changed, 12 insertions(+) + +diff --git a/pppd/plugins/pppoatm/Makefile.linux b/pppd/plugins/pppoatm/Makefile.linux +index 002603c6cbef..76d81aced70a 100644 +--- a/pppd/plugins/pppoatm/Makefile.linux ++++ b/pppd/plugins/pppoatm/Makefile.linux +@@ -25,9 +25,13 @@ ifdef HAVE_LIBATM + LIBS := -latm + else + CFLAGS += -I. ++PLUGIN_OBJS += text2atm.o ++ifdef USE_FULL_ATM_RESOLVER ++CFLAGS += -DUSE_FULL_ATM_RESOLVER + PLUGIN_OBJS += text2qos.o text2atm.o misc.o ans.o + LIBS := -lresolv + endif ++endif + + #********* + all: $(PLUGIN) +diff --git a/pppd/plugins/pppoatm/pppoatm.c b/pppd/plugins/pppoatm/pppoatm.c +index d693350bc473..a7560e9fb0c6 100644 +--- a/pppd/plugins/pppoatm/pppoatm.c ++++ b/pppd/plugins/pppoatm/pppoatm.c +@@ -142,8 +142,12 @@ static int connect_pppoatm(void) + qos.txtp.traffic_class = qos.rxtp.traffic_class = ATM_UBR; + /* TODO: support simplified QoS setting */ + if (qosstr != NULL) ++#ifdef USE_FULL_ATM_RESOLVER + if (text2qos(qosstr, &qos, 0)) + fatal("Can't parse QoS: \"%s\""); ++#else ++ fatal("qos support has not been compiled in"); ++#endif + qos.txtp.max_sdu = lcp_allowoptions[0].mru + pppoatm_overhead(); + qos.rxtp.max_sdu = lcp_wantoptions[0].mru + pppoatm_overhead(); + qos.aal = ATM_AAL5; +diff --git a/pppd/plugins/pppoatm/text2atm.c b/pppd/plugins/pppoatm/text2atm.c +index c283b52b4120..f7fa8cac3a6f 100644 +--- a/pppd/plugins/pppoatm/text2atm.c ++++ b/pppd/plugins/pppoatm/text2atm.c +@@ -72,6 +72,7 @@ static int try_pvc(const char *text,struct sockaddr_atmpvc *addr,int flags) + } + + ++#ifdef USE_FULL_ATM_RESOLVER + static int do_try_nsap(const char *text,struct sockaddr_atmsvc *addr,int flags) + { + const char *walk; +@@ -221,6 +222,7 @@ static int try_name(const char *text,struct sockaddr *addr,int length, + (void) fclose(file); + return result; + } ++#endif + + + int text2atm(const char *text,struct sockaddr *addr,int length,int flags) +@@ -234,6 +236,7 @@ int text2atm(const char *text,struct sockaddr *addr,int length,int flags) + result = try_pvc(text,(struct sockaddr_atmpvc *) addr,flags); + if (result != TRY_OTHER) return result; + } ++#ifdef USE_FULL_ATM_RESOLVER + if ((flags & T2A_SVC) && length >= sizeof(struct sockaddr_atmsvc)) { + result = try_nsap(text,(struct sockaddr_atmsvc *) addr,flags); + if (result != TRY_OTHER) return result; +@@ -245,5 +248,6 @@ int text2atm(const char *text,struct sockaddr *addr,int length,int flags) + if (result == TRY_OTHER && !(flags & T2A_LOCAL)) + result = ans_byname(text,(struct sockaddr_atmsvc *) addr,length,flags); + if (result != TRY_OTHER) return result; ++#endif + return -1; + } diff --git a/patches/ppp-2.4.7/0007-cosmetic-cleanup-of-the-pppoatm-plugin.patch b/patches/ppp-2.4.7/0007-cosmetic-cleanup-of-the-pppoatm-plugin.patch new file mode 100644 index 000000000..551bb2dbb --- /dev/null +++ b/patches/ppp-2.4.7/0007-cosmetic-cleanup-of-the-pppoatm-plugin.patch @@ -0,0 +1,85 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:10:33 +0200 +Subject: [PATCH] cosmetic cleanup of the pppoatm plugin + +Removed some debugging messages and generally cleaned up the source. +--- + pppd/plugins/pppoatm/pppoatm.c | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +diff --git a/pppd/plugins/pppoatm/pppoatm.c b/pppd/plugins/pppoatm/pppoatm.c +index a7560e9fb0c6..90d0c9a85d9f 100644 +--- a/pppd/plugins/pppoatm/pppoatm.c ++++ b/pppd/plugins/pppoatm/pppoatm.c +@@ -70,18 +70,20 @@ static int setdevname_pppoatm(const char *cp, const char **argv, int doit) + { + struct sockaddr_atmpvc addr; + extern struct stat devstat; ++ + if (device_got_set) + return 0; +- //info("PPPoATM setdevname_pppoatm: '%s'", cp); ++ + memset(&addr, 0, sizeof addr); + if (text2atm(cp, (struct sockaddr *) &addr, sizeof(addr), +- T2A_PVC | T2A_NAME) < 0) { +- if(doit) +- info("atm does not recognize: %s", cp); ++ T2A_PVC | T2A_NAME | T2A_WILDCARD) < 0) { ++ if (doit) ++ info("cannot parse the ATM address: %s", cp); + return 0; +- } +- if (!doit) return 1; +- //if (!dev_set_ok()) return -1; ++ } ++ if (!doit) ++ return 1; ++ + memcpy(&pvcaddr, &addr, sizeof pvcaddr); + strlcpy(devnam, cp, sizeof devnam); + devstat.st_mode = S_IFSOCK; +@@ -93,7 +95,6 @@ static int setdevname_pppoatm(const char *cp, const char **argv, int doit) + lcp_allowoptions[0].neg_asyncmap = 0; + lcp_wantoptions[0].neg_pcompression = 0; + } +- info("PPPoATM setdevname_pppoatm - SUCCESS:%s", cp); + device_got_set = 1; + return 1; + } +@@ -108,6 +109,7 @@ static void no_device_given_pppoatm(void) + static void set_line_discipline_pppoatm(int fd) + { + struct atm_backend_ppp be; ++ + be.backend_num = ATM_BACKEND_PPP; + if (!llc_encaps) + be.encaps = PPPOATM_ENCAPS_VC; +@@ -115,6 +117,7 @@ static void set_line_discipline_pppoatm(int fd) + be.encaps = PPPOATM_ENCAPS_LLC; + else + be.encaps = PPPOATM_ENCAPS_AUTODETECT; ++ + if (ioctl(fd, ATM_SETBACKEND, &be) < 0) + fatal("ioctl(ATM_SETBACKEND): %m"); + } +@@ -172,7 +175,7 @@ static void disconnect_pppoatm(void) + + void plugin_init(void) + { +-#if defined(__linux__) ++#ifdef linux + extern int new_style_driver; /* From sys-linux.c */ + if (!ppp_available() && !new_style_driver) + fatal("Kernel doesn't support ppp_generic - " +@@ -180,9 +183,9 @@ void plugin_init(void) + #else + fatal("No PPPoATM support on this OS"); + #endif +- info("PPPoATM plugin_init"); + add_options(pppoa_options); + } ++ + struct channel pppoa_channel = { + options: pppoa_options, + process_extra_options: NULL, diff --git a/patches/ppp-2.4.7/0008-pppoe_noads.patch b/patches/ppp-2.4.7/0008-pppoe_noads.patch new file mode 100644 index 000000000..7274b2de4 --- /dev/null +++ b/patches/ppp-2.4.7/0008-pppoe_noads.patch @@ -0,0 +1,22 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:11:22 +0200 +Subject: [PATCH] pppoe_noads + +--- + pppd/plugins/rp-pppoe/plugin.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/pppd/plugins/rp-pppoe/plugin.c b/pppd/plugins/rp-pppoe/plugin.c +index a8c2bb4f4a6a..c4c85b462afd 100644 +--- a/pppd/plugins/rp-pppoe/plugin.c ++++ b/pppd/plugins/rp-pppoe/plugin.c +@@ -376,9 +376,6 @@ plugin_init(void) + } + + add_options(Options); +- +- info("RP-PPPoE plugin version %s compiled against pppd %s", +- RP_VERSION, VERSION); + } + + void pppoe_check_options(void) diff --git a/patches/ppp-2.4.7/0009-make-_PATH_CONNERRS-world-readable.patch b/patches/ppp-2.4.7/0009-make-_PATH_CONNERRS-world-readable.patch new file mode 100644 index 000000000..2c6b0a7e2 --- /dev/null +++ b/patches/ppp-2.4.7/0009-make-_PATH_CONNERRS-world-readable.patch @@ -0,0 +1,22 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:12:17 +0200 +Subject: [PATCH] make _PATH_CONNERRS world readable + +There is nothing security-sensitive there. +--- + pppd/main.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/pppd/main.c b/pppd/main.c +index 439fedced8ff..23d21d427df7 100644 +--- a/pppd/main.c ++++ b/pppd/main.c +@@ -1678,7 +1678,7 @@ device_script(program, in, out, dont_wait) + if (log_to_fd >= 0) + errfd = log_to_fd; + else +- errfd = open(_PATH_CONNERRS, O_WRONLY | O_APPEND | O_CREAT, 0600); ++ errfd = open(_PATH_CONNERRS, O_WRONLY | O_APPEND | O_CREAT, 0644); + + ++conn_running; + pid = safe_fork(in, out, errfd); diff --git a/patches/ppp-2.4.7/0010-Correct-unkown-unknown-typo.patch b/patches/ppp-2.4.7/0010-Correct-unkown-unknown-typo.patch new file mode 100644 index 000000000..450b05e9d --- /dev/null +++ b/patches/ppp-2.4.7/0010-Correct-unkown-unknown-typo.patch @@ -0,0 +1,39 @@ +From: Chris Boot <bootc@debian.org> +Date: Fri, 2 Jun 2017 11:12:56 +0200 +Subject: [PATCH] Correct unkown => unknown typo + +--- + pppd/plugins/radius/config.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/pppd/plugins/radius/config.c b/pppd/plugins/radius/config.c +index a29e5e8da909..f892ca7b1bf5 100644 +--- a/pppd/plugins/radius/config.c ++++ b/pppd/plugins/radius/config.c +@@ -271,7 +271,7 @@ char *rc_conf_str(char *optname) + option = find_option(optname, OT_STR); + + if (option == NULL) +- fatal("rc_conf_str: unkown config option requested: %s", optname); ++ fatal("rc_conf_str: unknown config option requested: %s", optname); + return (char *)option->val; + } + +@@ -282,7 +282,7 @@ int rc_conf_int(char *optname) + option = find_option(optname, OT_INT|OT_AUO); + + if (option == NULL) +- fatal("rc_conf_int: unkown config option requested: %s", optname); ++ fatal("rc_conf_int: unknown config option requested: %s", optname); + return *((int *)option->val); + } + +@@ -293,7 +293,7 @@ SERVER *rc_conf_srv(char *optname) + option = find_option(optname, OT_SRV); + + if (option == NULL) +- fatal("rc_conf_srv: unkown config option requested: %s", optname); ++ fatal("rc_conf_srv: unknown config option requested: %s", optname); + return (SERVER *)option->val; + } + diff --git a/patches/ppp-2.4.7/0011-pppoe-custom-host-uniq-tag.patch b/patches/ppp-2.4.7/0011-pppoe-custom-host-uniq-tag.patch new file mode 100644 index 000000000..9b4e4a796 --- /dev/null +++ b/patches/ppp-2.4.7/0011-pppoe-custom-host-uniq-tag.patch @@ -0,0 +1,298 @@ +From: Matteo Croce <matteo@openwrt.org> +Date: Sat, 21 Nov 2015 18:45:43 +0100 +Subject: [PATCH] pppoe: custom host-uniq tag + +Add pppoe 'host-uniq' option to set an arbitrary +host-uniq tag instead of the pppd pid. +Some ISPs use such tag to authenticate the CPE, +so it must be set to a proper value to connect. + +Signed-off-by: Matteo Croce <matteo@openwrt.org> +Signed-off-by: Jo-Philipp Wich <jow@openwrt.org> +--- + pppd/plugins/rp-pppoe/common.c | 14 ++++----- + pppd/plugins/rp-pppoe/discovery.c | 51 +++++++++++++-------------------- + pppd/plugins/rp-pppoe/plugin.c | 7 ++++- + pppd/plugins/rp-pppoe/pppoe-discovery.c | 38 +++++++++++++++--------- + pppd/plugins/rp-pppoe/pppoe.h | 31 +++++++++++++++++++- + 5 files changed, 86 insertions(+), 55 deletions(-) + +diff --git a/pppd/plugins/rp-pppoe/common.c b/pppd/plugins/rp-pppoe/common.c +index 89c633c773f9..8f175ece345b 100644 +--- a/pppd/plugins/rp-pppoe/common.c ++++ b/pppd/plugins/rp-pppoe/common.c +@@ -119,15 +119,11 @@ sendPADT(PPPoEConnection *conn, char const *msg) + conn->session = 0; + + /* If we're using Host-Uniq, copy it over */ +- if (conn->useHostUniq) { +- PPPoETag hostUniq; +- pid_t pid = getpid(); +- hostUniq.type = htons(TAG_HOST_UNIQ); +- hostUniq.length = htons(sizeof(pid)); +- memcpy(hostUniq.payload, &pid, sizeof(pid)); +- memcpy(cursor, &hostUniq, sizeof(pid) + TAG_HDR_SIZE); +- cursor += sizeof(pid) + TAG_HDR_SIZE; +- plen += sizeof(pid) + TAG_HDR_SIZE; ++ if (conn->hostUniq.length) { ++ int len = ntohs(conn->hostUniq.length); ++ memcpy(cursor, &conn->hostUniq, len + TAG_HDR_SIZE); ++ cursor += len + TAG_HDR_SIZE; ++ plen += len + TAG_HDR_SIZE; + } + + /* Copy error message */ +diff --git a/pppd/plugins/rp-pppoe/discovery.c b/pppd/plugins/rp-pppoe/discovery.c +index 04877cb8295f..5db8d0defc37 100644 +--- a/pppd/plugins/rp-pppoe/discovery.c ++++ b/pppd/plugins/rp-pppoe/discovery.c +@@ -80,13 +80,10 @@ static void + parseForHostUniq(UINT16_t type, UINT16_t len, unsigned char *data, + void *extra) + { +- int *val = (int *) extra; +- if (type == TAG_HOST_UNIQ && len == sizeof(pid_t)) { +- pid_t tmp; +- memcpy(&tmp, data, len); +- if (tmp == getpid()) { +- *val = 1; +- } ++ PPPoETag *tag = extra; ++ ++ if (type == TAG_HOST_UNIQ && len == ntohs(tag->length)) { ++ tag->length = memcmp(data, tag->payload, len); + } + } + +@@ -104,16 +101,16 @@ parseForHostUniq(UINT16_t type, UINT16_t len, unsigned char *data, + static int + packetIsForMe(PPPoEConnection *conn, PPPoEPacket *packet) + { +- int forMe = 0; ++ PPPoETag hostUniq = conn->hostUniq; + + /* If packet is not directed to our MAC address, forget it */ + if (memcmp(packet->ethHdr.h_dest, conn->myEth, ETH_ALEN)) return 0; + + /* If we're not using the Host-Unique tag, then accept the packet */ +- if (!conn->useHostUniq) return 1; ++ if (!conn->hostUniq.length) return 1; + +- parsePacket(packet, parseForHostUniq, &forMe); +- return forMe; ++ parsePacket(packet, parseForHostUniq, &hostUniq); ++ return !hostUniq.length; + } + + /********************************************************************** +@@ -301,16 +298,12 @@ sendPADI(PPPoEConnection *conn) + } + + /* If we're using Host-Uniq, copy it over */ +- if (conn->useHostUniq) { +- PPPoETag hostUniq; +- pid_t pid = getpid(); +- hostUniq.type = htons(TAG_HOST_UNIQ); +- hostUniq.length = htons(sizeof(pid)); +- memcpy(hostUniq.payload, &pid, sizeof(pid)); +- CHECK_ROOM(cursor, packet.payload, sizeof(pid) + TAG_HDR_SIZE); +- memcpy(cursor, &hostUniq, sizeof(pid) + TAG_HDR_SIZE); +- cursor += sizeof(pid) + TAG_HDR_SIZE; +- plen += sizeof(pid) + TAG_HDR_SIZE; ++ if (conn->hostUniq.length) { ++ int len = ntohs(conn->hostUniq.length); ++ CHECK_ROOM(cursor, packet.payload, len + TAG_HDR_SIZE); ++ memcpy(cursor, &conn->hostUniq, len + TAG_HDR_SIZE); ++ cursor += len + TAG_HDR_SIZE; ++ plen += len + TAG_HDR_SIZE; + } + + /* Add our maximum MTU/MRU */ +@@ -478,16 +471,12 @@ sendPADR(PPPoEConnection *conn) + cursor += namelen + TAG_HDR_SIZE; + + /* If we're using Host-Uniq, copy it over */ +- if (conn->useHostUniq) { +- PPPoETag hostUniq; +- pid_t pid = getpid(); +- hostUniq.type = htons(TAG_HOST_UNIQ); +- hostUniq.length = htons(sizeof(pid)); +- memcpy(hostUniq.payload, &pid, sizeof(pid)); +- CHECK_ROOM(cursor, packet.payload, sizeof(pid)+TAG_HDR_SIZE); +- memcpy(cursor, &hostUniq, sizeof(pid) + TAG_HDR_SIZE); +- cursor += sizeof(pid) + TAG_HDR_SIZE; +- plen += sizeof(pid) + TAG_HDR_SIZE; ++ if (conn->hostUniq.length) { ++ int len = ntohs(conn->hostUniq.length); ++ CHECK_ROOM(cursor, packet.payload, len+TAG_HDR_SIZE); ++ memcpy(cursor, &conn->hostUniq, len + TAG_HDR_SIZE); ++ cursor += len + TAG_HDR_SIZE; ++ plen += len + TAG_HDR_SIZE; + } + + /* Add our maximum MTU/MRU */ +diff --git a/pppd/plugins/rp-pppoe/plugin.c b/pppd/plugins/rp-pppoe/plugin.c +index c4c85b462afd..1a7e1e1b4e53 100644 +--- a/pppd/plugins/rp-pppoe/plugin.c ++++ b/pppd/plugins/rp-pppoe/plugin.c +@@ -68,6 +68,7 @@ static char *existingSession = NULL; + static int printACNames = 0; + static char *pppoe_reqd_mac = NULL; + unsigned char pppoe_reqd_mac_addr[6]; ++static char *host_uniq = NULL; + + static int PPPoEDevnameHook(char *cmd, char **argv, int doit); + static option_t Options[] = { +@@ -85,6 +86,8 @@ static option_t Options[] = { + "Be verbose about discovered access concentrators"}, + { "pppoe-mac", o_string, &pppoe_reqd_mac, + "Only connect to specified MAC address" }, ++ { "host-uniq", o_string, &host_uniq, ++ "Specify custom Host-Uniq" }, + { NULL } + }; + int (*OldDevnameHook)(char *cmd, char **argv, int doit) = NULL; +@@ -110,7 +113,6 @@ PPPOEInitDevice(void) + conn->ifName = devnam; + conn->discoverySocket = -1; + conn->sessionSocket = -1; +- conn->useHostUniq = 1; + conn->printACNames = printACNames; + conn->discoveryTimeout = PADI_TIMEOUT; + return 1; +@@ -166,6 +168,9 @@ PPPOEConnectDevice(void) + if (lcp_wantoptions[0].mru > ifr.ifr_mtu - TOTAL_OVERHEAD) + lcp_wantoptions[0].mru = ifr.ifr_mtu - TOTAL_OVERHEAD; + ++ if (host_uniq && !parseHostUniq(host_uniq, &conn->hostUniq)) ++ fatal("Illegal value for host-uniq option"); ++ + conn->acName = acName; + conn->serviceName = pppd_pppoe_service; + strlcpy(ppp_devnam, devnam, sizeof(ppp_devnam)); +diff --git a/pppd/plugins/rp-pppoe/pppoe-discovery.c b/pppd/plugins/rp-pppoe/pppoe-discovery.c +index 3d3bf4eecc81..f4f527128c2f 100644 +--- a/pppd/plugins/rp-pppoe/pppoe-discovery.c ++++ b/pppd/plugins/rp-pppoe/pppoe-discovery.c +@@ -347,7 +347,7 @@ packetIsForMe(PPPoEConnection *conn, PPPoEPacket *packet) + if (memcmp(packet->ethHdr.h_dest, conn->myEth, ETH_ALEN)) return 0; + + /* If we're not using the Host-Unique tag, then accept the packet */ +- if (!conn->useHostUniq) return 1; ++ if (!conn->hostUniq.length) return 1; + + parsePacket(packet, parseForHostUniq, &forMe); + return forMe; +@@ -473,16 +473,12 @@ sendPADI(PPPoEConnection *conn) + cursor += namelen + TAG_HDR_SIZE; + + /* If we're using Host-Uniq, copy it over */ +- if (conn->useHostUniq) { +- PPPoETag hostUniq; +- pid_t pid = getpid(); +- hostUniq.type = htons(TAG_HOST_UNIQ); +- hostUniq.length = htons(sizeof(pid)); +- memcpy(hostUniq.payload, &pid, sizeof(pid)); +- CHECK_ROOM(cursor, packet.payload, sizeof(pid) + TAG_HDR_SIZE); +- memcpy(cursor, &hostUniq, sizeof(pid) + TAG_HDR_SIZE); +- cursor += sizeof(pid) + TAG_HDR_SIZE; +- plen += sizeof(pid) + TAG_HDR_SIZE; ++ if (conn->hostUniq.length) { ++ int len = ntohs(conn->hostUniq.length); ++ CHECK_ROOM(cursor, packet.payload, len + TAG_HDR_SIZE); ++ memcpy(cursor, &conn->hostUniq, len + TAG_HDR_SIZE); ++ cursor += len + TAG_HDR_SIZE; ++ plen += len + TAG_HDR_SIZE; + } + + packet.length = htons(plen); +@@ -644,7 +640,7 @@ int main(int argc, char *argv[]) + + memset(conn, 0, sizeof(PPPoEConnection)); + +- while ((opt = getopt(argc, argv, "I:D:VUAS:C:h")) > 0) { ++ while ((opt = getopt(argc, argv, "I:D:VUW:AS:C:h")) > 0) { + switch(opt) { + case 'S': + conn->serviceName = xstrdup(optarg); +@@ -653,7 +649,23 @@ int main(int argc, char *argv[]) + conn->acName = xstrdup(optarg); + break; + case 'U': +- conn->useHostUniq = 1; ++ if(conn->hostUniq.length) { ++ fprintf(stderr, "-U and -W are mutually exclusive\n"); ++ exit(EXIT_FAILURE); ++ } ++ char pidbuf[5]; ++ snprintf(pidbuf, sizeof(pidbuf), "%04x", getpid()); ++ parseHostUniq(pidbuf, &conn->hostUniq); ++ break; ++ case 'W': ++ if(conn->hostUniq.length) { ++ fprintf(stderr, "-U and -W are mutually exclusive\n"); ++ exit(EXIT_FAILURE); ++ } ++ if (!parseHostUniq(optarg, &conn->hostUniq)) { ++ fprintf(stderr, "Invalid host-uniq argument: %s\n", optarg); ++ exit(EXIT_FAILURE); ++ } + break; + case 'D': + conn->debugFile = fopen(optarg, "w"); +diff --git a/pppd/plugins/rp-pppoe/pppoe.h b/pppd/plugins/rp-pppoe/pppoe.h +index 9ab2eee3914c..86d2b1e47a25 100644 +--- a/pppd/plugins/rp-pppoe/pppoe.h ++++ b/pppd/plugins/rp-pppoe/pppoe.h +@@ -21,6 +21,8 @@ + + #include <stdio.h> /* For FILE */ + #include <sys/types.h> /* For pid_t */ ++#include <ctype.h> ++#include <string.h> + + /* How do we access raw Ethernet devices? */ + #undef USE_LINUX_PACKET +@@ -235,7 +237,7 @@ typedef struct PPPoEConnectionStruct { + char *serviceName; /* Desired service name, if any */ + char *acName; /* Desired AC name, if any */ + int synchronous; /* Use synchronous PPP */ +- int useHostUniq; /* Use Host-Uniq tag */ ++ PPPoETag hostUniq; /* Use Host-Uniq tag */ + int printACNames; /* Just print AC names */ + FILE *debugFile; /* Debug file for dumping packets */ + int numPADOs; /* Number of PADO packets received */ +@@ -291,6 +293,33 @@ void pppoe_printpkt(PPPoEPacket *packet, + void (*printer)(void *, char *, ...), void *arg); + void pppoe_log_packet(const char *prefix, PPPoEPacket *packet); + ++static inline int parseHostUniq(const char *uniq, PPPoETag *tag) ++{ ++ int i, len = strlen(uniq); ++ ++#define hex(x) \ ++ (((x) <= '9') ? ((x) - '0') : \ ++ (((x) <= 'F') ? ((x) - 'A' + 10) : \ ++ ((x) - 'a' + 10))) ++ ++ if (len % 2) ++ return 0; ++ ++ for (i = 0; i < len; i += 2) ++ { ++ if (!isxdigit(uniq[i]) || !isxdigit(uniq[i+1])) ++ return 0; ++ ++ tag->payload[i / 2] = (char)(16 * hex(uniq[i]) + hex(uniq[i+1])); ++ } ++ ++#undef hex ++ ++ tag->type = htons(TAG_HOST_UNIQ); ++ tag->length = htons(len / 2); ++ return 1; ++} ++ + #define SET_STRING(var, val) do { if (var) free(var); var = strDup(val); } while(0); + + #define CHECK_ROOM(cursor, start, len) \ diff --git a/patches/ppp-2.4.7/0012-scripts_redialer.patch b/patches/ppp-2.4.7/0012-scripts_redialer.patch new file mode 100644 index 000000000..19b963bae --- /dev/null +++ b/patches/ppp-2.4.7/0012-scripts_redialer.patch @@ -0,0 +1,162 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:14:10 +0200 +Subject: [PATCH] scripts_redialer + +--- + scripts/redialer | 133 ++++++++++++++++++++++--------------------------------- + 1 file changed, 53 insertions(+), 80 deletions(-) + +diff --git a/scripts/redialer b/scripts/redialer +index 5bbde4e9da4e..c0b748ad0e53 100755 +--- a/scripts/redialer ++++ b/scripts/redialer +@@ -1,96 +1,69 @@ + #!/bin/sh +-################################################################### + # +-# These parameters control the attack dialing sequence. ++# A chatscript that will attempt to dial multiple numbers in sequence, until ++# you get connected. + # +-# Maximum number of attempts to reach the telephone number(s) +-MAX_ATTEMPTS=10 +- +-# Delay between each of the attempts. This is a parameter to sleep +-# so use "15s" for 15 seconds, "1m" for 1 minute, etc. +-SLEEP_DELAY=15s +- +-################################################################### ++# To use: edit /etc/peers/provider, and change the connect line to read: ++# connect "/usr/local/bin/redialer" + # +-# This is a list of telephone numbers. Add new numbers if you wish +-# and see the function 'callall' below for the dial process. +-PHONE1=555-1212 +-PHONE2=411 ++# See below for configuration. + +-################################################################### ++# This is a list of chatscripts to use to get connected, and (optional) ++# telephone numbers to call for each of those chatscripts. + # +-# If you use the ppp-on script, then these are passed to this routine +-# automatically. There is no need to define them here. If not, then +-# you will need to set the values. +-# +-ACCOUNT=my_account_name +-PASSWORD=my_password ++# Note that in the chatscripts, you may use #NUMBER#, this will be replaced ++# with the number it is calling. You might want to use this to only have one ++# chatscript that is used for all numbers, or you might need multiple ++# chatscripts. + +-################################################################### +-# +-# Function to initialize the modem and ensure that it is in command +-# state. This may not be needed, but it doesn't hurt. +-# +-function initialize +-{ +- chat -v TIMEOUT 3 '' AT 'OK-+++\c-OK' +- return +-} ++PHONE1=123456789 ++CHAT1=/etc/chatscripts/provider + +-################################################################### +-# +-# Script to dial a telephone +-# +-function callnumber +-{ +-chat -v \ +- ABORT '\nBUSY\r' \ +- ABORT '\nNO ANSWER\r' \ +- ABORT '\nRINGING\r\n\r\nRINGING\r' \ +- '' ATDT$1 \ +- CONNECT '' \ +- ogin:--ogin: $ACCOUNT \ +- assword: $PASSWORD +-# +-# If the connection was successful then end the whole script with a +-# success. +-# +- if [ "$?" = "0" ]; then +- exit 0 +- fi ++PHONE2=912345678 ++CHAT2=/etc/chatscripts/provider + +- return +-} ++PHONE3=891234567 ++CHAT3=/etc/chatscripts/provider + +-################################################################### +-# +-# Script to dial any telephone number +-# +-function callall +-{ +-# echo "dialing attempt number: $1" >/dev/console +- callnumber $PHONE1 +-# callnumber $PHONE2 +-} ++PHONE4=789123456 ++CHAT4=/etc/chatscripts/provider + +-################################################################### +-# +-# Initialize the modem to ensure that it is in the command state +-# +-initialize +-if [ ! "$?" = "0" ]; then +- exit 1 +-fi ++PHONE5=001234567 ++CHAT5=/etc/chatscripts/provider + ++# How long to sleep between retries: + # +-# Dial telephone numbers until one answers +-# ++# Note that this is a parameter to sleep so use "15s" for 15 seconds, ++# "1m" for 1 minute, etc ++SLEEP_DELAY=1s ++ ++# The code below does the dialing. ++ + attempt=0 + while : ; do +- attempt=`expr $attempt + 1` +- callall $attempt +- if [ "$attempt" = "$MAX_ATTEMPTS" ]; then +- exit 1 +- fi +- sleep "$SLEEP_DELAY" ++ attempt=`expr $attempt + 1` ++ NUMBER=`eval echo '$PHONE'$attempt` ++ CHAT=`eval echo '$CHAT'$attempt` ++ if [ ! "$CHAT" ]; then ++ attempt=0 ++ else ++ logger "Dialing attempt number: $attempt" ++ sed s/#NUMBER#/$NUMBER/ $CHAT >/etc/chatscripts/tmpchat ++ /usr/sbin/chat -v -f /etc/chatscripts/tmpchat ++ rm -f /etc/chatscripts/tmpchat ++ case $? in ++ 0) logger Connection established ; exit 0;; ++ 1) logger chat: exit 1, see manpage for details. ; exit 1;; ++ 2) logger chat: exit 2, see manpage for details. ; exit 2;; ++ 3) logger chat: exit 3, see manpage for details. ;; ++ 4) logger Line busy. ;; ++ 5) logger No Carrier. ;; ++ 6) logger A call is coming. Exiting! ; exit 1;; ++ 7) logger No dialtone. ;; ++ 8) logger An error occured. Exiting! ; exit 1;; ++ *) logger chat: exit $?, see manpage for details. ;; ++ esac ++ logger "Waiting $SLEEP_DELAY seconds before next try." ++ sleep $SLEEP_DELAY ++ fi + done diff --git a/patches/ppp-2.4.7/0013-Add-replacedefaultroute-option.patch b/patches/ppp-2.4.7/0013-Add-replacedefaultroute-option.patch new file mode 100644 index 000000000..376b3453a --- /dev/null +++ b/patches/ppp-2.4.7/0013-Add-replacedefaultroute-option.patch @@ -0,0 +1,319 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:15:32 +0200 +Subject: [PATCH] Add replacedefaultroute option + +Adds an option to pppd to control whether to replace existing default routes +when using the 'defaultroute' option. + +If defaultroute and replacedefaultroute are both set, pppd replaces an existing +default route with the new default route. The old default route is restored when +the connection is taken down. + +Origin: vendor, https://build.opensuse.org/source/network/ppp/ppp-2.4.2-cifdefroute.diff?rev=7a0fdeff0b29437dd7f4581c95c7255a +Forwarded: no +Reviewed-by: Chris Boot <bootc@debian.org> +Last-Update: 2014-01-26 +--- + pppd/ipcp.c | 45 +++++++++++++++++++++++++++---- + pppd/ipcp.h | 1 + + pppd/pppd.8 | 12 ++++++++- + pppd/pppd.h | 4 +++ + pppd/sys-linux.c | 82 +++++++++++++++++++++++++++++++++++++++++++++----------- + 5 files changed, 123 insertions(+), 21 deletions(-) + +diff --git a/pppd/ipcp.c b/pppd/ipcp.c +index e9738fe4d894..c8fe279d4ede 100644 +--- a/pppd/ipcp.c ++++ b/pppd/ipcp.c +@@ -198,6 +198,16 @@ static option_t ipcp_option_list[] = { + "disable defaultroute option", OPT_ALIAS | OPT_A2CLR, + &ipcp_wantoptions[0].default_route }, + ++#ifdef __linux__ ++ { "replacedefaultroute", o_bool, ++ &ipcp_wantoptions[0].replace_default_route, ++ "Replace default route", 1 ++ }, ++ { "noreplacedefaultroute", o_bool, ++ &ipcp_allowoptions[0].replace_default_route, ++ "Never replace default route", OPT_A2COPY, ++ &ipcp_wantoptions[0].replace_default_route }, ++#endif + { "proxyarp", o_bool, &ipcp_wantoptions[0].proxy_arp, + "Add proxy ARP entry", OPT_ENABLE|1, &ipcp_allowoptions[0].proxy_arp }, + { "noproxyarp", o_bool, &ipcp_allowoptions[0].proxy_arp, +@@ -271,7 +281,7 @@ struct protent ipcp_protent = { + ip_active_pkt + }; + +-static void ipcp_clear_addrs __P((int, u_int32_t, u_int32_t)); ++static void ipcp_clear_addrs __P((int, u_int32_t, u_int32_t, bool)); + static void ipcp_script __P((char *, int)); /* Run an up/down script */ + static void ipcp_script_done __P((void *)); + +@@ -1761,7 +1771,12 @@ ip_demand_conf(u) + if (!sifnpmode(u, PPP_IP, NPMODE_QUEUE)) + return 0; + if (wo->default_route) ++#ifndef __linux__ + if (sifdefaultroute(u, wo->ouraddr, wo->hisaddr)) ++#else ++ if (sifdefaultroute(u, wo->ouraddr, wo->hisaddr, ++ wo->replace_default_route)) ++#endif + default_route_set[u] = 1; + if (wo->proxy_arp) + if (sifproxyarp(u, wo->hisaddr)) +@@ -1849,7 +1864,8 @@ ipcp_up(f) + */ + if (demand) { + if (go->ouraddr != wo->ouraddr || ho->hisaddr != wo->hisaddr) { +- ipcp_clear_addrs(f->unit, wo->ouraddr, wo->hisaddr); ++ ipcp_clear_addrs(f->unit, wo->ouraddr, wo->hisaddr, ++ wo->replace_default_route); + if (go->ouraddr != wo->ouraddr) { + warn("Local IP address changed to %I", go->ouraddr); + script_setenv("OLDIPLOCAL", ip_ntoa(wo->ouraddr), 0); +@@ -1874,7 +1890,12 @@ ipcp_up(f) + + /* assign a default route through the interface if required */ + if (ipcp_wantoptions[f->unit].default_route) ++#ifndef __linux__ + if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr)) ++#else ++ if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr, ++ wo->replace_default_route)) ++#endif + default_route_set[f->unit] = 1; + + /* Make a proxy ARP entry if requested. */ +@@ -1924,7 +1945,12 @@ ipcp_up(f) + + /* assign a default route through the interface if required */ + if (ipcp_wantoptions[f->unit].default_route) ++#ifndef __linux__ + if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr)) ++#else ++ if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr, ++ wo->replace_default_route)) ++#endif + default_route_set[f->unit] = 1; + + /* Make a proxy ARP entry if requested. */ +@@ -2002,7 +2028,7 @@ ipcp_down(f) + sifnpmode(f->unit, PPP_IP, NPMODE_DROP); + sifdown(f->unit); + ipcp_clear_addrs(f->unit, ipcp_gotoptions[f->unit].ouraddr, +- ipcp_hisoptions[f->unit].hisaddr); ++ ipcp_hisoptions[f->unit].hisaddr, 0); + } + + /* Execute the ip-down script */ +@@ -2018,16 +2044,25 @@ ipcp_down(f) + * proxy arp entries, etc. + */ + static void +-ipcp_clear_addrs(unit, ouraddr, hisaddr) ++ipcp_clear_addrs(unit, ouraddr, hisaddr, replacedefaultroute) + int unit; + u_int32_t ouraddr; /* local address */ + u_int32_t hisaddr; /* remote address */ ++ bool replacedefaultroute; + { + if (proxy_arp_set[unit]) { + cifproxyarp(unit, hisaddr); + proxy_arp_set[unit] = 0; + } +- if (default_route_set[unit]) { ++ /* If replacedefaultroute, sifdefaultroute will be called soon ++ * with replacedefaultroute set and that will overwrite the current ++ * default route. This is the case only when doing demand, otherwise ++ * during demand, this cifdefaultroute would restore the old default ++ * route which is not what we want in this case. In the non-demand ++ * case, we'll delete the default route and restore the old if there ++ * is one saved by an sifdefaultroute with replacedefaultroute. ++ */ ++ if (!replacedefaultroute && default_route_set[unit]) { + cifdefaultroute(unit, ouraddr, hisaddr); + default_route_set[unit] = 0; + } +diff --git a/pppd/ipcp.h b/pppd/ipcp.h +index 6cf14c990578..7ecfa79d8668 100644 +--- a/pppd/ipcp.h ++++ b/pppd/ipcp.h +@@ -70,6 +70,7 @@ typedef struct ipcp_options { + bool old_addrs; /* Use old (IP-Addresses) option? */ + bool req_addr; /* Ask peer to send IP address? */ + bool default_route; /* Assign default route through interface? */ ++ bool replace_default_route; /* Replace default route through interface? */ + bool proxy_arp; /* Make proxy ARP entry for peer? */ + bool neg_vj; /* Van Jacobson Compression? */ + bool old_vj; /* use old (short) form of VJ option? */ +diff --git a/pppd/pppd.8 b/pppd/pppd.8 +index b7fd0bdaab52..67181083808b 100644 +--- a/pppd/pppd.8 ++++ b/pppd/pppd.8 +@@ -121,6 +121,11 @@ the gateway, when IPCP negotiation is successfully completed. + This entry is removed when the PPP connection is broken. This option + is privileged if the \fInodefaultroute\fR option has been specified. + .TP ++.B replacedefaultroute ++This option is a flag to the defaultroute option. If defaultroute is ++set and this flag is also set, pppd replaces an existing default route ++with the new default route. ++.TP + .B disconnect \fIscript + Execute the command specified by \fIscript\fR, by passing it to a + shell, after +@@ -739,7 +744,12 @@ disable both forms of hardware flow control. + .TP + .B nodefaultroute + Disable the \fIdefaultroute\fR option. The system administrator who +-wishes to prevent users from creating default routes with pppd ++wishes to prevent users from adding a default route with pppd ++can do so by placing this option in the /etc/ppp/options file. ++.TP ++.B noreplacedefaultroute ++Disable the \fIreplacedefaultroute\fR option. The system administrator who ++wishes to prevent users from replacing a default route with pppd + can do so by placing this option in the /etc/ppp/options file. + .TP + .B nodeflate +diff --git a/pppd/pppd.h b/pppd/pppd.h +index 247fa153739b..8ade4d817092 100644 +--- a/pppd/pppd.h ++++ b/pppd/pppd.h +@@ -665,7 +665,11 @@ int sif6addr __P((int, eui64_t, eui64_t)); + int cif6addr __P((int, eui64_t, eui64_t)); + /* Remove an IPv6 address from i/f */ + #endif ++#ifndef __linux__ + int sifdefaultroute __P((int, u_int32_t, u_int32_t)); ++#else ++int sifdefaultroute __P((int, u_int32_t, u_int32_t, bool replace_default_rt)); ++#endif + /* Create default route through i/f */ + int cifdefaultroute __P((int, u_int32_t, u_int32_t)); + /* Delete default route through i/f */ +diff --git a/pppd/sys-linux.c b/pppd/sys-linux.c +index f92174854207..86cde57664af 100644 +--- a/pppd/sys-linux.c ++++ b/pppd/sys-linux.c +@@ -207,6 +207,8 @@ static unsigned char inbuf[512]; /* buffer for chars read from loopback */ + static int if_is_up; /* Interface has been marked up */ + static int if6_is_up; /* Interface has been marked up for IPv6, to help differentiate */ + static int have_default_route; /* Gateway for default route added */ ++static struct rtentry old_def_rt; /* Old default route */ ++static int default_rt_repl_rest; /* replace and restore old default rt */ + static u_int32_t proxy_arp_addr; /* Addr for proxy arp entry added */ + static char proxy_arp_dev[16]; /* Device for proxy arp entry */ + static u_int32_t our_old_addr; /* for detecting address changes */ +@@ -1552,6 +1554,9 @@ static int read_route_table(struct rtentry *rt) + p = NULL; + } + ++ SET_SA_FAMILY (rt->rt_dst, AF_INET); ++ SET_SA_FAMILY (rt->rt_gateway, AF_INET); ++ + SIN_ADDR(rt->rt_dst) = strtoul(cols[route_dest_col], NULL, 16); + SIN_ADDR(rt->rt_gateway) = strtoul(cols[route_gw_col], NULL, 16); + SIN_ADDR(rt->rt_genmask) = strtoul(cols[route_mask_col], NULL, 16); +@@ -1621,22 +1626,53 @@ int have_route_to(u_int32_t addr) + /******************************************************************** + * + * sifdefaultroute - assign a default route through the address given. +- */ +- +-int sifdefaultroute (int unit, u_int32_t ouraddr, u_int32_t gateway) +-{ +- struct rtentry rt; +- +- if (defaultroute_exists(&rt) && strcmp(rt.rt_dev, ifname) != 0) { +- if (rt.rt_flags & RTF_GATEWAY) +- error("not replacing existing default route via %I", +- SIN_ADDR(rt.rt_gateway)); +- else +- error("not replacing existing default route through %s", +- rt.rt_dev); +- return 0; ++ * ++ * If the global default_rt_repl_rest flag is set, then this function ++ * already replaced the original system defaultroute with some other ++ * route and it should just replace the current defaultroute with ++ * another one, without saving the current route. Use: demand mode, ++ * when pppd sets first a defaultroute it it's temporary ppp0 addresses ++ * and then changes the temporary addresses to the addresses for the real ++ * ppp connection when it has come up. ++ */ ++ ++int sifdefaultroute (int unit, u_int32_t ouraddr, u_int32_t gateway, bool replace) ++{ ++ struct rtentry rt, tmp_rt; ++ struct rtentry *del_rt = NULL; ++ ++ if (default_rt_repl_rest) { ++ /* We have already reclaced the original defaultroute, if we ++ * are called again, we will delete the current default route ++ * and set the new default route in this function. ++ * - this is normally only the case the doing demand: */ ++ if (defaultroute_exists( &tmp_rt )) ++ del_rt = &tmp_rt; ++ } else if ( defaultroute_exists( &old_def_rt ) && ++ strcmp( old_def_rt.rt_dev, ifname ) != 0) { ++ /* We did not yet replace an existing default route, let's ++ * check if we should save and replace a default route: ++ */ ++ u_int32_t old_gateway = SIN_ADDR(old_def_rt.rt_gateway); ++ ++ if (old_gateway != gateway) { ++ if (!replace) { ++ error("not replacing default route to %s [%I]", ++ old_def_rt.rt_dev, old_gateway); ++ return 0; ++ } else { ++ // we need to copy rt_dev because we need it permanent too: ++ char * tmp_dev = malloc(strlen(old_def_rt.rt_dev)+1); ++ strcpy(tmp_dev, old_def_rt.rt_dev); ++ old_def_rt.rt_dev = tmp_dev; ++ ++ notice("replacing old default route to %s [%I]", ++ old_def_rt.rt_dev, old_gateway); ++ default_rt_repl_rest = 1; ++ del_rt = &old_def_rt; ++ } ++ } + } +- + memset (&rt, 0, sizeof (rt)); + SET_SA_FAMILY (rt.rt_dst, AF_INET); + +@@ -1653,6 +1689,12 @@ int sifdefaultroute (int unit, u_int32_t ouraddr, u_int32_t gateway) + error("default route ioctl(SIOCADDRT): %m"); + return 0; + } ++ if (default_rt_repl_rest && del_rt) ++ if (ioctl(sock_fd, SIOCDELRT, del_rt) < 0) { ++ if ( ! ok_error ( errno )) ++ error("del old default route ioctl(SIOCDELRT): %m(%d)", errno); ++ return 0; ++ } + + have_default_route = 1; + return 1; +@@ -1688,6 +1730,16 @@ int cifdefaultroute (int unit, u_int32_t ouraddr, u_int32_t gateway) + return 0; + } + } ++ if (default_rt_repl_rest) { ++ notice("restoring old default route to %s [%I]", ++ old_def_rt.rt_dev, SIN_ADDR(old_def_rt.rt_gateway)); ++ if (ioctl(sock_fd, SIOCADDRT, &old_def_rt) < 0) { ++ if ( ! ok_error ( errno )) ++ error("restore default route ioctl(SIOCADDRT): %m(%d)", errno); ++ return 0; ++ } ++ default_rt_repl_rest = 0; ++ } + + return 1; + } diff --git a/patches/ppp-2.4.7/0014-ppp-2.3.11-oedod.patch b/patches/ppp-2.4.7/0014-ppp-2.3.11-oedod.patch new file mode 100644 index 000000000..ed160e882 --- /dev/null +++ b/patches/ppp-2.4.7/0014-ppp-2.3.11-oedod.patch @@ -0,0 +1,191 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:16:31 +0200 +Subject: [PATCH] ppp-2.3.11-oedod + +--- + pppd/demand.c | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- + pppd/ipcp.c | 2 +- + pppd/ipv6cp.c | 2 +- + pppd/pppd.h | 2 +- + 4 files changed, 101 insertions(+), 4 deletions(-) + +diff --git a/pppd/demand.c b/pppd/demand.c +index 5e57658ea831..3eddf3016d98 100644 +--- a/pppd/demand.c ++++ b/pppd/demand.c +@@ -36,6 +36,8 @@ + #include <errno.h> + #include <fcntl.h> + #include <netdb.h> ++#include <unistd.h> ++#include <syslog.h> + #include <sys/param.h> + #include <sys/types.h> + #include <sys/wait.h> +@@ -43,6 +45,8 @@ + #include <sys/resource.h> + #include <sys/stat.h> + #include <sys/socket.h> ++#include <netinet/in.h> ++#include <arpa/inet.h> + #ifdef PPP_FILTER + #include <pcap-bpf.h> + #endif +@@ -221,6 +225,14 @@ loop_chars(p, n) + int c, rv; + + rv = 0; ++ ++/* check for synchronous connection... */ ++ ++ if ( (p[0] == 0xFF) && (p[1] == 0x03) ) { ++ rv = loop_frame(p,n); ++ return rv; ++ } ++ + for (; n > 0; --n) { + c = *p++; + if (c == PPP_FLAG) { +@@ -299,17 +311,102 @@ loop_frame(frame, len) + * loopback, now that the real serial link is up. + */ + void +-demand_rexmit(proto) ++demand_rexmit(proto, newip) + int proto; ++ u_int32_t newip; + { + struct packet *pkt, *prev, *nextpkt; ++ unsigned short checksum; ++ unsigned short pkt_checksum = 0; ++ unsigned iphdr; ++ struct timeval tv; ++ char cv = 0; ++ char ipstr[16]; + + prev = NULL; + pkt = pend_q; + pend_q = NULL; ++ tv.tv_sec = 1; ++ tv.tv_usec = 0; ++ select(0,NULL,NULL,NULL,&tv); /* Sleep for 1 Seconds */ + for (; pkt != NULL; pkt = nextpkt) { + nextpkt = pkt->next; + if (PPP_PROTOCOL(pkt->data) == proto) { ++ if ( (proto == PPP_IP) && newip ) { ++ /* Get old checksum */ ++ ++ iphdr = (pkt->data[4] & 15) << 2; ++ checksum = *((unsigned short *) (pkt->data+14)); ++ if (checksum == 0xFFFF) { ++ checksum = 0; ++ } ++ ++ ++ if (pkt->data[13] == 17) { ++ pkt_checksum = *((unsigned short *) (pkt->data+10+iphdr)); ++ if (pkt_checksum) { ++ cv = 1; ++ if (pkt_checksum == 0xFFFF) { ++ pkt_checksum = 0; ++ } ++ } ++ else { ++ cv = 0; ++ } ++ } ++ ++ if (pkt->data[13] == 6) { ++ pkt_checksum = *((unsigned short *) (pkt->data+20+iphdr)); ++ cv = 1; ++ if (pkt_checksum == 0xFFFF) { ++ pkt_checksum = 0; ++ } ++ } ++ ++ /* Delete old Source-IP-Address */ ++ checksum -= *((unsigned short *) (pkt->data+16)) ^ 0xFFFF; ++ checksum -= *((unsigned short *) (pkt->data+18)) ^ 0xFFFF; ++ ++ pkt_checksum -= *((unsigned short *) (pkt->data+16)) ^ 0xFFFF; ++ pkt_checksum -= *((unsigned short *) (pkt->data+18)) ^ 0xFFFF; ++ ++ /* Change Source-IP-Address */ ++ * ((u_int32_t *) (pkt->data + 16)) = newip; ++ ++ /* Add new Source-IP-Address */ ++ checksum += *((unsigned short *) (pkt->data+16)) ^ 0xFFFF; ++ checksum += *((unsigned short *) (pkt->data+18)) ^ 0xFFFF; ++ ++ pkt_checksum += *((unsigned short *) (pkt->data+16)) ^ 0xFFFF; ++ pkt_checksum += *((unsigned short *) (pkt->data+18)) ^ 0xFFFF; ++ ++ /* Write new checksum */ ++ if (!checksum) { ++ checksum = 0xFFFF; ++ } ++ *((unsigned short *) (pkt->data+14)) = checksum; ++ if (pkt->data[13] == 6) { ++ *((unsigned short *) (pkt->data+20+iphdr)) = pkt_checksum; ++ } ++ if (cv && (pkt->data[13] == 17) ) { ++ *((unsigned short *) (pkt->data+10+iphdr)) = pkt_checksum; ++ } ++ ++ /* Log Packet */ ++ strcpy(ipstr,inet_ntoa(*( (struct in_addr *) (pkt->data+16)))); ++ if (pkt->data[13] == 1) { ++ syslog(LOG_INFO,"Open ICMP %s -> %s\n", ++ ipstr, ++ inet_ntoa(*( (struct in_addr *) (pkt->data+20)))); ++ } else { ++ syslog(LOG_INFO,"Open %s %s:%d -> %s:%d\n", ++ pkt->data[13] == 6 ? "TCP" : "UDP", ++ ipstr, ++ ntohs(*( (short *) (pkt->data+iphdr+4))), ++ inet_ntoa(*( (struct in_addr *) (pkt->data+20))), ++ ntohs(*( (short *) (pkt->data+iphdr+6)))); ++ } ++ } + output(0, pkt->data, pkt->length); + free(pkt); + } else { +diff --git a/pppd/ipcp.c b/pppd/ipcp.c +index c8fe279d4ede..dceca807542a 100644 +--- a/pppd/ipcp.c ++++ b/pppd/ipcp.c +@@ -1904,7 +1904,7 @@ ipcp_up(f) + proxy_arp_set[f->unit] = 1; + + } +- demand_rexmit(PPP_IP); ++ demand_rexmit(PPP_IP,go->ouraddr); + sifnpmode(f->unit, PPP_IP, NPMODE_PASS); + + } else { +diff --git a/pppd/ipv6cp.c b/pppd/ipv6cp.c +index 356ff84ead41..c1602f41c206 100644 +--- a/pppd/ipv6cp.c ++++ b/pppd/ipv6cp.c +@@ -1232,7 +1232,7 @@ ipv6cp_up(f) + } + + } +- demand_rexmit(PPP_IPV6); ++ demand_rexmit(PPP_IPV6,0); + sifnpmode(f->unit, PPP_IPV6, NPMODE_PASS); + + } else { +diff --git a/pppd/pppd.h b/pppd/pppd.h +index 8ade4d817092..2121bc0aa588 100644 +--- a/pppd/pppd.h ++++ b/pppd/pppd.h +@@ -583,7 +583,7 @@ void demand_conf __P((void)); /* config interface(s) for demand-dial */ + void demand_block __P((void)); /* set all NPs to queue up packets */ + void demand_unblock __P((void)); /* set all NPs to pass packets */ + void demand_discard __P((void)); /* set all NPs to discard packets */ +-void demand_rexmit __P((int)); /* retransmit saved frames for an NP */ ++void demand_rexmit __P((int, u_int32_t)); /* retransmit saved frames for an NP*/ + int loop_chars __P((unsigned char *, int)); /* process chars from loopback */ + int loop_frame __P((unsigned char *, int)); /* should we bring link up? */ + diff --git a/patches/ppp-2.4.7/0015-add-support-for-the-Framed-MTU-Radius-attribute.patch b/patches/ppp-2.4.7/0015-add-support-for-the-Framed-MTU-Radius-attribute.patch new file mode 100644 index 000000000..273d7e25a --- /dev/null +++ b/patches/ppp-2.4.7/0015-add-support-for-the-Framed-MTU-Radius-attribute.patch @@ -0,0 +1,26 @@ +From: Alexander Klepikov <klepikov_a@up.ua> +Date: Fri, 2 Jun 2017 11:21:27 +0200 +Subject: [PATCH] add support for the Framed-MTU Radius attribute + +http://ppp.samba.org/cgi-bin/ppp-bugs/incoming?id=1532 + +This patch allows radius plugin to deal with Framed-MTU Radius attribute and to +set MTU on interface. +--- + pppd/plugins/radius/radius.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/pppd/plugins/radius/radius.c b/pppd/plugins/radius/radius.c +index 4ba5f523ea07..06e00590b635 100644 +--- a/pppd/plugins/radius/radius.c ++++ b/pppd/plugins/radius/radius.c +@@ -651,6 +651,9 @@ radius_setparams(VALUE_PAIR *vp, char *msg, REQUEST_INFO *req_info, + memcpy(rstate.class, vp->strvalue, rstate.class_len); + } /* else too big for our buffer - ignore it */ + break; ++ case PW_FRAMED_MTU: ++ netif_set_mtu(rstate.client_port,MIN(netif_get_mtu(rstate.client_port),vp->lvalue)); ++ break; + } + + diff --git a/patches/ppp-2.4.7/0016-ip-up_option.patch b/patches/ppp-2.4.7/0016-ip-up_option.patch new file mode 100644 index 000000000..93ef02c5b --- /dev/null +++ b/patches/ppp-2.4.7/0016-ip-up_option.patch @@ -0,0 +1,103 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:22:08 +0200 +Subject: [PATCH] ip-up_option + +--- + pppd/ipcp.c | 8 ++++---- + pppd/main.c | 3 +++ + pppd/options.c | 9 +++++++++ + pppd/pppd.h | 2 ++ + 4 files changed, 18 insertions(+), 4 deletions(-) + +diff --git a/pppd/ipcp.c b/pppd/ipcp.c +index dceca807542a..d6e0e2a699fe 100644 +--- a/pppd/ipcp.c ++++ b/pppd/ipcp.c +@@ -1984,7 +1984,7 @@ ipcp_up(f) + */ + if (ipcp_script_state == s_down && ipcp_script_pid == 0) { + ipcp_script_state = s_up; +- ipcp_script(_PATH_IPUP, 0); ++ ipcp_script(path_ipup, 0); + } + } + +@@ -2034,7 +2034,7 @@ ipcp_down(f) + /* Execute the ip-down script */ + if (ipcp_script_state == s_up && ipcp_script_pid == 0) { + ipcp_script_state = s_down; +- ipcp_script(_PATH_IPDOWN, 0); ++ ipcp_script(path_ipdown, 0); + } + } + +@@ -2097,13 +2097,13 @@ ipcp_script_done(arg) + case s_up: + if (ipcp_fsm[0].state != OPENED) { + ipcp_script_state = s_down; +- ipcp_script(_PATH_IPDOWN, 0); ++ ipcp_script(path_ipdown, 0); + } + break; + case s_down: + if (ipcp_fsm[0].state == OPENED) { + ipcp_script_state = s_up; +- ipcp_script(_PATH_IPUP, 0); ++ ipcp_script(path_ipup, 0); + } + break; + } +diff --git a/pppd/main.c b/pppd/main.c +index 23d21d427df7..59aad6f3854f 100644 +--- a/pppd/main.c ++++ b/pppd/main.c +@@ -316,6 +316,9 @@ main(argc, argv) + struct protent *protp; + char numbuf[16]; + ++ strlcpy(path_ipup, _PATH_IPUP, sizeof(path_ipup)); ++ strlcpy(path_ipdown, _PATH_IPDOWN, sizeof(path_ipdown)); ++ + link_stats_valid = 0; + new_phase(PHASE_INITIALIZE); + +diff --git a/pppd/options.c b/pppd/options.c +index f66b7657bc31..dc2d7329a93d 100644 +--- a/pppd/options.c ++++ b/pppd/options.c +@@ -114,6 +114,8 @@ char linkname[MAXPATHLEN]; /* logical name for link */ + bool tune_kernel; /* may alter kernel settings */ + int connect_delay = 1000; /* wait this many ms after connect script */ + int req_unit = -1; /* requested interface unit */ ++char path_ipup[MAXPATHLEN]; /* pathname of ip-up script */ ++char path_ipdown[MAXPATHLEN];/* pathname of ip-down script */ + bool multilink = 0; /* Enable multilink operation */ + char *bundle_name = NULL; /* bundle name for multilink */ + bool dump_options; /* print out option values */ +@@ -299,6 +301,13 @@ option_t general_options[] = { + "Unset user environment variable", + OPT_A2PRINTER | OPT_NOPRINT, (void *)user_unsetprint }, + ++ { "ip-up-script", o_string, path_ipup, ++ "Set pathname of ip-up script", ++ OPT_PRIV|OPT_STATIC, NULL, MAXPATHLEN }, ++ { "ip-down-script", o_string, path_ipdown, ++ "Set pathname of ip-down script", ++ OPT_PRIV|OPT_STATIC, NULL, MAXPATHLEN }, ++ + #ifdef HAVE_MULTILINK + { "multilink", o_bool, &multilink, + "Enable multilink operation", OPT_PRIO | 1 }, +diff --git a/pppd/pppd.h b/pppd/pppd.h +index 2121bc0aa588..2be649adf582 100644 +--- a/pppd/pppd.h ++++ b/pppd/pppd.h +@@ -318,6 +318,8 @@ extern bool tune_kernel; /* May alter kernel settings as necessary */ + extern int connect_delay; /* Time to delay after connect script */ + extern int max_data_rate; /* max bytes/sec through charshunt */ + extern int req_unit; /* interface unit number to use */ ++extern char path_ipup[MAXPATHLEN]; /* pathname of ip-up script */ ++extern char path_ipdown[MAXPATHLEN]; /* pathname of ip-down script */ + extern bool multilink; /* enable multilink operation */ + extern bool noendpoint; /* don't send or accept endpt. discrim. */ + extern char *bundle_name; /* bundle name for multilink */ diff --git a/patches/ppp-2.4.7/0017-ppp-2.4.2-stripMSdomain.patch b/patches/ppp-2.4.7/0017-ppp-2.4.2-stripMSdomain.patch new file mode 100644 index 000000000..5ac426e19 --- /dev/null +++ b/patches/ppp-2.4.7/0017-ppp-2.4.2-stripMSdomain.patch @@ -0,0 +1,44 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:22:53 +0200 +Subject: [PATCH] ppp-2.4.2-stripMSdomain + +--- + pppd/chap-new.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pppd/chap-new.c b/pppd/chap-new.c +index 2714bff64785..7fd7087a5e2c 100644 +--- a/pppd/chap-new.c ++++ b/pppd/chap-new.c +@@ -58,6 +58,7 @@ int (*chap_verify_hook)(char *name, char *ourname, int id, + int chap_timeout_time = 3; + int chap_max_transmits = 10; + int chap_rechallenge_time = 0; ++int chapms_strip_domain = 0; + + /* + * Command-line options. +@@ -69,6 +70,8 @@ static option_t chap_option_list[] = { + "Set max #xmits for challenge", OPT_PRIO }, + { "chap-interval", o_int, &chap_rechallenge_time, + "Set interval for rechallenge", OPT_PRIO }, ++ { "chapms-strip-domain", o_bool, &chapms_strip_domain, ++ "Strip the domain prefix before the Username", 1 }, + { NULL } + }; + +@@ -336,6 +339,14 @@ chap_handle_response(struct chap_server_state *ss, int id, + /* Null terminate and clean remote name. */ + slprintf(rname, sizeof(rname), "%.*v", len, name); + name = rname; ++ ++ /* strip the MS domain name */ ++ if (chapms_strip_domain && strrchr(rname, '\\')) { ++ char tmp[MAXNAMELEN+1]; ++ ++ strcpy(tmp, strrchr(rname, '\\') + 1); ++ strcpy(rname, tmp); ++ } + } + + if (chap_verify_hook) diff --git a/patches/ppp-2.4.7/0018-export-CALL_FILE-to-the-link-scripts.patch b/patches/ppp-2.4.7/0018-export-CALL_FILE-to-the-link-scripts.patch new file mode 100644 index 000000000..6bce58107 --- /dev/null +++ b/patches/ppp-2.4.7/0018-export-CALL_FILE-to-the-link-scripts.patch @@ -0,0 +1,35 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:23:29 +0200 +Subject: [PATCH] export $CALL_FILE to the link scripts + +--- + pppd/options.c | 1 + + pppd/pppd.8 | 3 +++ + 2 files changed, 4 insertions(+) + +diff --git a/pppd/options.c b/pppd/options.c +index dc2d7329a93d..2de65f9aa8d5 100644 +--- a/pppd/options.c ++++ b/pppd/options.c +@@ -1477,6 +1477,7 @@ callfile(argv) + if ((fname = (char *) malloc(l)) == NULL) + novm("call file name"); + slprintf(fname, l, "%s%s", _PATH_PEERFILES, arg); ++ script_setenv("CALL_FILE", arg, 0); + + ok = options_from_file(fname, 1, 1, 1); + +diff --git a/pppd/pppd.8 b/pppd/pppd.8 +index 67181083808b..f6c9e909254c 100644 +--- a/pppd/pppd.8 ++++ b/pppd/pppd.8 +@@ -1656,6 +1656,9 @@ the connection. + .B LINKNAME + The logical name of the link, set with the \fIlinkname\fR option. + .TP ++.B CALL_FILE ++The value of the \fIcall\fR option. ++.TP + .B DNS1 + If the peer supplies DNS server addresses, this variable is set to the + first DNS server address supplied (whether or not the usepeerdns diff --git a/patches/ppp-2.4.7/0019-ipv6-accept-remote.patch b/patches/ppp-2.4.7/0019-ipv6-accept-remote.patch new file mode 100644 index 000000000..e83406d3b --- /dev/null +++ b/patches/ppp-2.4.7/0019-ipv6-accept-remote.patch @@ -0,0 +1,70 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:24:22 +0200 +Subject: [PATCH] ipv6-accept-remote + +--- + pppd/ipv6cp.c | 5 ++++- + pppd/ipv6cp.h | 3 ++- + pppd/pppd.8 | 5 +++++ + 3 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/pppd/ipv6cp.c b/pppd/ipv6cp.c +index c1602f41c206..432170462196 100644 +--- a/pppd/ipv6cp.c ++++ b/pppd/ipv6cp.c +@@ -245,6 +245,8 @@ static option_t ipv6cp_option_list[] = { + + { "ipv6cp-accept-local", o_bool, &ipv6cp_allowoptions[0].accept_local, + "Accept peer's interface identifier for us", 1 }, ++ { "ipv6cp-accept-remote", o_bool, &ipv6cp_allowoptions[0].accept_remote, ++ "Accept peer's interface identifier for itself", 1 }, + + { "ipv6cp-use-ipaddr", o_bool, &ipv6cp_allowoptions[0].use_ip, + "Use (default) IPv4 address as interface identifier", 1 }, +@@ -435,6 +437,7 @@ ipv6cp_init(unit) + memset(ao, 0, sizeof(*ao)); + + wo->accept_local = 1; ++ wo->accept_remote = 1; + wo->neg_ifaceid = 1; + ao->neg_ifaceid = 1; + +@@ -960,7 +963,7 @@ ipv6cp_reqci(f, inp, len, reject_if_disagree) + orc = CONFREJ; /* Reject CI */ + break; + } +- if (!eui64_iszero(wo->hisid) && ++ if (!eui64_iszero(wo->hisid) && !wo->accept_remote && + !eui64_equals(ifaceid, wo->hisid) && + eui64_iszero(go->hisid)) { + +diff --git a/pppd/ipv6cp.h b/pppd/ipv6cp.h +index 2f4c06ddc189..1617707ebbde 100644 +--- a/pppd/ipv6cp.h ++++ b/pppd/ipv6cp.h +@@ -150,7 +150,8 @@ + typedef struct ipv6cp_options { + int neg_ifaceid; /* Negotiate interface identifier? */ + int req_ifaceid; /* Ask peer to send interface identifier? */ +- int accept_local; /* accept peer's value for iface id? */ ++ int accept_local; /* accept peer's value for our iface id? */ ++ int accept_remote; /* accept peer's value for his iface id? */ + int opt_local; /* ourtoken set by option */ + int opt_remote; /* histoken set by option */ + int use_ip; /* use IP as interface identifier */ +diff --git a/pppd/pppd.8 b/pppd/pppd.8 +index f6c9e909254c..f226392c0280 100644 +--- a/pppd/pppd.8 ++++ b/pppd/pppd.8 +@@ -463,6 +463,11 @@ With this option, pppd will accept the peer's idea of our local IPv6 + interface identifier, even if the local IPv6 interface identifier + was specified in an option. + .TP ++.B ipv6cp\-accept\-remote ++With this option, pppd will accept the peer's idea of its (remote) ++IPv6 interface identifier, even if the remote IPv6 interface ++identifier was specified in an option. ++.TP + .B ipv6cp\-max\-configure \fIn + Set the maximum number of IPv6CP configure-request transmissions to + \fIn\fR (default 10). diff --git a/patches/ppp-2.4.7/0020-allow-use-of-arbitrary-interface-names.patch b/patches/ppp-2.4.7/0020-allow-use-of-arbitrary-interface-names.patch new file mode 100644 index 000000000..3fb234038 --- /dev/null +++ b/patches/ppp-2.4.7/0020-allow-use-of-arbitrary-interface-names.patch @@ -0,0 +1,210 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:25:19 +0200 +Subject: [PATCH] allow use of arbitrary interface names + +This is a modified version of a patch from openSUSE that enables PPP interfaces +to be called arbitrary names, rather than simply pppX where X is the unit +number. + +The modifications from the stock openSUSE patch are: +- refresh patch on top of 018_ip-up_option.diff +- fix a printf format-string vulnerability in pppd/main.c:set_ifunit() +- clarify the pppd.8 manpage additions +- patch pppstats/pppstats.c to query renamed interfaces without complaint + +Origin: vendor, https://build.opensuse.org/source/network/ppp/ppp-2.4.2-ifname.diff?rev=7a0fdeff0b29437dd7f4581c95c7255a +Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=458646 +Forwarded: no +Reviewed-by: Chris Boot <bootc@debian.org> +Last-Update: 2014-01-12 +--- + pppd/main.c | 16 ++++++---------- + pppd/options.c | 5 +++++ + pppd/pppd.8 | 8 +++++++- + pppd/pppd.h | 11 +++++++++++ + pppd/sys-linux.c | 15 +++++++++++++++ + pppstats/pppstats.c | 12 ++++++------ + 6 files changed, 50 insertions(+), 17 deletions(-) + +diff --git a/pppd/main.c b/pppd/main.c +index 59aad6f3854f..3871aa2b3a5e 100644 +--- a/pppd/main.c ++++ b/pppd/main.c +@@ -124,7 +124,7 @@ + static const char rcsid[] = RCSID; + + /* interface vars */ +-char ifname[32]; /* Interface name */ ++char ifname[MAXIFNAMELEN]; /* Interface name */ + int ifunit; /* Interface unit number */ + + struct channel *the_channel; +@@ -298,13 +298,6 @@ struct protent *protocols[] = { + NULL + }; + +-/* +- * If PPP_DRV_NAME is not defined, use the default "ppp" as the device name. +- */ +-#if !defined(PPP_DRV_NAME) +-#define PPP_DRV_NAME "ppp" +-#endif /* !defined(PPP_DRV_NAME) */ +- + int + main(argc, argv) + int argc; +@@ -740,8 +733,11 @@ void + set_ifunit(iskey) + int iskey; + { +- info("Using interface %s%d", PPP_DRV_NAME, ifunit); +- slprintf(ifname, sizeof(ifname), "%s%d", PPP_DRV_NAME, ifunit); ++ if (req_ifname[0] != '\0') ++ slprintf(ifname, sizeof(ifname), "%s", req_ifname); ++ else ++ slprintf(ifname, sizeof(ifname), "%s%d", PPP_DRV_NAME, ifunit); ++ info("Using interface %s", ifname); + script_setenv("IFNAME", ifname, iskey); + if (iskey) { + create_pidfile(getpid()); /* write pid to file */ +diff --git a/pppd/options.c b/pppd/options.c +index 2de65f9aa8d5..340797386dd6 100644 +--- a/pppd/options.c ++++ b/pppd/options.c +@@ -116,6 +116,7 @@ int connect_delay = 1000; /* wait this many ms after connect script */ + int req_unit = -1; /* requested interface unit */ + char path_ipup[MAXPATHLEN]; /* pathname of ip-up script */ + char path_ipdown[MAXPATHLEN];/* pathname of ip-down script */ ++char req_ifname[MAXIFNAMELEN]; /* requested interface name */ + bool multilink = 0; /* Enable multilink operation */ + char *bundle_name = NULL; /* bundle name for multilink */ + bool dump_options; /* print out option values */ +@@ -285,6 +286,10 @@ option_t general_options[] = { + "PPP interface unit number to use if possible", + OPT_PRIO | OPT_LLIMIT, 0, 0 }, + ++ { "ifname", o_string, req_ifname, ++ "Set PPP interface name", ++ OPT_PRIO | OPT_PRIV | OPT_STATIC, NULL, MAXIFNAMELEN }, ++ + { "dump", o_bool, &dump_options, + "Print out option values after parsing all options", 1 }, + { "dryrun", o_bool, &dryrun, +diff --git a/pppd/pppd.8 b/pppd/pppd.8 +index f226392c0280..65bbe721f761 100644 +--- a/pppd/pppd.8 ++++ b/pppd/pppd.8 +@@ -1093,7 +1093,13 @@ under Linux and FreeBSD 2.2.8 and later. + .TP + .B unit \fInum + Sets the ppp unit number (for a ppp0 or ppp1 etc interface name) for outbound +-connections. ++connections. If the unit is already in use a dynamically allocated number will ++be used. ++.TP ++.B ifname \fIstring ++Set the ppp interface name for outbound connections. If the interface name is ++already in use, or if the name cannot be used for any other reason, pppd will ++terminate. + .TP + .B unset \fIname + Remove a variable from the environment variable for scripts that are +diff --git a/pppd/pppd.h b/pppd/pppd.h +index 2be649adf582..b11670586244 100644 +--- a/pppd/pppd.h ++++ b/pppd/pppd.h +@@ -80,6 +80,16 @@ + #define MAXARGS 1 /* max # args to a command */ + #define MAXNAMELEN 256 /* max length of hostname or name for auth */ + #define MAXSECRETLEN 256 /* max length of password or secret */ ++#define MAXIFNAMELEN 32 /* max length of interface name; or use IFNAMSIZ, can we ++ always include net/if.h? */ ++ ++/* ++ * If PPP_DRV_NAME is not defined, use the default "ppp" as the device name. ++ * Where should PPP_DRV_NAME come from? Do we include it here? ++ */ ++#if !defined(PPP_DRV_NAME) ++#define PPP_DRV_NAME "ppp" ++#endif /* !defined(PPP_DRV_NAME) */ + + /* + * Option descriptor structure. +@@ -320,6 +330,7 @@ extern int max_data_rate; /* max bytes/sec through charshunt */ + extern int req_unit; /* interface unit number to use */ + extern char path_ipup[MAXPATHLEN]; /* pathname of ip-up script */ + extern char path_ipdown[MAXPATHLEN]; /* pathname of ip-down script */ ++extern char req_ifname[MAXIFNAMELEN]; /* interface name to use */ + extern bool multilink; /* enable multilink operation */ + extern bool noendpoint; /* don't send or accept endpt. discrim. */ + extern char *bundle_name; /* bundle name for multilink */ +diff --git a/pppd/sys-linux.c b/pppd/sys-linux.c +index 86cde57664af..878f83bdfe3b 100644 +--- a/pppd/sys-linux.c ++++ b/pppd/sys-linux.c +@@ -650,6 +650,21 @@ static int make_ppp_unit() + } + if (x < 0) + error("Couldn't create new ppp unit: %m"); ++ ++ if (x == 0 && req_ifname[0] != '\0') { ++ struct ifreq ifr; ++ char t[MAXIFNAMELEN]; ++ memset(&ifr, 0, sizeof(struct ifreq)); ++ slprintf(t, sizeof(t), "%s%d", PPP_DRV_NAME, ifunit); ++ strncpy(ifr.ifr_name, t, IF_NAMESIZE); ++ strncpy(ifr.ifr_newname, req_ifname, IF_NAMESIZE); ++ x = ioctl(sock_fd, SIOCSIFNAME, &ifr); ++ if (x < 0) ++ error("Couldn't rename interface %s to %s: %m", t, req_ifname); ++ else ++ info("Renamed interface %s to %s", t, req_ifname); ++ } ++ + return x; + } + +diff --git a/pppstats/pppstats.c b/pppstats/pppstats.c +index 6367988eb96b..46cb9c24942b 100644 +--- a/pppstats/pppstats.c ++++ b/pppstats/pppstats.c +@@ -88,7 +88,6 @@ int aflag; /* print absolute values, not deltas */ + int dflag; /* print data rates, not bytes */ + int interval, count; + int infinite; +-int unit; + int s; /* socket or /dev/ppp file descriptor */ + int signalled; /* set if alarm goes off "early" */ + char *progname; +@@ -449,6 +448,7 @@ main(argc, argv) + { + int c; + #ifdef STREAMS ++ int unit; + char *dev; + #endif + +@@ -506,11 +506,6 @@ main(argc, argv) + if (argc > 0) + interface = argv[0]; + +- if (sscanf(interface, PPP_DRV_NAME "%d", &unit) != 1) { +- fprintf(stderr, "%s: invalid interface '%s' specified\n", +- progname, interface); +- } +- + #ifndef STREAMS + { + struct ifreq ifr; +@@ -535,6 +530,11 @@ main(argc, argv) + } + + #else /* STREAMS */ ++ if (sscanf(interface, PPP_DRV_NAME "%d", &unit) != 1) { ++ fprintf(stderr, "%s: invalid interface '%s' specified\n", ++ progname, interface); ++ } ++ + #ifdef __osf__ + dev = "/dev/streams/ppp"; + #else diff --git a/patches/ppp-2.4.7/0021-fix-a-potential-buffer-overflow-in-clientid.c-rc_map.patch b/patches/ppp-2.4.7/0021-fix-a-potential-buffer-overflow-in-clientid.c-rc_map.patch new file mode 100644 index 000000000..31edc06cb --- /dev/null +++ b/patches/ppp-2.4.7/0021-fix-a-potential-buffer-overflow-in-clientid.c-rc_map.patch @@ -0,0 +1,38 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:25:56 +0200 +Subject: [PATCH] fix a potential buffer overflow in clientid.c:rc_map2id() + +This fixes the following compile-time warning when building with +-D_FORTIFY_SOURCE=2: + +In file included from /usr/include/string.h:638:0, + from ./includes.h:26, + from clientid.c:12: +In function 'strncat', + inlined from 'rc_map2id' at clientid.c:113:9: +/usr/include/i386-linux-gnu/bits/string3.h:150:3: warning: call to +__builtin___strncat_chk might overflow destination buffer [enabled by default] + return __builtin___strncat_chk (__dest, __src, __len, __bos (__dest)); + ^ + +Origin: vendor, https://build.opensuse.org/source/network/ppp/ppp-2.4.4-strncatfix.patch?rev=7a0fdeff0b29437dd7f4581c95c7255a +Forwarded: no +Reviewed-by: Chris Boot <bootc@debian.org> +Last-Update: 2014-01-12 +--- + pppd/plugins/radius/clientid.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/pppd/plugins/radius/clientid.c b/pppd/plugins/radius/clientid.c +index d49579c43cc3..7de021139b56 100644 +--- a/pppd/plugins/radius/clientid.c ++++ b/pppd/plugins/radius/clientid.c +@@ -110,7 +110,7 @@ UINT4 rc_map2id(char *name) + if (*name != '/') + strcpy(ttyname, "/dev/"); + +- strncat(ttyname, name, sizeof(ttyname)); ++ strncat(ttyname, name, sizeof(ttyname)-strlen(ttyname)-1); + + for(p = map2id_list; p; p = p->next) + if (!strcmp(ttyname, p->name)) return p->id; diff --git a/patches/ppp-2.4.7/0022-scripts-README.patch b/patches/ppp-2.4.7/0022-scripts-README.patch new file mode 100644 index 000000000..f786cc81d --- /dev/null +++ b/patches/ppp-2.4.7/0022-scripts-README.patch @@ -0,0 +1,30 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:26:37 +0200 +Subject: [PATCH] scripts README + +--- + scripts/README | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/scripts/README b/scripts/README +index 00e032ca6ad4..439c900d657a 100644 +--- a/scripts/README ++++ b/scripts/README +@@ -141,3 +141,17 @@ option. In addition, all ASCII control characters [0x00 to 0x1f], plus 0xff, + are escaped. This may need to be modified depending on the ssh (or + pseudo-tty) implementation which may differ across platforms, for further + optimizations. ++ ++------------------------------------------------------------------------ ++ ++12. pon, poff and ip-up ++ ++These are modified version of the pon/poff/ip-up scripts contributed by Yann ++Dirson <dirson@debian.org>. They allow you to call "pon quick" respectively ++"pon quick my-isp" to just call the provider for running you ip-up scripts in ++/etc/ppp/ip-up.d. This can be useful to check for incoming/flush outgoing ++mail, without the necessary delay before hangup introduced by diald or such. ++ ++These scripts break the possibility to connect to multiple ISPs at once, so ++they are included only here. ++ diff --git a/patches/ppp-2.4.7/0023-no_crypt_hack.patch b/patches/ppp-2.4.7/0023-no_crypt_hack.patch new file mode 100644 index 000000000..5e8d51bbf --- /dev/null +++ b/patches/ppp-2.4.7/0023-no_crypt_hack.patch @@ -0,0 +1,61 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:27:15 +0200 +Subject: [PATCH] no_crypt_hack + +The udeb package does not have crypt(3). This patch makes +authentication always fail, since it is not needed anyway for dialout. +--- + pppd/Makefile.linux | 4 ++++ + pppd/auth.c | 2 ++ + pppd/session.c | 2 ++ + 3 files changed, 8 insertions(+) + +diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux +index 16b3ee879791..a8694fccd85e 100644 +--- a/pppd/Makefile.linux ++++ b/pppd/Makefile.linux +@@ -121,10 +121,14 @@ CFLAGS += -DHAS_SHADOW + #LIBS += -lshadow $(LIBS) + endif + ++ifdef NO_CRYPT_HACK ++CFLAGS += -DNO_CRYPT_HACK ++else + ifneq ($(wildcard /usr/include/crypt.h),) + CFLAGS += -DHAVE_CRYPT_H=1 + LIBS += -lcrypt + endif ++endif + + ifdef USE_LIBUTIL + CFLAGS += -DHAVE_LOGWTMP=1 +diff --git a/pppd/auth.c b/pppd/auth.c +index 4271af687102..931c6b45043b 100644 +--- a/pppd/auth.c ++++ b/pppd/auth.c +@@ -1442,8 +1442,10 @@ check_passwd(unit, auser, userlen, apasswd, passwdlen, msg) + if (secret[0] != 0 && !login_secret) { + /* password given in pap-secrets - must match */ + if (cryptpap || strcmp(passwd, secret) != 0) { ++#ifndef NO_CRYPT_HACK + char *cbuf = crypt(passwd, secret); + if (!cbuf || strcmp(cbuf, secret) != 0) ++#endif + ret = UPAP_AUTHNAK; + } + } +diff --git a/pppd/session.c b/pppd/session.c +index 56385dd63874..977139665218 100644 +--- a/pppd/session.c ++++ b/pppd/session.c +@@ -351,8 +351,10 @@ session_start(flags, user, passwd, ttyName, msg) + */ + if (pw->pw_passwd == NULL || strlen(pw->pw_passwd) < 2) + return SESSION_FAILED; ++#ifndef NO_CRYPT_HACK + cbuf = crypt(passwd, pw->pw_passwd); + if (!cbuf || strcmp(cbuf, pw->pw_passwd) != 0) ++#endif + return SESSION_FAILED; + } + diff --git a/patches/ppp-2.4.7/0024-resolv.conf_no_log.patch b/patches/ppp-2.4.7/0024-resolv.conf_no_log.patch new file mode 100644 index 000000000..ebdcc2d12 --- /dev/null +++ b/patches/ppp-2.4.7/0024-resolv.conf_no_log.patch @@ -0,0 +1,21 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:27:40 +0200 +Subject: [PATCH] resolv.conf_no_log + +--- + pppd/ipcp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/pppd/ipcp.c b/pppd/ipcp.c +index d6e0e2a699fe..b81b2fd0a29f 100644 +--- a/pppd/ipcp.c ++++ b/pppd/ipcp.c +@@ -2152,7 +2152,7 @@ create_resolv(peerdns1, peerdns2) + + f = fopen(_PATH_RESOLV, "w"); + if (f == NULL) { +- error("Failed to create %s: %m", _PATH_RESOLV); ++ /* error("Failed to create %s: %m", _PATH_RESOLV); */ + return; + } + diff --git a/patches/ppp-2.4.7/0025-Debian-specific-changes.patch b/patches/ppp-2.4.7/0025-Debian-specific-changes.patch new file mode 100644 index 000000000..fcbba6357 --- /dev/null +++ b/patches/ppp-2.4.7/0025-Debian-specific-changes.patch @@ -0,0 +1,86 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:28:30 +0200 +Subject: [PATCH] Debian-specific changes. + +--- + pppd/Makefile.linux | 6 ++---- + pppd/pathnames.h | 2 +- + pppd/pppd.h | 2 +- + pppdump/Makefile.linux | 4 ++-- + 4 files changed, 6 insertions(+), 8 deletions(-) + +diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux +index a8694fccd85e..a90cbdcf8bb1 100644 +--- a/pppd/Makefile.linux ++++ b/pppd/Makefile.linux +@@ -61,14 +61,14 @@ HAVE_MULTILINK=y + USE_TDB=y + + HAS_SHADOW=y +-#USE_PAM=y ++USE_PAM=y + HAVE_INET6=y + + # Enable plugins + PLUGIN=y + + # Enable Microsoft proprietary Callback Control Protocol +-#CBCP=y ++CBCP=y + + # Enable EAP SRP-SHA1 authentication (requires libsrp) + #USE_SRP=y +@@ -182,11 +182,9 @@ LIBS += -ldl + endif + + ifdef FILTER +-ifneq ($(wildcard /usr/include/pcap-bpf.h),) + LIBS += -lpcap + CFLAGS += -DPPP_FILTER + endif +-endif + + ifdef HAVE_INET6 + PPPDSRCS += ipv6cp.c eui64.c +diff --git a/pppd/pathnames.h b/pppd/pathnames.h +index a33f0466c9d6..46972601fc92 100644 +--- a/pppd/pathnames.h ++++ b/pppd/pathnames.h +@@ -28,7 +28,7 @@ + #define _PATH_AUTHUP _ROOT_PATH "/etc/ppp/auth-up" + #define _PATH_AUTHDOWN _ROOT_PATH "/etc/ppp/auth-down" + #define _PATH_TTYOPT _ROOT_PATH "/etc/ppp/options." +-#define _PATH_CONNERRS _ROOT_PATH "/etc/ppp/connect-errors" ++#define _PATH_CONNERRS _ROOT_PATH "/var/log/ppp-connect-errors" + #define _PATH_PEERFILES _ROOT_PATH "/etc/ppp/peers/" + #define _PATH_RESOLV _ROOT_PATH "/etc/ppp/resolv.conf" + +diff --git a/pppd/pppd.h b/pppd/pppd.h +index b11670586244..567d702181ca 100644 +--- a/pppd/pppd.h ++++ b/pppd/pppd.h +@@ -870,7 +870,7 @@ extern void (*snoop_send_hook) __P((unsigned char *p, int len)); + || defined(DEBUGCHAP) || defined(DEBUG) || defined(DEBUGIPV6CP) + #define LOG_PPP LOG_LOCAL2 + #else +-#define LOG_PPP LOG_DAEMON ++#define LOG_PPP LOG_LOCAL2 + #endif + #endif /* LOG_PPP */ + +diff --git a/pppdump/Makefile.linux b/pppdump/Makefile.linux +index 87777fab5e94..1eeeafe20111 100644 +--- a/pppdump/Makefile.linux ++++ b/pppdump/Makefile.linux +@@ -2,9 +2,9 @@ DESTDIR = $(INSTROOT)@DESTDIR@ + BINDIR = $(DESTDIR)/sbin + MANDIR = $(DESTDIR)/share/man/man8 + +-DO_DEFLATE=y ++#DO_DEFLATE=y + DO_BSD_COMPRESS=y +-HAVE_ZLIB=n ++HAVE_ZLIB=y + + COPTS=-O2 -g + CFLAGS= $(COPTS) -I../include/net diff --git a/patches/ppp-2.4.7/0026-secure-card-interpreter-fix.patch b/patches/ppp-2.4.7/0026-secure-card-interpreter-fix.patch new file mode 100644 index 000000000..fb54a5e9d --- /dev/null +++ b/patches/ppp-2.4.7/0026-secure-card-interpreter-fix.patch @@ -0,0 +1,26 @@ +From: Marco d'Itri <md@linux.it> +Date: Fri, 2 Jun 2017 11:29:20 +0200 +Subject: [PATCH] secure-card-interpreter-fix + +This fixes the lintian warning: +I: ppp: example-wrong-path-for-interpreter + usr/share/doc/ppp/examples/scripts/secure-card + (#!/usr/local/bin/expect != /usr/bin/expect) + +Author: Chris Boot <bootc@debian.org> +Forwarded: not-needed +Last-Update: 2013-09-09 +--- + scripts/secure-card | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/scripts/secure-card b/scripts/secure-card +index 0002365e4edb..ae3ae50c14f4 100755 +--- a/scripts/secure-card ++++ b/scripts/secure-card +@@ -1,4 +1,4 @@ +-#!/usr/local/bin/expect -f ++#!/usr/bin/expect -f + # + # This script was written by Jim Isaacson <jcisaac@crl.com>. It is + # designed to work as a script to use the SecureCARD(tm) device. This diff --git a/patches/ppp-2.4.7/0027-Fix-buffer-overflow-in-rc_mksid.patch b/patches/ppp-2.4.7/0027-Fix-buffer-overflow-in-rc_mksid.patch new file mode 100644 index 000000000..29a6ea1d6 --- /dev/null +++ b/patches/ppp-2.4.7/0027-Fix-buffer-overflow-in-rc_mksid.patch @@ -0,0 +1,30 @@ +From: Emanuele Rocca <ema@debian.org> +Date: Fri, 2 Jun 2017 11:30:48 +0200 +Subject: [PATCH] Fix buffer overflow in rc_mksid() + +rc_mksid converts the PID of pppd to hex to generate a pseudo-unique string. + +If the process id is bigger than 65535 (FFFF), its hex representation will be +longer than 4 characters, resulting in a buffer overflow. + +The bug can be exploited to cause a remote DoS. + +Bug-Debian: https://bugs.debian.org/782450 +Last-Update: <2015-04-14> +--- + pppd/plugins/radius/util.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/pppd/plugins/radius/util.c b/pppd/plugins/radius/util.c +index 6f976a712951..166bd5f31d7a 100644 +--- a/pppd/plugins/radius/util.c ++++ b/pppd/plugins/radius/util.c +@@ -77,7 +77,7 @@ rc_mksid (void) + static unsigned short int cnt = 0; + sprintf (buf, "%08lX%04X%02hX", + (unsigned long int) time (NULL), +- (unsigned int) getpid (), ++ (unsigned int) getpid () % 65535, + cnt & 0xFF); + cnt++; + return buf; diff --git a/patches/ppp-2.4.7/0028-Add-a-SONAME-to-the-pppd-binary.patch b/patches/ppp-2.4.7/0028-Add-a-SONAME-to-the-pppd-binary.patch new file mode 100644 index 000000000..df533456a --- /dev/null +++ b/patches/ppp-2.4.7/0028-Add-a-SONAME-to-the-pppd-binary.patch @@ -0,0 +1,38 @@ +From: Chris Boot <bootc@debian.org> +Date: Fri, 2 Jun 2017 11:31:35 +0200 +Subject: [PATCH] Add a SONAME to the pppd binary + + This hack inserts a SONAME into the pppd binary, which allows us to + run dpkg-gensymbols/dh_makeshlibs over the resulting binary. This is + useful so that we can use Debian's standard build infrastructure to + help track the ppp binary's ABI, which is used by plugins. + +Forwarded: not-needed +Last-Update: 2015-12-05 +--- + pppd/Makefile.linux | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux +index a90cbdcf8bb1..f1b2c90bb510 100644 +--- a/pppd/Makefile.linux ++++ b/pppd/Makefile.linux +@@ -206,6 +206,8 @@ endif + + INSTALL= install + ++VERSION = $(shell awk -F '"' '/VERSION/ { print $$2; }' patchlevel.h) ++ + all: $(TARGETS) + + install: pppd +@@ -217,7 +219,8 @@ install: pppd + $(INSTALL) -c -m 444 pppd.8 $(MANDIR) + + pppd: $(PPPDOBJS) +- $(CC) $(LDFLAGS) -o pppd $(PPPDOBJS) $(LIBS) ++ $(CC) $(LDFLAGS) -o pppd $(PPPDOBJS) $(LIBS) \ ++ -Wl,-soname,pppd.so.$(VERSION) + + srp-entry: srp-entry.c + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ srp-entry.c $(LIBS) diff --git a/patches/ppp-2.4.7/0029-Fix-FTBFS-in-rp-pppoe.patch b/patches/ppp-2.4.7/0029-Fix-FTBFS-in-rp-pppoe.patch new file mode 100644 index 000000000..9a9d34760 --- /dev/null +++ b/patches/ppp-2.4.7/0029-Fix-FTBFS-in-rp-pppoe.patch @@ -0,0 +1,36 @@ +From: Chris Boot <bootc@debian.org> +Date: Fri, 2 Jun 2017 11:32:22 +0200 +Subject: [PATCH] Fix FTBFS in rp-pppoe + + Include netinet/in.h earlier to avoid a conflict with linux/in.h. See Bug + #824442 (on src:glibc) for information related to this. + +Bug-Debian: https://bugs.debian.org/824442 +Forwarded: no +Last-Update: 2016-11-11 +--- + pppd/plugins/rp-pppoe/pppoe.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/pppd/plugins/rp-pppoe/pppoe.h b/pppd/plugins/rp-pppoe/pppoe.h +index 86d2b1e47a25..fee9ab62ee21 100644 +--- a/pppd/plugins/rp-pppoe/pppoe.h ++++ b/pppd/plugins/rp-pppoe/pppoe.h +@@ -49,6 +49,8 @@ + #include <sys/socket.h> + #endif + ++#include <netinet/in.h> ++ + /* Ugly header files on some Linux boxes... */ + #if defined(HAVE_LINUX_IF_H) + #include <linux/if.h> +@@ -86,8 +88,6 @@ typedef unsigned long UINT32_t; + #include <linux/if_ether.h> + #endif + +-#include <netinet/in.h> +- + #ifdef HAVE_NETINET_IF_ETHER_H + #include <sys/types.h> + diff --git a/patches/ppp-2.4.7/0030-pppd-make-makefile-sysroot-aware.patch b/patches/ppp-2.4.7/0030-pppd-make-makefile-sysroot-aware.patch new file mode 100644 index 000000000..098b526c6 --- /dev/null +++ b/patches/ppp-2.4.7/0030-pppd-make-makefile-sysroot-aware.patch @@ -0,0 +1,38 @@ +From: Marc Kleine-Budde <m.kleine-budde@pengutronix.de> +Date: Wed, 25 Jan 2012 17:50:07 +0100 +Subject: [PATCH] pppd: make makefile sysroot aware + +The pppd Makefile is not SYSROOT aware. This patch replaces all +occurrences of absolute paths by their corresponding SYSROOT relative +ones. + +Signed-off-by: Marc Kleine-Budde <m.kleine-budde@pengutronix.de> +Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> +--- + pppd/Makefile.linux | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/pppd/Makefile.linux b/pppd/Makefile.linux +index f1b2c90bb510..8b88f2b4811d 100644 +--- a/pppd/Makefile.linux ++++ b/pppd/Makefile.linux +@@ -100,8 +100,8 @@ endif + + # EAP SRP-SHA1 + ifdef USE_SRP +-CFLAGS += -DUSE_SRP -DOPENSSL -I/usr/local/ssl/include +-LIBS += -lsrp -L/usr/local/ssl/lib -lcrypto ++CFLAGS += -DUSE_SRP -DOPENSSL -I$(SYSROOT)/usr/local/ssl/include ++LIBS += -lsrp -L$(SYSROOT)/usr/local/ssl/lib -lcrypto + TARGETS += srp-entry + EXTRAINSTALL = $(INSTALL) -c -m 555 srp-entry $(BINDIR)/srp-entry + MANPAGES += srp-entry.8 +@@ -124,7 +124,7 @@ endif + ifdef NO_CRYPT_HACK + CFLAGS += -DNO_CRYPT_HACK + else +-ifneq ($(wildcard /usr/include/crypt.h),) ++ifdef USE_CRYPT + CFLAGS += -DHAVE_CRYPT_H=1 + LIBS += -lcrypt + endif diff --git a/patches/ppp-2.4.7/0031-pppd-make-the-self-made-configure-cross-aware.patch b/patches/ppp-2.4.7/0031-pppd-make-the-self-made-configure-cross-aware.patch new file mode 100644 index 000000000..0747d58b6 --- /dev/null +++ b/patches/ppp-2.4.7/0031-pppd-make-the-self-made-configure-cross-aware.patch @@ -0,0 +1,44 @@ +From: Juergen Beisert <juergen@kreuzholzen.de> +Date: Wed, 25 Jan 2012 17:50:07 +0100 +Subject: [PATCH] pppd: make the self made configure cross aware + +Give us a chance to setup targets Kernel and arch. + +Signed-off-by: Juergen Beisert <juergen@kreuzholzen.de> +--- + configure | 10 ++++++++++ + pppd/plugins/Makefile.linux | 2 +- + 2 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/configure b/configure +index 6a55e0f08be4..3886564fa495 100755 +--- a/configure ++++ b/configure +@@ -14,6 +14,16 @@ SYSCONF=/etc + # fi + state="unknown" + ++if [ -n $TARGET_OS ]; then ++ system=$TARGET_OS ++fi ++if [ -n $TARGET_OS_VER ]; then ++ release=$TARGET_OS_VER ++fi ++if [ -n $TARGET_OS_ARCH ]; then ++ arch=$TARGET_OS_ARCH ++fi ++ + case $system in + Linux) + makext="linux"; +diff --git a/pppd/plugins/Makefile.linux b/pppd/plugins/Makefile.linux +index 732cc8b411d2..193d884b898b 100644 +--- a/pppd/plugins/Makefile.linux ++++ b/pppd/plugins/Makefile.linux +@@ -44,5 +44,5 @@ clean: + for d in $(SUBDIRS); do $(MAKE) $(MFLAGS) -C $$d clean; done + + depend: +- $(CPP) -M $(CFLAGS) *.c >.depend ++ $(CC) -M $(CFLAGS) *.c >.depend + for d in $(SUBDIRS); do $(MAKE) $(MFLAGS) -C $$d depend; done diff --git a/patches/ppp-2.4.7/series b/patches/ppp-2.4.7/series new file mode 100644 index 000000000..16d682fd7 --- /dev/null +++ b/patches/ppp-2.4.7/series @@ -0,0 +1,34 @@ +# generated by git-ptx-patches +#tag:base --start-number 1 +0001-adaptive_echos.patch +0002-Makefiles-cleanup.patch +0003-Bug-306261-pppd-does-not-properly-close-dev-ppp-on-p.patch +0004-Bug-284382-ppp-linkpidfile-is-not-created-upon-detac.patch +0005-support-building-pppdump-with-the-system-zlib.patch +0006-disable-unneeded-code-in-the-pppoatm-plugin.patch +0007-cosmetic-cleanup-of-the-pppoatm-plugin.patch +0008-pppoe_noads.patch +0009-make-_PATH_CONNERRS-world-readable.patch +0010-Correct-unkown-unknown-typo.patch +0011-pppoe-custom-host-uniq-tag.patch +0012-scripts_redialer.patch +0013-Add-replacedefaultroute-option.patch +0014-ppp-2.3.11-oedod.patch +0015-add-support-for-the-Framed-MTU-Radius-attribute.patch +0016-ip-up_option.patch +0017-ppp-2.4.2-stripMSdomain.patch +0018-export-CALL_FILE-to-the-link-scripts.patch +0019-ipv6-accept-remote.patch +0020-allow-use-of-arbitrary-interface-names.patch +0021-fix-a-potential-buffer-overflow-in-clientid.c-rc_map.patch +0022-scripts-README.patch +0023-no_crypt_hack.patch +0024-resolv.conf_no_log.patch +0025-Debian-specific-changes.patch +0026-secure-card-interpreter-fix.patch +0027-Fix-buffer-overflow-in-rc_mksid.patch +0028-Add-a-SONAME-to-the-pppd-binary.patch +0029-Fix-FTBFS-in-rp-pppoe.patch +0030-pppd-make-makefile-sysroot-aware.patch +0031-pppd-make-the-self-made-configure-cross-aware.patch +# f55804e4f06ed6ed1e5f0e3f1db50b6a - git-ptx-patches magic |