This bumps ppp to latest git version.
There is one upstream commit, which changes DES encryption calls from
libcrypt / glibc to openssl.
As long as we don't use glibc-2.28, revert this commit.
Signed-off-by: Martin Schiller <ms@dev.tdt.de>
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=ppp
-PKG_VERSION:=2.4.7
-PKG_RELEASE:=14
+PKG_RELEASE:=1
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://download.samba.org/pub/ppp/
-PKG_HASH:=02e0a3dd3e4799e33103f70ec7df75348c8540966ee7c948e4ed8a42bbccfb30
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/paulusmack/ppp
+PKG_SOURCE_DATE:=2018-06-23
+PKG_SOURCE_VERSION:=5c765a67fd25f9d84e71ed61ace37c8c97f6be15
+PKG_MIRROR_HASH:=a79e62d0569e3d6a3207f2a693532d34629fb5b3b9d8c1d9b9786ebd1d1de70f
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
PKG_LICENSE:=BSD-4-Clause
PKG_CPE_ID:=cpe:/a:samba:ppp
+PKG_RELEASE_VERSION:=2.4.7
+PKG_VERSION:=$(PKG_RELEASE_VERSION).git-$(PKG_SOURCE_DATE)
+
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
PKG_BUILD_DEPENDS:=libpcap
endef
define Package/ppp/install
- $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION)
+ $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/sbin/pppd $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/etc/ppp
Package/ppp-multilink/install=$(Package/ppp/install)
define Package/ppp-mod-pppoa/install
- $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION)
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_VERSION)/pppoatm.so \
- $(1)/usr/lib/pppd/$(PKG_VERSION)/
+ $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_RELEASE_VERSION)/pppoatm.so \
+ $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)/
endef
define Package/ppp-mod-pppoe/install
- $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION)
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_VERSION)/rp-pppoe.so \
- $(1)/usr/lib/pppd/$(PKG_VERSION)/
+ $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_RELEASE_VERSION)/rp-pppoe.so \
+ $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)/
endef
define Package/ppp-mod-radius/install
- $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION)
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_VERSION)/radius.so \
- $(1)/usr/lib/pppd/$(PKG_VERSION)/
+ $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_RELEASE_VERSION)/radius.so \
+ $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)/
$(INSTALL_DIR) $(1)/etc/ppp
$(INSTALL_DATA) ./files/etc/ppp/radius.conf $(1)/etc/ppp/
$(INSTALL_DIR) $(1)/etc/ppp/radius
endef
define Package/ppp-mod-pppol2tp/install
- $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION)
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_VERSION)/pppol2tp.so \
- $(1)/usr/lib/pppd/$(PKG_VERSION)/
+ $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_RELEASE_VERSION)/pppol2tp.so \
+ $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)/
endef
define Package/ppp-mod-pptp/install
- $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION)
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_VERSION)/pptp.so \
- $(1)/usr/lib/pppd/$(PKG_VERSION)/
+ $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_RELEASE_VERSION)/pptp.so \
+ $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)/
$(INSTALL_DIR) $(1)/etc/ppp
$(INSTALL_DATA) ./files/etc/ppp/options.pptp $(1)/etc/ppp/
endef
define Package/ppp-mod-passwordfd/install
- $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION)
- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_VERSION)/passwordfd.so \
- $(1)/usr/lib/pppd/$(PKG_VERSION)/
+ $(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_RELEASE_VERSION)/passwordfd.so \
+ $(1)/usr/lib/pppd/$(PKG_RELEASE_VERSION)/
endef
define Package/chat/install
+++ /dev/null
---- a/pppd/plugins/radius/Makefile.linux
-+++ b/pppd/plugins/radius/Makefile.linux
-@@ -43,13 +43,13 @@ install: all
- $(INSTALL) -c -m 444 pppd-radattr.8 $(MANDIR)
-
- radius.so: radius.o libradiusclient.a
-- $(CC) -o radius.so -shared radius.o libradiusclient.a
-+ $(CC) $(CFLAGS) -o radius.so -shared radius.o libradiusclient.a
-
- radattr.so: radattr.o
-- $(CC) -o radattr.so -shared radattr.o
-+ $(CC) $(CFLAGS) -o radattr.so -shared radattr.o
-
- radrealms.so: radrealms.o
-- $(CC) -o radrealms.so -shared radrealms.o
-+ $(CC) $(CFLAGS) -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
---- a/pppd/plugins/rp-pppoe/Makefile.linux
-+++ b/pppd/plugins/rp-pppoe/Makefile.linux
-@@ -30,7 +30,7 @@ CFLAGS=$(COPTS) -I../../../include '-DRP
- all: rp-pppoe.so pppoe-discovery
-
- pppoe-discovery: pppoe-discovery.o debug.o
-- $(CC) -o pppoe-discovery pppoe-discovery.o debug.o
-+ $(CC) $(CFLAGS) -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,7 +39,7 @@ 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) $(CFLAGS) -o rp-pppoe.so -shared plugin.o discovery.o if.o common.o
-
- install: all
- $(INSTALL) -d -m 755 $(LIBDIR)
}
--- a/pppd/main.c
+++ b/pppd/main.c
-@@ -316,6 +316,9 @@ main(argc, argv)
+@@ -308,6 +308,9 @@ main(argc, argv)
struct protent *protp;
char numbuf[16];
--- a/pppd/options.c
+++ b/pppd/options.c
-@@ -114,6 +114,8 @@ char linkname[MAXPATHLEN]; /* logical na
- bool tune_kernel; /* may alter kernel settings */
+@@ -118,6 +118,8 @@ bool tune_kernel; /* may alter kernel s
int connect_delay = 1000; /* wait this many ms after connect script */
int req_unit = -1; /* requested interface unit */
+ char req_ifname[MAXIFNAMELEN]; /* requested interface name */
+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 },
+@@ -317,6 +319,13 @@ option_t general_options[] = {
+ "Metric to use for the default route (Linux only; -1 for default behavior)",
+ OPT_PRIV|OPT_LLIMIT|OPT_INITONLY, NULL, 0, -1 },
+ { "ip-up-script", o_string, path_ipup,
+ "Set pathname of ip-up script",
"Enable multilink operation", OPT_PRIO | 1 },
--- a/pppd/pppd.h
+++ b/pppd/pppd.h
-@@ -318,6 +318,8 @@ extern bool tune_kernel; /* May alter ke
- extern int connect_delay; /* Time to delay after connect script */
+@@ -332,6 +332,8 @@ extern int connect_delay; /* Time to del
extern int max_data_rate; /* max bytes/sec through charshunt */
extern int req_unit; /* interface unit number to use */
+ extern char req_ifname[MAXIFNAMELEN]; /* interface name 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 */
--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
-@@ -458,6 +458,13 @@ int generic_establish_ppp (int fd)
+@@ -460,6 +460,13 @@ int generic_establish_ppp (int fd)
if (new_style_driver) {
int flags;
--- a/pppd/main.c
+++ b/pppd/main.c
-@@ -773,8 +773,7 @@ detach()
+@@ -768,8 +768,7 @@ detach()
/* update pid files if they have been written already */
if (pidfilename[0])
create_pidfile(pid);
} else {
--- a/pppd/pppd.h
+++ b/pppd/pppd.h
-@@ -585,7 +585,7 @@ void demand_conf __P((void)); /* config
+@@ -599,7 +599,7 @@ void demand_conf __P((void)); /* config
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 */
bool old_vj; /* use old (short) form of VJ option? */
--- a/pppd/pppd.8
+++ b/pppd/pppd.8
-@@ -121,6 +121,11 @@ the gateway, when IPCP negotiation is su
- This entry is removed when the PPP connection is broken. This option
- is privileged if the \fInodefaultroute\fR option has been specified.
+@@ -127,6 +127,11 @@ is no other default route with the same
+ value of -1, the route is only added if there is no default route at
+ all.
.TP
+.B replacedefaultroute
+This option is a flag to the defaultroute option. If defaultroute is
.B disconnect \fIscript
Execute the command specified by \fIscript\fR, by passing it to a
shell, after
-@@ -734,7 +739,12 @@ disable both forms of hardware flow cont
+@@ -740,7 +745,12 @@ disable both forms of hardware flow cont
.TP
.B nodefaultroute
Disable the \fIdefaultroute\fR option. The system administrator who
.B nodeflate
--- a/pppd/pppd.h
+++ b/pppd/pppd.h
-@@ -667,7 +667,7 @@ int sif6addr __P((int, eui64_t, eui64_t
+@@ -681,7 +681,7 @@ int sif6addr __P((int, eui64_t, eui64_t
int cif6addr __P((int, eui64_t, eui64_t));
/* Remove an IPv6 address from i/f */
#endif
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 rtent
+@@ -1570,6 +1572,9 @@ static int read_route_table(struct rtent
p = NULL;
}
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,20 +1626,51 @@ int have_route_to(u_int32_t addr)
+@@ -1642,20 +1647,52 @@ int have_route_to(u_int32_t addr)
/********************************************************************
*
* sifdefaultroute - assign a default route through the address given.
-{
- struct rtentry rt;
-
-- if (defaultroute_exists(&rt) && strcmp(rt.rt_dev, ifname) != 0) {
+- if (defaultroute_exists(&rt, dfl_route_metric) && 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));
+- error("not replacing existing default route via %I with metric %d",
+- SIN_ADDR(rt.rt_gateway), dfl_route_metric);
- else
+ *
+ * If the global default_rt_repl_rest flag is set, then this function
+ 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))
++ if (defaultroute_exists(&tmp_rt, dfl_route_metric))
+ del_rt = &tmp_rt;
-+ } else if (defaultroute_exists(&old_def_rt) &&
++ } else if (defaultroute_exists(&old_def_rt, dfl_route_metric) &&
+ 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: */
+ if (old_def_rt.rt_flags & RTF_GATEWAY) {
+ if (!replace) {
-+ error("not replacing existing default route via %I",
-+ SIN_ADDR(old_def_rt.rt_gateway));
++ error("not replacing existing default route via %I with metric %d",
++ SIN_ADDR(old_def_rt.rt_gateway), dfl_route_metric);
+ return 0;
+ } else {
+ /* we need to copy rt_dev because we need it permanent too: */
+ 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, SIN_ADDR(old_def_rt.rt_gateway));
++ notice("replacing old default route to %s [%I] with metric %d",
++ old_def_rt.rt_dev, SIN_ADDR(old_def_rt.rt_gateway),
++ dfl_route_metric);
+ default_rt_repl_rest = 1;
+ del_rt = &old_def_rt;
+ }
+ } else
- error("not replacing existing default route through %s",
-- rt.rt_dev);
+ error("not replacing existing default route through %s with metric %d",
+- rt.rt_dev, dfl_route_metric);
- return 0;
-+ old_def_rt.rt_dev);
++ old_def_rt.rt_dev, dfl_route_metric);
}
memset (&rt, 0, sizeof (rt));
-@@ -1649,10 +1685,16 @@ int sifdefaultroute (int unit, u_int32_t
+@@ -1671,10 +1708,16 @@ int sifdefaultroute (int unit, u_int32_t
rt.rt_flags = RTF_UP;
if (ioctl(sock_fd, SIOCADDRT, &rt) < 0) {
have_default_route = 1;
return 1;
-@@ -1683,11 +1725,21 @@ int cifdefaultroute (int unit, u_int32_t
+@@ -1708,11 +1751,21 @@ int cifdefaultroute (int unit, u_int32_t
rt.rt_flags = RTF_UP;
if (ioctl(sock_fd, SIOCDELRT, &rt) < 0 && errno != ESRCH) {
if (still_ppp()) {
--- a/pppd/main.c
+++ b/pppd/main.c
-@@ -318,6 +318,8 @@ main(argc, argv)
+@@ -310,6 +310,8 @@ main(argc, argv)
strlcpy(path_ipup, _PATH_IPUP, sizeof(path_ipup));
strlcpy(path_ipdown, _PATH_IPDOWN, sizeof(path_ipdown));
new_phase(PHASE_INITIALIZE);
--- a/pppd/options.c
+++ b/pppd/options.c
-@@ -116,6 +116,8 @@ int connect_delay = 1000; /* wait this m
- int req_unit = -1; /* requested interface unit */
+@@ -120,6 +120,8 @@ int req_unit = -1; /* requested interfa
+ char req_ifname[MAXIFNAMELEN]; /* requested interface name */
char path_ipup[MAXPATHLEN]; /* pathname of ip-up script */
char path_ipdown[MAXPATHLEN];/* pathname of ip-down script */
+char path_ipv6up[MAXPATHLEN]; /* pathname of ipv6-up script */
bool multilink = 0; /* Enable multilink operation */
char *bundle_name = NULL; /* bundle name for multilink */
bool dump_options; /* print out option values */
-@@ -308,6 +310,13 @@ option_t general_options[] = {
+@@ -326,6 +328,13 @@ option_t general_options[] = {
"Set pathname of ip-down script",
OPT_PRIV|OPT_STATIC, NULL, MAXPATHLEN },
}
--- a/pppd/pppd.h
+++ b/pppd/pppd.h
-@@ -320,6 +320,8 @@ extern int max_data_rate; /* max bytes/s
- extern int req_unit; /* interface unit number to use */
+@@ -334,6 +334,8 @@ extern int req_unit; /* interface unit n
+ extern char req_ifname[MAXIFNAMELEN]; /* interface name to use */
extern char path_ipup[MAXPATHLEN]; /* pathname of ip-up script */
extern char path_ipdown[MAXPATHLEN]; /* pathname of ip-down script */
+extern char path_ipv6up[MAXPATHLEN]; /* pathname of ipv6-up script */
*/
--- a/pppd/pppd.8
+++ b/pppd/pppd.8
-@@ -563,6 +563,11 @@ to 1) if the \fIproxyarp\fR option is us
+@@ -569,6 +569,11 @@ to 1) if the \fIproxyarp\fR option is us
dynamic IP address option (i.e. set /proc/sys/net/ipv4/ip_dynaddr to
1) in demand mode if the local address changes.
.TP
--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
-@@ -73,12 +73,12 @@
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/time.h>
--#include <sys/errno.h>
- #include <sys/file.h>
- #include <sys/stat.h>
- #include <sys/utsname.h>
- #include <sys/sysmacros.h>
-
-+#include <errno.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <syslog.h>
@@ -102,22 +102,15 @@
#define MAX_ADDR_LEN 7
#endif
--- a/pppd/plugins/rp-pppoe/pppoe.h
+++ b/pppd/plugins/rp-pppoe/pppoe.h
-@@ -48,11 +48,7 @@
- #endif
+@@ -52,11 +52,7 @@
+ #include <netinet/in.h>
/* Ugly header files on some Linux boxes... */
-#if defined(HAVE_LINUX_IF_H)
#ifdef HAVE_NET_IF_TYPES_H
#include <net/if_types.h>
-@@ -80,22 +76,8 @@ typedef unsigned long UINT32_t;
+@@ -84,20 +80,7 @@ typedef unsigned long UINT32_t;
#error Could not find a 32-bit integer type
#endif
-#ifdef HAVE_LINUX_IF_ETHER_H
-#include <linux/if_ether.h>
-#endif
--
- #include <netinet/in.h>
-
-#ifdef HAVE_NETINET_IF_ETHER_H
-#include <sys/types.h>
+#include <net/ethernet.h>
-
---- a/pppd/plugins/rp-pppoe/pppoe-discovery.c
-+++ b/pppd/plugins/rp-pppoe/pppoe-discovery.c
-@@ -16,6 +16,7 @@
- #include <string.h>
-
- #include "pppoe.h"
-+#include "pppd/pppd.h"
-
- #ifdef HAVE_UNISTD_H
- #include <unistd.h>
-@@ -717,6 +718,23 @@ char *xstrdup(const char *s)
- return ret;
- }
-
-+void
-+error(char *fmt, ...)
-+{
-+ va_list pvar;
-+
-+#if defined(__STDC__)
-+ va_start(pvar, fmt);
-+#else
-+ char *fmt;
-+ va_start(pvar);
-+ fmt = va_arg(pvar, char *);
-+#endif
-+
-+ fprintf(stderr, fmt, pvar);
-+ va_end(pvar);
-+}
-+
- void usage(void)
- {
- fprintf(stderr, "Usage: pppoe-discovery [options]\n");
+ /* Ethernet frame types according to RFC 2516 */
--- a/pppd/plugins/rp-pppoe/Makefile.linux
+++ b/pppd/plugins/rp-pppoe/Makefile.linux
@@ -33,7 +33,7 @@ pppoe-discovery: pppoe-discovery.o debug
- $(CC) $(CFLAGS) -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
-USE_TDB=y
+#USE_TDB=y
- HAS_SHADOW=y
- #USE_PAM=y
-@@ -80,7 +80,7 @@ MAXOCTETS=y
+ # Uncomment the next line to enable Type=notify services in systemd
+ # If enabled, and the user sets the up_sdnotify option, then
+@@ -85,7 +85,7 @@ MAXOCTETS=y
INCLUDE_DIRS= -I../include
CFLAGS= $(COPTS) $(COMPILE_FLAGS) $(INCLUDE_DIRS) '-DDESTDIR="@DESTDIR@"'
-@@ -120,10 +120,10 @@ CFLAGS += -DHAS_SHADOW
+@@ -125,10 +125,10 @@ CFLAGS += -DHAS_SHADOW
#LIBS += -lshadow $(LIBS)
endif
if (go->bsd_compress) {
opt_buf[0] = CI_BSD_COMPRESS;
opt_buf[1] = CILEN_BSD_COMPRESS;
-@@ -679,7 +814,8 @@ ccp_cilen(f)
- + (go->deflate? CILEN_DEFLATE: 0)
+@@ -680,7 +815,8 @@ ccp_cilen(f)
+ + (go->deflate && go->deflate_draft? CILEN_DEFLATE: 0)
+ (go->predictor_1? CILEN_PREDICTOR_1: 0)
+ (go->predictor_2? CILEN_PREDICTOR_2: 0)
- + (go->mppe? CILEN_MPPE: 0);
}
/*
-@@ -693,6 +829,8 @@ ccp_addci(f, p, lenp)
+@@ -694,6 +830,8 @@ ccp_addci(f, p, lenp)
{
int res;
ccp_options *go = &ccp_gotoptions[f->unit];
u_char *p0 = p;
/*
-@@ -701,22 +839,43 @@ ccp_addci(f, p, lenp)
+@@ -702,22 +840,43 @@ ccp_addci(f, p, lenp)
* in case it gets Acked.
*/
#ifdef MPPE
if (go->deflate) {
p[0] = go->deflate_correct? CI_DEFLATE: CI_DEFLATE_DRAFT;
p[1] = CILEN_DEFLATE;
-@@ -802,7 +961,7 @@ ccp_addci(f, p, lenp)
+@@ -803,7 +962,7 @@ ccp_addci(f, p, lenp)
/*
* ccp_ackci - process a received configure-ack, and return
*/
static int
ccp_ackci(f, p, len)
-@@ -811,24 +970,44 @@ ccp_ackci(f, p, len)
+@@ -812,24 +971,44 @@ ccp_ackci(f, p, len)
int len;
{
ccp_options *go = &ccp_gotoptions[f->unit];
if (go->deflate) {
if (len < CILEN_DEFLATE
|| p[0] != (go->deflate_correct? CI_DEFLATE: CI_DEFLATE_DRAFT)
-@@ -901,6 +1080,8 @@ ccp_nakci(f, p, len, treat_as_reject)
+@@ -902,6 +1081,8 @@ ccp_nakci(f, p, len, treat_as_reject)
int treat_as_reject;
{
ccp_options *go = &ccp_gotoptions[f->unit];
ccp_options no; /* options we've seen already */
ccp_options try; /* options to ask for next time */
-@@ -908,28 +1089,100 @@ ccp_nakci(f, p, len, treat_as_reject)
+@@ -909,28 +1090,100 @@ ccp_nakci(f, p, len, treat_as_reject)
try = *go;
#ifdef MPPE
if (go->deflate && len >= CILEN_DEFLATE
&& p[0] == (go->deflate_correct? CI_DEFLATE: CI_DEFLATE_DRAFT)
&& p[1] == CILEN_DEFLATE) {
-@@ -1002,14 +1255,50 @@ ccp_rejci(f, p, len)
+@@ -1003,14 +1256,50 @@ ccp_rejci(f, p, len)
return -1;
#ifdef MPPE
if (go->deflate_correct && len >= CILEN_DEFLATE
&& p[0] == CI_DEFLATE && p[1] == CILEN_DEFLATE) {
if (p[2] != DEFLATE_MAKE_OPT(go->deflate_size)
-@@ -1073,14 +1362,15 @@ ccp_reqci(f, p, lenp, dont_nak)
+@@ -1074,14 +1363,15 @@ ccp_reqci(f, p, lenp, dont_nak)
int dont_nak;
{
int ret, newret, res;
ret = CONFACK;
retp = p0 = p;
-@@ -1103,106 +1393,302 @@ ccp_reqci(f, p, lenp, dont_nak)
+@@ -1104,106 +1394,302 @@ ccp_reqci(f, p, lenp, dont_nak)
switch (type) {
#ifdef MPPE
case CI_MPPE:
case CI_DEFLATE:
case CI_DEFLATE_DRAFT:
if (!ao->deflate || clen != CILEN_DEFLATE
-@@ -1344,12 +1830,6 @@ ccp_reqci(f, p, lenp, dont_nak)
+@@ -1345,12 +1831,6 @@ ccp_reqci(f, p, lenp, dont_nak)
else
*lenp = retp - p0;
}
return ret;
}
-@@ -1371,24 +1851,35 @@ method_name(opt, opt2)
+@@ -1372,24 +1852,35 @@ method_name(opt, opt2)
char *p = result;
char *q = result + sizeof(result); /* 1 past result */
case CI_DEFLATE:
case CI_DEFLATE_DRAFT:
if (opt2 != NULL && opt2->deflate_size != opt->deflate_size)
-@@ -1444,12 +1935,12 @@ ccp_up(f)
+@@ -1445,12 +1936,12 @@ ccp_up(f)
} else if (ANY_COMPRESS(*ho))
notice("%s transmit compression enabled", method_name(ho, NULL));
#ifdef MPPE
}
/*
-@@ -1472,7 +1963,7 @@ ccp_down(f)
+@@ -1473,7 +1964,7 @@ ccp_down(f)
lcp_close(f->unit, "MPPE disabled");
}
}
}
/*
-@@ -1532,24 +2023,28 @@ ccp_printpkt(p, plen, printer, arg)
+@@ -1533,24 +2024,28 @@ ccp_printpkt(p, plen, printer, arg)
#ifdef MPPE
case CI_MPPE:
if (optlen >= CILEN_MPPE) {
case CI_DEFLATE:
case CI_DEFLATE_DRAFT:
if (optlen >= CILEN_DEFLATE) {
-@@ -1635,6 +2130,7 @@ ccp_datainput(unit, pkt, len)
+@@ -1636,6 +2131,7 @@ ccp_datainput(unit, pkt, len)
error("Lost compression sync: disabling compression");
ccp_close(unit, "Lost compression sync");
#ifdef MPPE
/*
* If we were doing MPPE, we must also take the link down.
*/
-@@ -1642,9 +2138,18 @@ ccp_datainput(unit, pkt, len)
+@@ -1643,9 +2139,18 @@ ccp_datainput(unit, pkt, len)
error("Too many MPPE errors, closing LCP");
lcp_close(unit, "Too many MPPE errors");
}
bool deflate_draft; /* use draft RFC code for deflate? */
+ bool lzs; /* do Stac LZS? */
+ bool mppc; /* do MPPC? */
- bool mppe; /* do MPPE? */
+ u_char mppe; /* MPPE bitfield */
+ bool mppe_40; /* allow 40 bit encryption? */
+ bool mppe_56; /* allow 56 bit encryption? */
+ bool mppe_128; /* allow 128 bit encryption? */
clean:
--- a/pppd/Makefile.linux
+++ b/pppd/Makefile.linux
-@@ -102,7 +102,7 @@ ifdef USE_SRP
+@@ -107,7 +107,7 @@ ifdef USE_SRP
CFLAGS += -DUSE_SRP -DOPENSSL -I/usr/local/ssl/include
LIBS += -lsrp -L/usr/local/ssl/lib -lcrypto
TARGETS += srp-entry
MANPAGES += srp-entry.8
EXTRACLEAN += srp-entry.o
NEEDDES=y
-@@ -208,7 +208,7 @@ all: $(TARGETS)
+@@ -219,7 +219,7 @@ all: $(TARGETS)
install: pppd
mkdir -p $(BINDIR) $(MANDIR)
$(EXTRAINSTALL)
# Uncomment the next line to include support for Microsoft's
# MS-CHAP authentication protocol.
+@@ -43,13 +44,13 @@ install: all
+ $(INSTALL) -c -m 444 pppd-radattr.8 $(MANDIR)
+
+ radius.so: radius.o libradiusclient.a
+- $(CC) $(LDFLAGS) -o radius.so -shared radius.o libradiusclient.a
++ $(CC) $(LDFLAGS) -fPIC -o radius.so -shared radius.o libradiusclient.a
+
+ radattr.so: radattr.o
+- $(CC) $(LDFLAGS) -o radattr.so -shared radattr.o
++ $(CC) $(LDFLAGS) -fPIC -o radattr.so -shared radattr.o
+
+ radrealms.so: radrealms.o
+- $(CC) $(LDFLAGS) -o radrealms.so -shared radrealms.o
++ $(CC) $(LDFLAGS) -fPIC -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
--- a/pppdump/Makefile.linux
+++ b/pppdump/Makefile.linux
@@ -2,7 +2,8 @@ DESTDIR = $(INSTROOT)@DESTDIR@
$(CC) $(CFLAGS) -c -o debug.o debug.c
rp-pppoe.so: plugin.o discovery.o if.o common.o
-- $(CC) $(CFLAGS) -o rp-pppoe.so -shared plugin.o discovery.o if.o common.o
-+ $(CC) $(CFLAGS) -fPIC -o rp-pppoe.so -shared plugin.o discovery.o if.o common.o
+- $(CC) $(LDFLAGS) -o rp-pppoe.so -shared plugin.o discovery.o if.o common.o
++ $(CC) $(LDFLAGS) -fPIC -o rp-pppoe.so -shared plugin.o discovery.o if.o common.o
install: all
$(INSTALL) -d -m 755 $(LIBDIR)
static void setup_signals __P((void));
static void create_pidfile __P((int pid));
static void create_linkpidfile __P((int pid));
-@@ -535,6 +537,7 @@ main(argc, argv)
+@@ -527,6 +529,7 @@ main(argc, argv)
info("Starting link");
}
gettimeofday(&start_time, NULL);
script_unsetenv("CONNECT_TIME");
script_unsetenv("BYTES_SENT");
-@@ -1267,6 +1270,36 @@ struct callout {
+@@ -1262,6 +1265,36 @@ struct callout {
static struct callout *callout = NULL; /* Callout list */
static struct timeval timenow; /* Current time */
/*
* timeout - Schedule a timeout.
-@@ -1337,6 +1370,8 @@ calltimeout()
+@@ -1332,6 +1365,8 @@ calltimeout()
{
struct callout *p;
while (callout != NULL) {
p = callout;
-@@ -1364,6 +1399,8 @@ timeleft(tvp)
+@@ -1359,6 +1394,8 @@ timeleft(tvp)
{
if (callout == NULL)
return NULL;
--- a/pppd/main.c
+++ b/pppd/main.c
-@@ -1048,7 +1048,8 @@ get_input()
+@@ -1043,7 +1043,8 @@ get_input()
}
notice("Modem hangup");
hungup = 1;
--- a/pppd/Makefile.linux
+++ b/pppd/Makefile.linux
-@@ -178,8 +178,8 @@ endif
+@@ -189,8 +189,8 @@ endif
ifdef FILTER
ifneq ($(wildcard /usr/include/pcap-bpf.h),)
# Uncomment the next line to enable multilink PPP (enabled by default)
# Linux distributions: Please leave multilink ENABLED in your builds
# of pppd!
-@@ -183,6 +186,14 @@ CFLAGS += -DPPP_FILTER -I$(STAGING_DIR)
+@@ -194,6 +197,14 @@ CFLAGS += -DPPP_FILTER -I$(STAGING_DIR)
endif
endif
/*
* There have been 3 or 4 different names for this in libpcap CVS, but
* this seems to be what they have settled on...
-@@ -165,6 +166,13 @@ static int setlogfile __P((char **));
+@@ -170,6 +171,13 @@ static int setlogfile __P((char **));
static int loadplugin __P((char **));
#endif
#ifdef PPP_FILTER
static int setpassfilter __P((char **));
static int setactivefilter __P((char **));
-@@ -344,6 +352,14 @@ option_t general_options[] = {
+@@ -362,6 +370,14 @@ option_t general_options[] = {
"set filter for active pkts", OPT_PRIO },
#endif
#ifdef MAXOCTETS
{ "maxoctets", o_int, &maxoctets,
"Set connection traffic limit",
-@@ -1493,6 +1509,29 @@ callfile(argv)
+@@ -1511,6 +1527,29 @@ callfile(argv)
return ok;
}
+++ /dev/null
-pppd: Support arbitrary interface names
-
-This patch implements a new string option "ifname" which allows to specify
-fully custom PPP interface names on Linux. It does so by renaming the
-allocated pppX device immediately after it has been created to the requested
-interface name.
-
-Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-
---- a/pppd/main.c
-+++ b/pppd/main.c
-@@ -745,8 +745,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 (use_ifname[0] == 0)
-+ slprintf(ifname, sizeof(ifname), "%s%d", PPP_DRV_NAME, ifunit);
-+ else
-+ slprintf(ifname, sizeof(ifname), "%s", use_ifname);
-+ info("Using interface %s", ifname);
- script_setenv("IFNAME", ifname, iskey);
- if (iskey) {
- create_pidfile(getpid()); /* write pid to file */
---- a/pppd/options.c
-+++ b/pppd/options.c
-@@ -112,6 +112,7 @@ int log_to_fd = 1; /* send log messages
- bool log_default = 1; /* log_to_fd is default (stdout) */
- int maxfail = 10; /* max # of unsuccessful connection attempts */
- char linkname[MAXPATHLEN]; /* logical name for link */
-+char use_ifname[IFNAMSIZ]; /* physical name for PPP 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 */
-@@ -277,6 +278,9 @@ option_t general_options[] = {
- { "linkname", o_string, linkname,
- "Set logical name for link",
- OPT_PRIO | OPT_PRIV | OPT_STATIC, NULL, MAXPATHLEN },
-+ { "ifname", o_string, use_ifname,
-+ "Set physical name for PPP interface",
-+ OPT_PRIO | OPT_PRIV | OPT_STATIC, NULL, IFNAMSIZ },
-
- { "maxfail", o_int, &maxfail,
- "Maximum number of unsuccessful connection attempts to allow",
---- a/pppd/pppd.h
-+++ b/pppd/pppd.h
-@@ -74,6 +74,10 @@
- #include "eui64.h"
- #endif
-
-+#ifndef IFNAMSIZ
-+#define IFNAMSIZ 16
-+#endif
-+
- /*
- * Limits.
- */
-@@ -317,6 +321,7 @@ extern char *record_file; /* File to rec
- extern bool sync_serial; /* Device is synchronous serial device */
- extern int maxfail; /* Max # of unsuccessful connection attempts */
- extern char linkname[MAXPATHLEN]; /* logical name for link */
-+extern char use_ifname[IFNAMSIZ]; /* physical name for PPP interface */
- 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 */
---- a/pppd/sys-linux.c
-+++ b/pppd/sys-linux.c
-@@ -161,6 +161,10 @@ struct in6_ifreq {
- /* We can get an EIO error on an ioctl if the modem has hung up */
- #define ok_error(num) ((num)==EIO)
-
-+#if !defined(PPP_DRV_NAME)
-+#define PPP_DRV_NAME "ppp"
-+#endif /* !defined(PPP_DRV_NAME) */
-+
- static int tty_disc = N_TTY; /* The TTY discipline */
- static int ppp_disc = N_PPP; /* The PPP discpline */
- static int initfdflags = -1; /* Initial file descriptor flags for fd */
-@@ -620,7 +624,8 @@ void generic_disestablish_ppp(int dev_fd
- */
- static int make_ppp_unit()
- {
-- int x, flags;
-+ struct ifreq ifr;
-+ int x, flags, s;
-
- if (ppp_dev_fd >= 0) {
- dbglog("in make_ppp_unit, already had /dev/ppp open?");
-@@ -643,6 +648,30 @@ static int make_ppp_unit()
- }
- if (x < 0)
- error("Couldn't create new ppp unit: %m");
-+
-+ if (use_ifname[0] != 0) {
-+ s = socket(PF_INET, SOCK_DGRAM, 0);
-+ if (s < 0)
-+ s = socket(PF_PACKET, SOCK_DGRAM, 0);
-+ if (s < 0)
-+ s = socket(PF_INET6, SOCK_DGRAM, 0);
-+ if (s < 0)
-+ s = socket(PF_UNIX, SOCK_DGRAM, 0);
-+ if (s >= 0) {
-+ slprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s%d", PPP_DRV_NAME, ifunit);
-+ slprintf(ifr.ifr_newname, sizeof(ifr.ifr_newname), "%s", use_ifname);
-+ x = ioctl(s, SIOCSIFNAME, &ifr);
-+ close(s);
-+ } else {
-+ x = s;
-+ }
-+ if (x < 0) {
-+ error("Couldn't rename %s to %s", ifr.ifr_name, ifr.ifr_newname);
-+ close(ppp_dev_fd);
-+ ppp_dev_fd = -1;
-+ }
-+ }
-+
- return x;
- }
-
---- a/pppstats/pppstats.c
-+++ b/pppstats/pppstats.c
-@@ -506,10 +506,12 @@ main(argc, argv)
- if (argc > 0)
- interface = argv[0];
-
-+#if 0
- if (sscanf(interface, PPP_DRV_NAME "%d", &unit) != 1) {
- fprintf(stderr, "%s: invalid interface '%s' specified\n",
- progname, interface);
- }
-+#endif
-
- #ifndef STREAMS
- {
2 files changed, 53 insertions(+), 14 deletions(-)
--- a/pppd/multilink.c
+++ b/pppd/multilink.c
-@@ -56,7 +56,8 @@ static void iterate_bundle_links __P((vo
+@@ -35,6 +35,7 @@
+ #include <signal.h>
+ #include <netinet/in.h>
+ #include <unistd.h>
++#include <net/if.h>
+
+ #include "pppd.h"
+ #include "fsm.h"
+@@ -56,7 +57,8 @@ static void iterate_bundle_links __P((vo
static int get_default_epdisc __P((struct epdisc *));
static int parse_num __P((char *str, const char *key, int *valp));
#define set_ip_epdisc(ep, addr) do { \
ep->length = 4; \
-@@ -197,35 +198,38 @@ mp_join_bundle()
+@@ -197,35 +199,38 @@ mp_join_bundle()
key.dptr = bundle_id;
key.dsize = p - bundle_id;
pid = tdb_fetch(pppdb, key);
}
/* we have to make a new bundle */
-@@ -408,22 +412,45 @@ parse_num(str, key, valp)
+@@ -408,22 +413,45 @@ parse_num(str, key, valp)
return 0;
}
&& memcmp(vd.dptr, key.dptr, vd.dsize) == 0;
--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
-@@ -698,6 +698,16 @@ void cfg_bundle(int mrru, int mtru, int
+@@ -686,6 +686,16 @@ void cfg_bundle(int mrru, int mtru, int
add_fd(ppp_dev_fd);
}
/*
* make_new_bundle - create a new PPP unit (i.e. a bundle)
* and connect our channel to it. This should only get called
-@@ -716,6 +726,8 @@ void make_new_bundle(int mrru, int mtru,
+@@ -704,6 +714,8 @@ void make_new_bundle(int mrru, int mtru,
/* set the mrru and flags */
cfg_bundle(mrru, mtru, rssn, tssn);
--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
-@@ -1756,6 +1756,7 @@ int cifdefaultroute (int unit, u_int32_t
+@@ -1753,6 +1753,7 @@ int cifdefaultroute (int unit, u_int32_t
SIN_ADDR(rt.rt_genmask) = 0L;
}
--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
-@@ -1710,6 +1710,9 @@ int sifdefaultroute (int unit, u_int32_t
+@@ -1703,6 +1703,9 @@ int sifdefaultroute (int unit, u_int32_t
memset (&rt, 0, sizeof (rt));
SET_SA_FAMILY (rt.rt_dst, AF_INET);
+ SIN_ADDR(rt.rt_gateway) = gateway;
+
rt.rt_dev = ifname;
+ rt.rt_metric = dfl_route_metric + 1; /* +1 for binary compatibility */
- if (kernel_version > KVERSION(2,1,0)) {
-@@ -1717,7 +1720,7 @@ int sifdefaultroute (int unit, u_int32_t
+@@ -1711,7 +1714,7 @@ int sifdefaultroute (int unit, u_int32_t
SIN_ADDR(rt.rt_genmask) = 0L;
}
--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
-@@ -196,7 +196,7 @@ static int driver_is_old = 0;
+@@ -192,7 +192,7 @@ static int driver_is_old = 0;
static int restore_term = 0; /* 1 => we've munged the terminal */
static struct termios inittermios; /* Initial TTY termios */
static char loop_name[20];
static unsigned char inbuf[512]; /* buffer for chars read from loopback */
-@@ -214,8 +214,8 @@ static int looped; /* 1 if using loop
+@@ -210,8 +210,8 @@ static int looped; /* 1 if using loop
static int link_mtu; /* mtu for the link (not bundle) */
static struct utsname utsname; /* for the kernel version */
#define MAX_IFS 100
-@@ -1451,11 +1451,12 @@ int ccp_fatal_error (int unit)
+@@ -1439,11 +1439,12 @@ int ccp_fatal_error (int unit)
*
* path_to_procfs - find the path to the proc file system mount point
*/
struct mntent *mntent;
FILE *fp;
-@@ -1477,6 +1478,7 @@ static char *path_to_procfs(const char *
+@@ -1465,6 +1466,7 @@ static char *path_to_procfs(const char *
fclose (fp);
}
}
strlcpy(proc_path + proc_path_len, tail,
sizeof(proc_path) - proc_path_len);
-@@ -2129,15 +2131,19 @@ int ppp_available(void)
+@@ -2126,15 +2128,19 @@ int ppp_available(void)
int my_version, my_modification, my_patch;
int osmaj, osmin, ospatch;
/* XXX should get from driver */
driver_version = 2;
-@@ -2197,6 +2203,7 @@ int ppp_available(void)
+@@ -2194,6 +2200,7 @@ int ppp_available(void)
if (ok && ((ifr.ifr_hwaddr.sa_family & ~0xFF) != ARPHRD_PPP))
ok = 0;
/*
* This is the PPP device. Validate the version of the driver at this
-@@ -2730,6 +2737,7 @@ get_pty(master_fdp, slave_fdp, slave_nam
+@@ -2727,6 +2734,7 @@ get_pty(master_fdp, slave_fdp, slave_nam
}
#endif /* TIOCGPTN */
if (sfd < 0) {
/* the old way - scan through the pty name space */
for (i = 0; i < 64; ++i) {
-@@ -2748,6 +2756,7 @@ get_pty(master_fdp, slave_fdp, slave_nam
+@@ -2745,6 +2753,7 @@ get_pty(master_fdp, slave_fdp, slave_nam
}
}
}
char *pppd_pppoe_service = NULL;
static char *acName = NULL;
static char *existingSession = NULL;
-@@ -371,10 +368,6 @@ PPPoEDevnameHook(char *cmd, char **argv,
+@@ -372,10 +369,6 @@ PPPoEDevnameHook(char *cmd, char **argv,
void
plugin_init(void)
{
--- a/pppd/pppd.h
+++ b/pppd/pppd.h
-@@ -317,7 +317,6 @@ extern int holdoff; /* Dead time before
+@@ -326,7 +326,6 @@ extern int holdoff; /* Dead time before
extern bool holdoff_specified; /* true if user gave a holdoff value */
extern bool notty; /* Stdin/out is not a tty */
extern char *pty_socket; /* Socket to connect to pty */
--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
-@@ -2267,6 +2267,7 @@ int ppp_available(void)
+@@ -2264,6 +2264,7 @@ int ppp_available(void)
void logwtmp (const char *line, const char *name, const char *host)
{
struct utmp ut, *utp;
pid_t mypid = getpid();
#if __GLIBC__ < 2
-@@ -2332,6 +2333,7 @@ void logwtmp (const char *line, const ch
+@@ -2329,6 +2330,7 @@ void logwtmp (const char *line, const ch
close (wtmp);
}
#endif
--- a/pppd/main.c
+++ b/pppd/main.c
-@@ -882,14 +882,17 @@ struct protocol_list {
+@@ -874,14 +874,17 @@ struct protocol_list {
const char *name;
} protocol_list[] = {
{ 0x21, "IP" },
{ 0x33, "Stream Protocol ST-II" },
{ 0x35, "Banyan Vines" },
{ 0x39, "AppleTalk EDDP" },
-@@ -903,8 +906,11 @@ struct protocol_list {
+@@ -895,8 +898,11 @@ struct protocol_list {
{ 0x49, "Serial Data Transport Protocol (PPP-SDTP)" },
{ 0x4b, "SNA over 802.2" },
{ 0x4d, "SNA" },
{ 0x53, "Encryption" },
{ 0x55, "Individual Link Encryption" },
{ 0x57, "IPv6" },
-@@ -915,12 +921,15 @@ struct protocol_list {
+@@ -907,12 +913,15 @@ struct protocol_list {
{ 0x65, "RTP IPHC Compressed non-TCP" },
{ 0x67, "RTP IPHC Compressed UDP 8" },
{ 0x69, "RTP IPHC Compressed RTP 8" },
{ 0x0203, "IBM Source Routing BPDU" },
{ 0x0205, "DEC LANBridge100 Spanning Tree" },
{ 0x0207, "Cisco Discovery Protocol" },
-@@ -932,15 +941,19 @@ struct protocol_list {
+@@ -924,15 +933,19 @@ struct protocol_list {
{ 0x0231, "Luxcom" },
{ 0x0233, "Sigma Network Systems" },
{ 0x0235, "Apple Client Server Protocol" },
{ 0x4001, "Cray Communications Control Protocol" },
{ 0x4003, "CDPD Mobile Network Registration Protocol" },
{ 0x4005, "Expand accelerator protocol" },
-@@ -951,8 +964,10 @@ struct protocol_list {
+@@ -943,8 +956,10 @@ struct protocol_list {
{ 0x4023, "RefTek Protocol" },
{ 0x4025, "Fibre Channel" },
{ 0x4027, "EMIT Protocols" },
{ 0x8023, "OSI Network Layer Control Protocol" },
{ 0x8025, "Xerox NS IDP Control Protocol" },
{ 0x8027, "DECnet Phase IV Control Protocol" },
-@@ -961,7 +976,9 @@ struct protocol_list {
+@@ -953,7 +968,9 @@ struct protocol_list {
{ 0x8031, "Bridging NCP" },
{ 0x8033, "Stream Protocol Control Protocol" },
{ 0x8035, "Banyan Vines Control Protocol" },
{ 0x803f, "NETBIOS Framing Control Protocol" },
{ 0x8041, "Cisco Systems Control Protocol" },
{ 0x8043, "Ascom Timeplex" },
-@@ -970,18 +987,24 @@ struct protocol_list {
+@@ -962,18 +979,24 @@ struct protocol_list {
{ 0x8049, "Serial Data Control Protocol (PPP-SDCP)" },
{ 0x804b, "SNA over 802.2 Control Protocol" },
{ 0x804d, "SNA Control Protocol" },
{ 0x8207, "Cisco Discovery Protocol Control" },
{ 0x8209, "Netcs Twin Routing" },
{ 0x820b, "STP - Control Protocol" },
-@@ -990,24 +1013,29 @@ struct protocol_list {
+@@ -982,24 +1005,29 @@ struct protocol_list {
{ 0x8281, "MPLSCP" },
{ 0x8285, "IEEE p1284.4 standard - Protocol Control" },
{ 0x8287, "ETSI TETRA TNP1 Control Protocol" },
--- a/pppd/options.c
+++ b/pppd/options.c
-@@ -336,13 +336,14 @@ option_t general_options[] = {
+@@ -350,13 +350,14 @@ option_t general_options[] = {
"Enable multilink operation", OPT_PRIOSUB | OPT_ALIAS | 1 },
{ "nomultilink", o_bool, &multilink,
"Disable multilink operation", OPT_PRIOSUB | 0 },
strlcpy(ppp_devnam, devnam, sizeof(ppp_devnam));
--- a/pppd/plugins/rp-pppoe/pppoe-discovery.c
+++ b/pppd/plugins/rp-pppoe/pppoe-discovery.c
-@@ -348,7 +348,7 @@ packetIsForMe(PPPoEConnection *conn, PPP
+@@ -356,7 +356,7 @@ packetIsForMe(PPPoEConnection *conn, PPP
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 */
parsePacket(packet, parseForHostUniq, &forMe);
return forMe;
-@@ -474,16 +474,12 @@ sendPADI(PPPoEConnection *conn)
+@@ -494,16 +494,12 @@ sendPADI(PPPoEConnection *conn)
cursor += namelen + TAG_HDR_SIZE;
/* If we're using Host-Uniq, copy it over */
}
packet.length = htons(plen);
-@@ -645,7 +641,7 @@ int main(int argc, char *argv[])
-
- memset(conn, 0, sizeof(PPPoEConnection));
+@@ -669,7 +665,7 @@ int main(int argc, char *argv[])
+ conn->discoveryTimeout = PADI_TIMEOUT;
+ conn->discoveryAttempts = MAX_PADI_ATTEMPTS;
-- while ((opt = getopt(argc, argv, "I:D:VUAS:C:h")) > 0) {
-+ while ((opt = getopt(argc, argv, "I:D:VUW:AS:C:h")) > 0) {
+- while ((opt = getopt(argc, argv, "I:D:VUQS:C:t:a:h")) > 0) {
++ while ((opt = getopt(argc, argv, "I:D:VUW:QS:C:t:a:h")) > 0) {
switch(opt) {
case 'S':
conn->serviceName = xstrdup(optarg);
-@@ -654,7 +650,23 @@ int main(int argc, char *argv[])
- conn->acName = xstrdup(optarg);
+@@ -696,7 +692,23 @@ int main(int argc, char *argv[])
+ }
break;
case 'U':
- conn->useHostUniq = 1;
/* How do we access raw Ethernet devices? */
#undef USE_LINUX_PACKET
-@@ -217,7 +219,7 @@ typedef struct PPPoEConnectionStruct {
+@@ -219,7 +221,7 @@ typedef struct PPPoEConnectionStruct {
char *serviceName; /* Desired service name, if any */
char *acName; /* Desired AC name, if any */
int synchronous; /* Use synchronous PPP */
int printACNames; /* Just print AC names */
FILE *debugFile; /* Debug file for dumping packets */
int numPADOs; /* Number of PADO packets received */
-@@ -273,6 +275,33 @@ void pppoe_printpkt(PPPoEPacket *packet,
+@@ -276,6 +278,33 @@ void pppoe_printpkt(PPPoEPacket *packet,
void (*printer)(void *, char *, ...), void *arg);
void pppoe_log_packet(const char *prefix, PPPoEPacket *packet);
+++ /dev/null
---- a/pppd/plugins/rp-pppoe/plugin.c
-+++ b/pppd/plugins/rp-pppoe/plugin.c
-@@ -275,7 +275,7 @@ PPPOEDisconnectDevice(void)
- sizeof(struct sockaddr_pppox)) < 0)
- error("Failed to disconnect PPPoE socket: %d %m", errno);
- close(conn->sessionSocket);
-- /* don't send PADT?? */
-+ sendPADT(conn, NULL);
- if (conn->discoverySocket >= 0)
- close(conn->discoverySocket);
- }
+++ /dev/null
---- a/pppd/plugins/rp-pppoe/plugin.c
-+++ b/pppd/plugins/rp-pppoe/plugin.c
-@@ -271,9 +271,8 @@ PPPOEDisconnectDevice(void)
- sp.sa_addr.pppoe.sid = 0;
- memcpy(sp.sa_addr.pppoe.dev, conn->ifName, IFNAMSIZ);
- memcpy(sp.sa_addr.pppoe.remote, conn->peerEth, ETH_ALEN);
-- if (connect(conn->sessionSocket, (struct sockaddr *) &sp,
-- sizeof(struct sockaddr_pppox)) < 0)
-- error("Failed to disconnect PPPoE socket: %d %m", errno);
-+ connect(conn->sessionSocket, (struct sockaddr *) &sp,
-+ sizeof(struct sockaddr_pppox));
- close(conn->sessionSocket);
- sendPADT(conn, NULL);
- if (conn->discoverySocket >= 0)
+++ /dev/null
---- a/pppd/options.c
-+++ b/pppd/options.c
-@@ -1013,7 +1013,7 @@ print_option(opt, mainopt, printer, arg)
- p = (char *) opt->addr2;
- if ((opt->flags & OPT_STATIC) == 0)
- p = *(char **)p;
-- printer("%q", p);
-+ printer(arg, "%q", p);
- } else if (opt->flags & OPT_A2LIST) {
- struct option_value *ovp;
-
--- /dev/null
+From 831dca008699d485f2c8e91749657ef2d0b06166 Mon Sep 17 00:00:00 2001
+From: Martin Schiller <ms@dev.tdt.de>
+Date: Thu, 6 Dec 2018 08:43:17 +0100
+Subject: [PATCH] Revert "pppd: Use openssl for the DES instead of the libcrypt
+ / glibc"
+
+For musl and glibc2.27 we can keep linking to crypt; however if we
+switch to glibc 2.28 we will have to link to one of the SSL libraries.
+
+This reverts commit 3c7b86229f7bd2600d74db14b1fe5b3896be3875.
+---
+ pppd/Makefile.linux | 7 +++----
+ pppd/pppcrypt.c | 18 +++++++++---------
+ 2 files changed, 12 insertions(+), 13 deletions(-)
+
+--- a/pppd/Makefile.linux
++++ b/pppd/Makefile.linux
+@@ -35,10 +35,10 @@ endif
+ COPTS = -O2 -pipe -Wall -g
+ LIBS =
+
+-# Uncomment the next line to include support for Microsoft's
++# Uncomment the next 2 lines to include support for Microsoft's
+ # MS-CHAP authentication protocol. Also, edit plugins/radius/Makefile.linux.
+ CHAPMS=y
+-#USE_CRYPT=y
++USE_CRYPT=y
+ # Don't use MSLANMAN unless you really know what you're doing.
+ #MSLANMAN=y
+ # Uncomment the next line to include support for MPPE. CHAPMS (above) must
+@@ -140,8 +140,7 @@ endif
+
+ ifdef NEEDDES
+ ifndef USE_CRYPT
+-CFLAGS += -I/usr/include/openssl
+-LIBS += -lcrypto
++LIBS += -ldes $(LIBS)
+ else
+ CFLAGS += -DUSE_CRYPT=1
+ endif
+--- a/pppd/pppcrypt.c
++++ b/pppd/pppcrypt.c
+@@ -64,7 +64,7 @@ u_char *des_key; /* OUT 64 bit DES key w
+ des_key[7] = Get7Bits(key, 49);
+
+ #ifndef USE_CRYPT
+- DES_set_odd_parity((DES_cblock *)des_key);
++ des_set_odd_parity((des_cblock *)des_key);
+ #endif
+ }
+
+@@ -158,25 +158,25 @@ u_char *clear; /* OUT 8 octets */
+ }
+
+ #else /* USE_CRYPT */
+-static DES_key_schedule key_schedule;
++static des_key_schedule key_schedule;
+
+ bool
+ DesSetkey(key)
+ u_char *key;
+ {
+- DES_cblock des_key;
++ des_cblock des_key;
+ MakeKey(key, des_key);
+- DES_set_key(&des_key, &key_schedule);
++ des_set_key(&des_key, key_schedule);
+ return (1);
+ }
+
+ bool
+-DesEncrypt(clear, cipher)
++DesEncrypt(clear, key, cipher)
+ u_char *clear; /* IN 8 octets */
+ u_char *cipher; /* OUT 8 octets */
+ {
+- DES_ecb_encrypt((DES_cblock *)clear, (DES_cblock *)cipher,
+- &key_schedule, 1);
++ des_ecb_encrypt((des_cblock *)clear, (des_cblock *)cipher,
++ key_schedule, 1);
+ return (1);
+ }
+
+@@ -185,8 +185,8 @@ DesDecrypt(cipher, clear)
+ u_char *cipher; /* IN 8 octets */
+ u_char *clear; /* OUT 8 octets */
+ {
+- DES_ecb_encrypt((DES_cblock *)cipher, (DES_cblock *)clear,
+- &key_schedule, 0);
++ des_ecb_encrypt((des_cblock *)cipher, (des_cblock *)clear,
++ key_schedule, 0);
+ return (1);
+ }
+