net/mpd5: update to version 5.9

This version contains security fix for L2TP clients and servers.
Insufficient validation of incoming L2TP control packet
specially crafted by unauthenticated user might lead to unexpected
termination of the process. The problem affects mpd versions
since 4.0 that brought in initial support for L2TP.

Other changes from upstream were already present in the port
in form of pathes that were removed with this update.

Reported by:	chennan at SourceForge
Reviewed by:	mav
This commit is contained in:
Eugene Grosbein
2020-09-06 19:30:14 +00:00
parent b8072cb547
commit b34162b95d
12 changed files with 5 additions and 892 deletions

View File

@@ -2,8 +2,7 @@
# $FreeBSD$
PORTNAME= mpd
DISTVERSION= 5.8
PORTREVISION= 12
DISTVERSION= 5.9
CATEGORIES= net
MASTER_SITES= SF/${PORTNAME}/Mpd5/Mpd-${PORTVERSION}
PKGNAMESUFFIX= 5
@@ -35,7 +34,7 @@ RUN_DEPENDS+= /boot/modules/ng_ipacct.ko:net-mgmt/ng_ipacct
.endif
.else
CONFIGURE_ENV+= USE_NG_IPACCT=no
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-no-ng_ipacct
MAKE_ARGS+= USE_NG_IPACCT=no
.endif
USE_RC_SUBR= mpd5

View File

@@ -1,2 +1,3 @@
SIZE (mpd5/mpd-5.8.tar.gz) = 597043
SHA256 (mpd5/mpd-5.8.tar.gz) = 8c59e01c79c5d35ecfd0d540ddf37dd1eed8da9c980fa4c5b01ed50bb53e7665
TIMESTAMP = 1599406684
SHA256 (mpd5/mpd-5.9.tar.gz) = 1f2cda9b3e610713f94e90f3826bbb0d638c6fb678986b1eaa9cd9930b0d66ba
SIZE (mpd5/mpd-5.9.tar.gz) = 627566

View File

@@ -1,10 +0,0 @@
--- src/Makefile.orig 2018-11-25 14:23:23.317174000 +0700
+++ src/Makefile 2018-11-25 14:26:24.356555000 +0700
@@ -56,7 +56,6 @@
USE_NG_BPF= yes
USE_NG_CAR= yes
USE_NG_DEFLATE= yes
-USE_NG_IPACCT= yes
USE_NG_MPPC= yes
USE_NG_NAT= yes
USE_NG_NETFLOW= yes

View File

@@ -1,13 +0,0 @@
Index: src/auth.h
===================================================================
--- src/auth.h (revision 2271)
+++ src/auth.h (revision 2272)
@@ -240,8 +240,6 @@ struct auth {
};
typedef struct auth *Auth;
-struct radiusconf radius; /* RADIUS configuration */
-
/*
* Interface between the auth-backend (secret file, RADIUS, etc.) and Mpd's
* internal structs.

View File

@@ -1,23 +0,0 @@
Index: configure
===================================================================
--- src/configure (revision 2259)
+++ src/configure (working copy)
@@ -33,7 +33,9 @@ else
fi
echo -n "Looking for ng_ipacct ..."
-if [ -e /usr/include/netgraph/ng_ipacct.h \
+if [ "$USE_NG_IPACCT" = no ]; then
+ echo " disabled."
+else if [ -e /usr/include/netgraph/ng_ipacct.h \
-o -e /usr/local/include/netgraph/ng_ipacct.h ]
then
echo " found."
@@ -41,6 +43,7 @@ then
else
echo " not found."
fi
+fi
echo -n "Looking for ng_mppc ..."
if [ -e /usr/include/netgraph/ng_mppc.h \

View File

@@ -1,76 +0,0 @@
--- src/console.h.orig 2016-01-06 22:42:06.000000000 +0700
+++ src/console.h 2017-06-16 21:12:59.268715000 +0700
@@ -119,6 +119,7 @@
extern int ConsoleStat(Context ctx, int ac, char *av[], void *arg);
extern Context StdConsoleConnect(Console c);
extern void ConsoleShutdown(Console c);
+ extern void ConsoleCancelCleanup(void *rwlock);
extern int UserCommand(Context ctx, int ac, char *av[], void *arg);
extern int UserStat(Context ctx, int ac, char *av[], void *arg);
--- src/console.c.orig 2016-01-06 22:42:06.000000000 +0700
+++ src/console.c 2017-06-16 21:54:48.919442000 +0700
@@ -175,6 +175,14 @@ ConsoleClose(Console c)
return 0;
}
+void
+ConsoleCancelCleanup(void *rwlock)
+{
+ pthread_rwlock_t p = (pthread_rwlock_t)rwlock;
+
+ RWLOCK_UNLOCK(p);
+}
+
/*
* ConsoleStat()
*/
@@ -192,13 +200,14 @@ ConsoleStat(Context ctx, int ac, char *a
Printf("\tIP-Address : %s\r\n", u_addrtoa(&c->addr,addrstr,sizeof(addrstr)));
Printf("\tPort : %d\r\n", c->port);
+ pthread_cleanup_push(ConsoleCancelCleanup, c->lock);
RWLOCK_RDLOCK(c->lock);
Printf("Active sessions:\r\n");
SLIST_FOREACH(s, &c->sessions, next) {
Printf("\tUsername: %s\tFrom: %s\r\n",
s->user.username, u_addrtoa(&s->peer_addr,addrstr,sizeof(addrstr)));
}
- RWLOCK_UNLOCK(c->lock);
+ pthread_cleanup_pop(1);
Printf("Global options:\r\n");
OptStat(ctx, &c->options, gConfList);
@@ -905,13 +914,14 @@ UserStat(Context ctx, int ac, char *av[]
ConsoleUser u;
Printf("Configured users:\r\n");
+ pthread_cleanup_push(ConsoleCancelCleanup, gUsersLock);
RWLOCK_RDLOCK(gUsersLock);
ghash_walk_init(gUsers, &walk);
while ((u = ghash_walk_next(gUsers, &walk)) != NULL) {
Printf("\tUsername: %-15s Priv: %s\r\n", u->username,
((u->priv == 2)?"admin":((u->priv == 1)?"operator":"user")));
}
- RWLOCK_UNLOCK(gUsersLock);
+ pthread_cleanup_pop(1);
return 0;
}
--- src/log.c.orig 2016-01-06 22:42:06.000000000 +0700
+++ src/log.c 2017-06-16 21:16:19.643625000 +0700
@@ -256,12 +256,13 @@ vLogPrintf(const char *fmt, va_list args
#ifdef SYSLOG_FACILITY
syslog(LOG_INFO, "%s", buf);
#endif
+ pthread_cleanup_push(ConsoleCancelCleanup, gConsole.lock);
RWLOCK_RDLOCK(gConsole.lock);
SLIST_FOREACH(s, &gConsole.sessions, next) {
if (Enabled(&s->options, CONSOLE_LOGGING))
s->write(s, "%s\r\n", buf);
}
- RWLOCK_UNLOCK(gConsole.lock);
+ pthread_cleanup_pop(1);
#ifdef SYSLOG_FACILITY
} else {
vsyslog(LOG_INFO, fmt, args);

View File

@@ -1,158 +0,0 @@
Index: src/iface.c
===================================================================
RCS file: /cvsroot/mpd/mpd/src/iface.c,v
retrieving revision 1.228
retrieving revision 1.230
diff -u -p -r1.228 -r1.230
--- src/iface.c 17 May 2017 08:47:53 -0000 1.228
+++ src/iface.c 1 Jul 2017 21:32:07 -0000 1.230
@@ -141,6 +141,7 @@
static int IfaceAllocACL (struct acl_pool ***ap, int start, char * ifname, int number);
static int IfaceFindACL (struct acl_pool *ap, char * ifname, int number);
static char * IfaceParseACL (char * src, IfaceState iface);
+ static char * IfaceFixAclForDelete(char *r, char *buf, size_t len);
#endif
static int IfaceSetName(Bund b, const char * ifname);
@@ -602,18 +603,18 @@ IfaceUp(Bund b, int ready)
while (acls != NULL) {
/* allow both %aX and `peer_addr` macros */
buf = IfaceParseACL(acls->rule, iface);
- strcpy(acls->rule, buf);
+ acl = Mdup2(MB_IPFW, acls, sizeof(struct acl), sizeof(struct acl) + strlen(buf));
+ strcpy(acl->rule, buf);
Freee(buf);
- acl = Mdup(MB_IPFW, acls, sizeof(struct acl) + strlen(acls->rule));
acl->next = iface->tables;
iface->tables = acl;
- if (strncmp(acls->rule, "peer_addr", 9) == 0) {
+ if (strncmp(acl->rule, "peer_addr", 9) == 0) {
char hisaddr[20];
ExecCmd(LG_IFACE2, b->name, "%s table %d add %s",
- PATH_IPFW, acls->real_number,
+ PATH_IPFW, acl->real_number,
u_addrtoa(&iface->peer_addr, hisaddr, sizeof(hisaddr)));
} else {
- ExecCmd(LG_IFACE2, b->name, "%s table %d add %s", PATH_IPFW, acls->real_number, acls->rule);
+ ExecCmd(LG_IFACE2, b->name, "%s table %d add %s", PATH_IPFW, acl->real_number, acl->rule);
}
acls = acls->next;
};
@@ -697,8 +698,10 @@ IfaceDown(Bund b)
PATH_IPFW, acl->real_number,
u_addrtoa(&iface->peer_addr, hisaddr, sizeof(hisaddr)));
} else {
+ char buf[ACL_LEN];
ExecCmd(LG_IFACE2, b->name, "%s table %d delete %s",
- PATH_IPFW, acl->real_number, acl->rule);
+ PATH_IPFW, acl->real_number,
+ IfaceFixAclForDelete(acl->rule, buf, sizeof(buf)));
}
aclnext = acl->next;
Freee(acl);
@@ -946,6 +949,60 @@ IfaceParseACL (char * src, IfaceState if
Freee(buf1);
return(buf);
}
+
+/*
+ * IfaceFixAclForDelete()
+ *
+ * Removes values from ipfw 'table-key value [...]' expression r, if any.
+ * Returns buf pointer for modified expression or original r pointer
+ * if no modifications were performed when no values were found or
+ * buf found too short.
+ *
+ * len is size of buf. Strings are zero-terminated.
+ * r and buf must point to non-overlapping memory areas.
+ */
+
+static char*
+IfaceFixAclForDelete(char *r, char *buf, size_t len)
+{
+ static const char sep[] = " \t";
+ char *limit, *s;
+ int i, state = 0;
+
+/*
+ * Possible state values:
+ *
+ * -1: skip value (otherwise copy);
+ * 0: first iteration, do copy;
+ * 1: not first iteration, do copy.
+*/
+
+ s = buf;
+ limit = buf + len;
+
+ for (r += strspn(r, sep); /* Skip leading spaces. */
+ *r; /* Check for end of string. */
+ r += i, r += strspn(r, sep)) /* Advance and skip spaces again. */
+ {
+ i = strcspn(r, sep); /* Find separator or end of string. */
+ if (state == 0 && r[i] == '\0') /* No separators in the rule? */
+ return r;
+ if (state < 0) { /* Skip value. */
+ state = 1;
+ continue;
+ }
+ if (limit - s < i + 1 + state) /* Check space. */
+ return r;
+ if (state != 0) /* Insert separator. */
+ *s++ = ' ';
+ memcpy(s, r, i); /* Copy IP address from the rule. */
+ s += i;
+ state = -1;
+ }
+ *s = '\0';
+
+ return buf;
+}
#endif /* USE_IPFW */
/*
Index: src/mbuf.c
===================================================================
RCS file: /cvsroot/mpd/mpd/src/mbuf.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -p -r1.30 -r1.31
--- src/mbuf.c 14 Jun 2011 10:40:19 -0000 1.30
+++ src/mbuf.c 29 Jun 2017 08:21:35 -0000 1.31
@@ -55,6 +55,20 @@ Mdup(const char *type, const void *src,
}
void *
+Mdup2(const char *type, const void *src, size_t oldsize, size_t newsize)
+{
+ const char **memory;
+ if ((memory = MALLOC(type, sizeof(char *) + newsize)) == NULL) {
+ Perror("Mdup2: malloc");
+ DoExit(EX_ERRDEAD);
+ }
+
+ memory[0] = type;
+ memcpy(memory + 1, src, oldsize < newsize ? oldsize : newsize);
+ return(memory + 1);
+}
+
+void *
Mstrdup(const char *type, const void *src)
{
return (Mdup(type, src, strlen(src) + 1));
Index: src/mbuf.h
===================================================================
RCS file: /cvsroot/mpd/mpd/src/mbuf.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -p -r1.25 -r1.26
--- src/mbuf.h 7 Oct 2013 11:52:35 -0000 1.25
+++ src/mbuf.h 29 Jun 2017 08:21:35 -0000 1.26
@@ -73,6 +73,7 @@
extern void *Malloc(const char *type, size_t size) __malloc_like;
extern void *Mdup(const char *type, const void *src, size_t size) __malloc_like;
+ extern void *Mdup2(const char *type, const void *src, size_t oldsize, size_t newsize) __malloc_like;
extern void *Mstrdup(const char *type, const void *src) __malloc_like;
extern void Freee(void *ptr);

View File

@@ -1,30 +0,0 @@
Index: src/bund.c
===================================================================
--- src/bund.c (revision 2246)
+++ src/bund.c (revision 2247)
@@ -1394,9 +1394,9 @@ BundUpdateStats(Bund b)
b->stats.runts += abs(stats.runts - b->oldStats.runts);
b->stats.dupFragments += abs(stats.dupFragments - b->oldStats.dupFragments);
b->stats.dropFragments += abs(stats.dropFragments - b->oldStats.dropFragments);
+ b->oldStats = stats;
}
- b->oldStats = stats;
#else
NgFuncGetStats64(b, l, &b->stats);
#endif
Index: src/link.c
===================================================================
--- src/link.c (revision 2246)
+++ src/link.c (revision 2247)
@@ -1359,9 +1359,9 @@ LinkUpdateStats(Link l)
l->stats.runts += abs(stats.runts - l->oldStats.runts);
l->stats.dupFragments += abs(stats.dupFragments - l->oldStats.dupFragments);
l->stats.dropFragments += abs(stats.dropFragments - l->oldStats.dropFragments);
+ l->oldStats = stats;
}
- l->oldStats = stats;
#else
NgFuncGetStats64(l->bund, l->bundleIndex, &l->stats);
#endif

View File

@@ -1,121 +0,0 @@
Index: src/iface.h
===================================================================
--- src/iface.h (revision 2246)
+++ src/iface.h (working copy)
@@ -107,6 +107,7 @@
u_char traffic[IFACE_IDLE_SPLIT]; /* Mark any traffic */
u_short mtu; /* Interface MTU */
u_short max_mtu; /* Configured maximum MTU */
+ u_short mtu_override; /* Configured MTU override */
struct optinfo options; /* Configuration options */
u_int idle_timeout; /* Idle timeout */
u_int session_timeout; /* Session timeout */
Index: src/iface.c
===================================================================
--- src/iface.c (revision 2246)
+++ src/iface.c (working copy)
@@ -162,7 +162,7 @@
IfaceSetCommand, NULL, 2, (void *) SET_ADDRS },
{ "route {dest}[/{width}]", "Add IP route",
IfaceSetCommand, NULL, 2, (void *) SET_ROUTE },
- { "mtu {size}", "Set max allowed interface MTU",
+ { "mtu {size} [override]", "Set max allowed or override interface MTU",
IfaceSetCommand, NULL, 2, (void *) SET_MTU },
{ "name [{name}]", "Set interface name",
IfaceSetCommand, NULL, 2, (void *) SET_NAME },
@@ -289,6 +289,7 @@ IfaceInit(Bund b)
/* Default configuration */
iface->mtu = NG_IFACE_MTU_DEFAULT;
iface->max_mtu = NG_IFACE_MTU_DEFAULT;
+ iface->mtu_override = 0;
#ifdef SIOCSIFDESCR
iface->ifdescr = NULL;
iface->conf.ifdescr = NULL;
@@ -1606,15 +1607,30 @@ IfaceSetCommand(Context ctx, int ac, cha
case SET_MTU:
{
int max_mtu;
+ int override;
/* Check */
- if (ac != 1)
+ if (ac < 1 || ac > 2)
return(-1);
max_mtu = atoi(av[0]);
+ override = 0;
+
+ if (ac == 2 && av[1][0]) {
+ if (strcmp(av[1], "override") == 0)
+ override = 1;
+ else
+ Error("Invalid keyword %s", av[1]);
+ }
+
if (max_mtu < IFACE_MIN_MTU || max_mtu > IFACE_MAX_MTU)
- Error("Invalid interface mtu %d", max_mtu);
- iface->max_mtu = max_mtu;
+ if (!override || max_mtu != 0)
+ Error("Invalid interface mtu %d", max_mtu);
+
+ if (max_mtu != 0)
+ iface->max_mtu = max_mtu;
+ if (override)
+ iface->mtu_override = max_mtu;
}
break;
@@ -1743,6 +1759,7 @@ IfaceStat(Context ctx, int ac, char *av[
Printf("\tGroup : %s\r\n", iface->conf.ifgroup);
#endif
Printf("\tMaximum MTU : %d bytes\r\n", iface->max_mtu);
+ Printf("\tMTU override : %d bytes\r\n", iface->mtu_override);
Printf("\tIdle timeout : %d seconds\r\n", iface->idle_timeout);
Printf("\tSession timeout : %d seconds\r\n", iface->session_timeout);
if (!u_rangeempty(&iface->conf.self_addr)) {
@@ -1873,14 +1890,18 @@ IfaceSetMTU(Bund b, int mtu)
return;
}
- if ((b->params.mtu > 0) && (mtu > b->params.mtu)) {
+ if (!iface->mtu_override && (b->params.mtu > 0) && (mtu > b->params.mtu)) {
mtu = b->params.mtu;
Log(LG_IFACE2, ("[%s] IFACE: forcing MTU of auth backend: %d bytes",
b->name, mtu));
}
- /* Limit MTU to configured maximum */
- if (mtu > iface->max_mtu)
+ /* Limit MTU to configured maximum/override */
+ if (iface->mtu_override) {
+ mtu = iface->mtu_override;
+ Log(LG_IFACE2, ("[%s] IFACE: forcing MTU override: %d bytes",
+ b->name, mtu));
+ } else if (mtu > iface->max_mtu)
mtu = iface->max_mtu;
/* Set MTU on interface */
@@ -3061,6 +3082,9 @@ IfaceSetupMSS(Bund b, uint16_t maxMSS)
memset(&tcpmsscfg, 0, sizeof(tcpmsscfg));
tcpmsscfg.maxMSS = maxMSS;
+ Log(LG_IFACE2, ("[%s] IFACE: Configuring ng_tcpmss %s %u",
+ b->name, path, (unsigned)tcpmsscfg.maxMSS));
+
snprintf(tcpmsscfg.inHook, sizeof(tcpmsscfg.inHook), "in");
snprintf(tcpmsscfg.outHook, sizeof(tcpmsscfg.outHook), "out");
if (NgSendMsg(gLinksCsock, path, NGM_TCPMSS_COOKIE, NGM_TCPMSS_CONFIG,
Index: src/bund.c
===================================================================
--- src/bund.c (revision 2253)
+++ src/bund.c (revision 2254)
@@ -328,7 +328,8 @@ BundJoin(Link l)
/* Configure this link */
b->pppConfig.links[l->bundleIndex].enableLink = 1;
- b->pppConfig.links[l->bundleIndex].mru = lcp->peer_mru;
+ b->pppConfig.links[l->bundleIndex].mru = b->iface.mtu_override ?
+ b->iface.mtu_override : lcp->peer_mru;
b->pppConfig.links[l->bundleIndex].enableACFComp = lcp->peer_acfcomp;
b->pppConfig.links[l->bundleIndex].enableProtoComp = lcp->peer_protocomp;
b->pppConfig.links[l->bundleIndex].bandwidth =

View File

@@ -1,279 +0,0 @@
--- src/Makefile.orig
+++ src/Makefile
@@ -9,11 +9,12 @@
PROG?= mpd5
PREFIX?= /usr/local
+LOCALBASE?= ${PREFIX}
BINDIR?= ${PREFIX}/sbin
VERSION= 5.8
-NOMAN=
-NO_MAN=
+MAN=
+
BINOWN!= /usr/bin/id -n -u
BINGRP!= /usr/bin/id -n -g
@@ -59,9 +60,6 @@
USE_AUTH_PAM= yes
USE_AUTH_SYSTEM= yes
-# Build with builtin libpdel
-NOLIBPDEL= yes
-
# Build without builtin web server.
#NOWEB= yes
@@ -71,7 +69,7 @@
# Print wide protocol names instead of short names.
# Comment this line, to save about 10 KB space
-COPTS+= -DPROTO_NAME_LIST
+CFLAGS+= -DPROTO_NAME_LIST
# Reduce some internal structures size to save more memory
# This is to limit amount of active sessions
@@ -83,27 +81,27 @@
## filter TCP accept connections
LDADD+= -lwrap
DPADD+= ${LIBWRAP}
-COPTS+= -DUSE_WRAP
+CFLAGS+= -DUSE_WRAP
.endif
## authentication methods: opie, pam, /etc/password
.if defined ( USE_AUTH_OPIE )
LDADD+= -lopie
DPADD+= ${LIBOPIE}
-COPTS+= -DUSE_OPIE
+CFLAGS+= -DUSE_OPIE
.endif
.if exists ( /usr/lib/libpam.so ) && defined ( USE_AUTH_PAM )
LDADD+= -lpam
DPADD+= ${LIBPAM}
-COPTS+= -DUSE_PAM
+CFLAGS+= -DUSE_PAM
.endif
.if defined ( USE_AUTH_SYSTEM )
## based on /etc/password
LDADD+= -lcrypt
DPADD+= ${LIBCRYPT} ${LIBUTIL}
-COPTS+= -DUSE_SYSTEM
+CFLAGS+= -DUSE_SYSTEM
.endif
LDADD+= -lnetgraph -lutil
@@ -112,19 +110,12 @@
LDADD+= -L/usr/lib -lradius
DPADD+= ${LIBRADIUS}
-## libpdel needs ssl and libexpat (libxml2 cannot be used)
-.if !defined ( NOLIBPDEL )
-LDADD+= -L${PREFIX}/lib
-LDADD+= -lpdel
-LDADD+= -lexpat
-.endif
-
MPD_VERSION!= echo -n "${VERSION} (`id -un`@`uname -n` `LC_TIME=C date +'%R %v'`)"
-COPTS+= -DPATH_CONF_DIR='"${MPD_CONF_DIR}"'
-COPTS+= -DMPD_VERSION='"${MPD_VERSION}"'
-COPTS+= -g
-COPTS+= -Wall \
+CFLAGS+= -DPATH_CONF_DIR='"${MPD_CONF_DIR}"'
+CFLAGS+= -DMPD_VERSION='"${MPD_VERSION}"'
+CFLAGS+= -g
+CFLAGS+= -Wall \
-Wcast-align \
-Wchar-subscripts \
-Wformat \
@@ -134,15 +125,14 @@
-Wnested-externs \
-Wpointer-arith \
-Wwrite-strings \
- -pthread \
- -I${PREFIX}/include
+ -pthread
.if defined ( MPD_VENDOR )
-COPTS+= -DMPD_VENDOR='"${MPD_VENDOR}"'
+CFLAGS+= -DMPD_VENDOR='"${MPD_VENDOR}"'
.endif
.if defined ( SYSLOG_FACILITY )
-COPTS+= -DSYSLOG_FACILITY='"${SYSLOG_FACILITY}"'
+CFLAGS+= -DSYSLOG_FACILITY='"${SYSLOG_FACILITY}"'
.endif
# Standard sources
@@ -154,14 +144,13 @@
util.c vars.c eap.c msoft.c ippool.c
.if defined ( NOWEB )
-COPTS+= -DNOWEB
+CFLAGS+= -DNOWEB
.else
STDSRCS+= web.c
LDADD+= -lssl
.endif
-.if defined ( NOLIBPDEL )
-COPTS+= -DNOLIBPDEL -I./contrib/libpdel
+CFLAGS+= -DNOLIBPDEL -I./contrib/libpdel
PDPATH1= contrib/libpdel/util:contrib/libpdel/structs
PDPATH2= contrib/libpdel/structs/type
.if defined ( NOWEB )
@@ -199,60 +188,59 @@
string_fp.c \
timeout_fp.c
.endif
-.endif
# Add sources and flags for the various physical layer types
.if defined ( PHYSTYPE_MODEM )
SRCS+= modem.c chat.c
-COPTS+= -DPHYSTYPE_MODEM
+CFLAGS+= -DPHYSTYPE_MODEM
.endif
.if defined ( PHYSTYPE_UDP )
SRCS+= udp.c
-COPTS+= -DPHYSTYPE_UDP
+CFLAGS+= -DPHYSTYPE_UDP
.endif
.if defined ( PHYSTYPE_TCP )
SRCS+= tcp.c
-COPTS+= -DPHYSTYPE_TCP
+CFLAGS+= -DPHYSTYPE_TCP
.endif
.if defined ( PHYSTYPE_NG_SOCKET )
SRCS+= ng.c
-COPTS+= -DPHYSTYPE_NG_SOCKET
+CFLAGS+= -DPHYSTYPE_NG_SOCKET
.endif
.if defined ( PHYSTYPE_PPTP )
SRCS+= pptp.c pptp_ctrl.c
-COPTS+= -DPHYSTYPE_PPTP
-COPTS+= -DRANDOMIZE_CID
-#COPTS+= -DLOOK_LIKE_NT
+CFLAGS+= -DPHYSTYPE_PPTP
+CFLAGS+= -DRANDOMIZE_CID
+#CFLAGS+= -DLOOK_LIKE_NT
.endif
.if defined ( PHYSTYPE_PPPOE )
SRCS+= pppoe.c
-COPTS+= -DPHYSTYPE_PPPOE
+CFLAGS+= -DPHYSTYPE_PPPOE
.endif
.if defined ( PHYSTYPE_L2TP )
SRCS+= l2tp.c l2tp_avp.c l2tp_ctrl.c
-COPTS+= -DPHYSTYPE_L2TP
+CFLAGS+= -DPHYSTYPE_L2TP
.endif
# CCP
.if defined ( CCP_DEFLATE ) && defined ( USE_NG_DEFLATE )
SRCS+= ccp_deflate.c
-COPTS+= -DCCP_DEFLATE
-COPTS+= -DUSE_NG_DEFLATE
+CFLAGS+= -DCCP_DEFLATE
+CFLAGS+= -DUSE_NG_DEFLATE
.endif
.if defined ( CCP_MPPC ) && defined ( USE_NG_MPPC )
SRCS+= ccp_mppc.c
-COPTS+= -DCCP_MPPC
-COPTS+= -DUSE_NG_MPPC
+CFLAGS+= -DCCP_MPPC
+CFLAGS+= -DUSE_NG_MPPC
.endif
.if defined ( CCP_PRED1 )
SRCS+= ccp_pred1.c
-COPTS+= -DCCP_PRED1
+CFLAGS+= -DCCP_PRED1
.if defined ( USE_NG_PRED1 )
-COPTS+= -DUSE_NG_PRED1
+CFLAGS+= -DUSE_NG_PRED1
.endif
.endif
@@ -261,46 +249,46 @@
.if defined ( ECP_DES )
SRCS+= ecp_dese.c
SRCS+= ecp_dese_bis.c
-COPTS+= -DECP_DES
+CFLAGS+= -DECP_DES
NEED_DES= yes
.endif
# Features
.if defined ( USE_NG_BPF )
-COPTS+= -DUSE_NG_BPF
+CFLAGS+= -DUSE_NG_BPF
LDADD+= -lpcap
DPADD+= ${LIBPCAP}
.endif
.if defined ( USE_NG_CAR )
-COPTS+= -DUSE_NG_CAR
+CFLAGS+= -DUSE_NG_CAR
.endif
.if defined ( USE_NG_IPACCT )
-COPTS+= -DUSE_NG_IPACCT
+CFLAGS+= -DUSE_NG_IPACCT -nostdinc -I/usr/include -I${LOCALBASE}/include
.endif
.if defined ( USE_NG_NAT )
SRCS+= nat.c
-COPTS+= -DUSE_NG_NAT
+CFLAGS+= -DUSE_NG_NAT
.endif
.if defined ( USE_NG_NETFLOW )
-COPTS+= -DUSE_NG_NETFLOW
+CFLAGS+= -DUSE_NG_NETFLOW
.endif
.if defined ( USE_NG_TCPMSS )
-COPTS+= -DUSE_NG_TCPMSS
+CFLAGS+= -DUSE_NG_TCPMSS
.endif
.if defined ( USE_NG_VJC )
-COPTS+= -DUSE_NG_VJC
+CFLAGS+= -DUSE_NG_VJC
.endif
.if defined ( USE_IPFW )
-COPTS+= -DUSE_IPFW
+CFLAGS+= -DUSE_IPFW
.endif
.if defined ( USE_FETCH )
-COPTS+= -DUSE_FETCH
+CFLAGS+= -DUSE_FETCH
LDADD+= -lfetch
DPADD+= ${LIBFETCH}
.endif
.if defined ( SMALL_SYSTEM )
-COPTS+= -DSMALL_SYSTEM
+CFLAGS+= -DSMALL_SYSTEM
.endif
# Add in required support files and libraries
@@ -309,15 +297,12 @@
.if exists ( /usr/lib/libexecinfo.so )
LDADD+= -lexecinfo
-COPTS+= -DUSE_BACKTRACE
+CFLAGS+= -DUSE_BACKTRACE
.endif
# Now add standard sources
SRCS+= ${STDSRCS}
-
-.if defined ( NOLIBPDEL )
SRCS+= ${PDELSRCS}
-.endif
.include <bsd.prog.mk>

View File

@@ -1,126 +0,0 @@
--- src/pppoe.c.orig 2016-01-06 15:42:06 UTC
+++ src/pppoe.c
@@ -71,6 +71,7 @@
/* Per link private info */
struct pppoeinfo {
+ char iface[IFNAMSIZ]; /* PPPoE interface name */
char path[MAX_PATH]; /* PPPoE node path */
char hook[NG_HOOKSIZ]; /* hook on that node */
char session[MAX_SESSION]; /* session name */
@@ -165,7 +166,7 @@ static int PppoeListen(Link l);
static int PppoeUnListen(Link l);
static void PppoeNodeUpdate(Link l);
static void PppoeListenEvent(int type, void *arg);
-static int CreatePppoeNode(struct PppoeIf *PIf, const char *path, const char *hook);
+static int CreatePppoeNode(struct PppoeIf *PIf, const char *iface, const char *path, const char *hook);
static void PppoeDoClose(Link l);
@@ -282,6 +283,7 @@ PppoeInit(Link l)
pe = (PppoeInfo)(l->info = Malloc(MB_PHYS, sizeof(*pe)));
pe->incoming = 0;
pe->opened = 0;
+ snprintf(pe->iface, sizeof(pe->iface), "undefined");
snprintf(pe->path, sizeof(pe->path), "undefined:");
snprintf(pe->hook, sizeof(pe->hook), "undefined");
snprintf(pe->session, sizeof(pe->session), "*");
@@ -660,6 +662,16 @@ PppoeCtrlReadEvent(int type, void *arg)
break;
}
#endif
+#ifdef NGM_PPPOE_PADM_COOKIE
+ case NGM_PPPOE_HURL:
+ Log(LG_PHYS, ("PPPoE: rec'd HURL \"%s\"",
+ ((struct ngpppoe_padm *)u.resp.data)->msg));
+ break;
+ case NGM_PPPOE_MOTM:
+ Log(LG_PHYS, ("PPPoE: rec'd MOTM \"%s\"",
+ ((struct ngpppoe_padm *)u.resp.data)->msg));
+ break;
+#endif
default:
Log(LG_PHYS, ("PPPoE: rec'd command %lu from \"%s\"",
(u_long)u.resp.header.cmd, path));
@@ -695,6 +707,7 @@ PppoeStat(Context ctx)
}
Printf("PPPoE configuration:\r\n");
+ Printf("\tIface Name : %s\r\n", pe->iface);
Printf("\tIface Node : %s\r\n", pe->path);
Printf("\tIface Hook : %s\r\n", pe->hook);
Printf("\tSession : %s\r\n", pe->session);
@@ -748,12 +761,8 @@ static int
PppoePeerIface(Link l, void *buf, size_t buf_len)
{
PppoeInfo const pppoe = (PppoeInfo)l->info;
- char iface[IFNAMSIZ];
- strlcpy(iface, pppoe->path, sizeof(iface));
- if (iface[strlen(iface) - 1] == ':')
- iface[strlen(iface) - 1] = '\0';
- strlcpy(buf, iface, buf_len);
+ strlcpy(buf, pppoe->iface, buf_len);
return (0);
}
@@ -880,7 +889,7 @@ PppoeGetMru(Link l, int conf)
}
static int
-CreatePppoeNode(struct PppoeIf *PIf, const char *path, const char *hook)
+CreatePppoeNode(struct PppoeIf *PIf, const char *iface, const char *path, const char *hook)
{
union {
u_char buf[sizeof(struct ng_mesg) + 2048];
@@ -892,11 +901,6 @@ CreatePppoeNode(struct PppoeIf *PIf, con
uint32_t f;
/* Make sure interface is up. */
- char iface[IFNAMSIZ];
-
- strlcpy(iface, path, sizeof(iface));
- if (iface[strlen(iface) - 1] == ':')
- iface[strlen(iface) - 1] = '\0';
if (ExecCmdNosh(LG_PHYS2, iface, "%s %s up", _PATH_IFCONFIG, iface) != 0) {
Log(LG_ERR, ("PPPoE: can't bring up interface %s",
iface));
@@ -1501,7 +1505,7 @@ PppoeGetNode(Link l)
l->name));
return;
}
- if (CreatePppoeNode(&PppoeIfs[free], pi->path, pi->hook)) {
+ if (CreatePppoeNode(&PppoeIfs[free], pi->iface, pi->path, pi->hook)) {
strlcpy(PppoeIfs[free].ifnodepath,
pi->path,
sizeof(PppoeIfs[free].ifnodepath));
@@ -1673,7 +1677,7 @@ PppoeSetCommand(Context ctx, int ac, cha
{
const PppoeInfo pi = (PppoeInfo) ctx->lnk->info;
const char *hookname = ETHER_DEFAULT_HOOK;
- const char *colon;
+ int i;
#ifdef NGM_PPPOE_SETMAXP_COOKIE
int ap;
#endif
@@ -1684,9 +1688,17 @@ PppoeSetCommand(Context ctx, int ac, cha
hookname = av[1];
/* fall through */
case 1:
- colon = (av[0][strlen(av[0]) - 1] == ':') ? "" : ":";
- snprintf(pi->path, sizeof(pi->path),
- "%s%s", av[0], colon);
+ strlcpy(pi->iface, av[0], sizeof(pi->iface));
+ strlcpy(pi->path, pi->iface, sizeof(pi->path) - 1);
+ for (i = 0; i < sizeof(pi->path) - 1; i++) {
+ if (pi->path[i] == '.' || pi->path[i] == ':')
+ pi->path[i] = '_';
+ else if (pi->path[i] == '\0') {
+ pi->path[i] = ':';
+ pi->path[i + 1] = '\0';
+ break;
+ }
+ }
strlcpy(pi->hook, hookname, sizeof(pi->hook));
break;
default:

View File

@@ -1,51 +0,0 @@
Index: src/log.h
===================================================================
--- src/log.h (revision 2328)
+++ src/log.h (revision 2329)
@@ -14,6 +14,10 @@
#ifndef _LG_H_
#define _LG_H_
+#include "mbuf.h"
+
+#include <stdio.h>
+
/*
* DEFINITIONS
*/
Index: src/contrib/libpdel/util/gtree.c
===================================================================
--- src/contrib/libpdel/util/gtree.c (revision 2372)
+++ src/contrib/libpdel/util/gtree.c (revision 2373)
@@ -58,6 +58,9 @@
#include "util/gtree.h"
#include "util/typed_mem.h"
+#include "defs.h"
+#include "log.h"
+
/* Enabled debug tracing: only use this when keys are strings */
#define GTREE_TRACE 0
@@ -1091,7 +1094,7 @@ gtree_assert(int pred, const char *s, co
{
if (pred)
return;
- printf("FAILURE: %s:%u: %s\n", func, line, s);
+ Perror("FAILURE: %s:%u: %s\n", func, line, s);
gtree_print(g, stdout);
kill(getpid(), SIGABRT);
}
Index: src/Makefile
===================================================================
--- src/Makefile (revision 2372)
+++ src/Makefile (revision 2373)
@@ -162,7 +162,7 @@ STDSRCS+= web.c
LDADD+= -lssl
.endif
-CFLAGS+= -DNOLIBPDEL -I./contrib/libpdel
+CFLAGS+= -DNOLIBPDEL -I. -I./contrib/libpdel
PDPATH1= contrib/libpdel/util:contrib/libpdel/structs
PDPATH2= contrib/libpdel/structs/type
.if defined ( NOWEB )