There was a simpler upstream change to support Unix98 ptys through the use of openpty(), which I have applied instead.
diff -u l2tpd-0.70-pre20031121/l2tpd.c l2tpd-0.70-pre20031121/l2tpd.c --- l2tpd-0.70-pre20031121/l2tpd.c +++ l2tpd-0.70-pre20031121/l2tpd.c @@ -42,6 +42,7 @@ #ifdef USE_KERNEL #include <sys/ioctl.h> #endif +#include <pty.h> #include "l2tp.h" struct tunnel_list tunnels; @@ -274,7 +275,6 @@ int start_pppd (struct call *c, struct ppp_opts *opts) { - char a, b; char tty[80]; char *stropt[80]; struct ppp_opts *p; @@ -324,6 +324,8 @@ else { #endif +#ifdef USE_BSD_PTYS + char a, b; if ((c->fd = getPtyMaster (&a, &b)) < 0) { log (LOG_WARN, "%s: unable to allocate pty, abandoning!\n", @@ -347,7 +349,20 @@ /* XXX JEF: CHECK ME */ stropt[pos++] = strdup(tty); stropt[pos] = NULL; +#else + int pty_fd, tty_fd, fd_flags; + if (openpty(&pty_fd, &tty_fd, NULL, NULL, NULL) != 0) + { + log (LOG_WARN, "%s: unable to allocate pty/tty, abandoning!\n", + __FUNCTION__); + return -EINVAL; + } + fd_flags = fcntl(pty_fd, F_GETFL); + fcntl(pty_fd, F_SETFL, fd_flags | O_NONBLOCK); + c->fd = pty_fd; + fd2 = tty_fd; +#endif #ifdef USE_KERNEL } #endif diff -u l2tpd-0.70-pre20031121/Makefile l2tpd-0.70-pre20031121/Makefile --- l2tpd-0.70-pre20031121/Makefile +++ l2tpd-0.70-pre20031121/Makefile @@ -51,6 +51,7 @@ # #OSFLAGS= -DSOLARIS #OSLIBS= -lnsl -lsocket +OSLIB= -lutil # # Feature flags # only in patch2: unchanged: --- l2tpd-0.70-pre20031121.orig/pty.c +++ l2tpd-0.70-pre20031121/pty.c @@ -15,6 +15,7 @@ * from pty-redir by Magosanyi Arpad. * */ +#ifdef USE_BSD_PTYS #include "l2tp.h" #include <fcntl.h> @@ -62,3 +63,4 @@ log (LOG_CRIT, "%s: No more free pseudo-tty's\n", __FUNCTION__); return -1; } +#endif -- END -- I have also taken the liberty of fixing most other open bugs (I hope) in an NMU with the following changes: diff -u l2tpd-0.70-pre20031121/avp.h l2tpd-0.70-pre20031121/avp.h --- l2tpd-0.70-pre20031121/avp.h +++ l2tpd-0.70-pre20031121/avp.h @@ -111,8 +111,8 @@ #define ASSIGNED_TUN_ID_AVP 9 #define RX_WIN_SIZE_AVP 10 #define CHALLENGE_AVP 11 -#define CHALLENGE_RESP_AVP 12 -#define CAUSE_ERROR_AVP 13 +#define CAUSE_ERROR_AVP 12 +#define CHALLENGE_RESP_AVP 13 #define ASSIGNED_SES_ID_AVP 14 #define SERIAL_NUMBER_AVP 15 #define MIN_BPS_AVP 16 diff -u l2tpd-0.70-pre20031121/debian/control l2tpd-0.70-pre20031121/debian/control --- l2tpd-0.70-pre20031121/debian/control +++ l2tpd-0.70-pre20031121/debian/control @@ -13,7 +13,6 @@ -Depends: ${shlibs:Depends} -Description: A layer 2 tunneling protocol implementation. +Depends: ${shlibs:Depends}, ppp +Description: a layer 2 tunneling protocol implementation l2tpd is the open source implementation of the L2TP tunneling - protocol (RFC2661). It does implement both LAC and LNS role - in a L2TP networking architecture. The main goal of this protocol is - to tunnel PPP frame trough an ip network. - + protocol (RFC2661). The main purpose of this protocol is to tunnel + PPP frames through IP networks. It implements both LAC and LNS role + in the L2TP networking architecture. diff -u l2tpd-0.70-pre20031121/debian/copyright l2tpd-0.70-pre20031121/debian/copyright --- l2tpd-0.70-pre20031121/debian/copyright +++ l2tpd-0.70-pre20031121/debian/copyright @@ -1,8 +1,11 @@ -This package have been packaged by Jean-Francois Dive <[EMAIL PROTECTED]> +This software was packaged by Jean-Francois Dive <[EMAIL PROTECTED]> as l2tpd. -The upstream source is the open source implementation of l2tpd which can be found -at www.l2tpd.org. This source is a branch from the orginal work of Mark Spencer -(www.marko.net) +The upstream source is the open source implementation of l2tpd found +at <http://l2tpd.sourceforge.net/> and previously at +<http://www.l2tpd.org>. This source is a branch from the orginal work +of Mark Spencer (www.marko.net). -The l2tpd license is the GPL version 2. +The l2tpd license is the GNU General Public License, version 2. On +Debian systems, the complete text of the GNU General Public License +can be found in `/usr/share/common-licenses/GPL'. diff -u l2tpd-0.70-pre20031121/debian/changelog l2tpd-0.70-pre20031121/debian/changelog --- l2tpd-0.70-pre20031121/debian/changelog +++ l2tpd-0.70-pre20031121/debian/changelog @@ -1,3 +1,18 @@ +l2tpd (0.70-pre20031121-2.2) unstable; urgency=low + + * Non-maintainer upload. + * Applied upstream change to remove reliance on BSD pseudo-terminals + (Closes: #276746, #409944). + * Corrected AVP numbers for challenge-response and cause code + (Closes: #265732). + * Implemented alignment fix-up for AVPs (Closes: #351870). + * Updated no-detach option to pppd (Closes: #298716). + * Added dependency on ppp (Closes: #395905). + * Updated copyright to mention newer web site and path to GPL text. + * Improved package description (Closes: #300003). + + -- Ben Hutchings <[EMAIL PROTECTED]> Tue, 20 Feb 2007 06:20:44 +0000 + l2tpd (0.70-pre20031121-2.1) unstable; urgency=low * Non-maintainer upload. reverted: --- l2tpd-0.70-pre20031121/debian/.#l2tpd.init.1.3 +++ l2tpd-0.70-pre20031121.orig/debian/.#l2tpd.init.1.3 @@ -1,27 +0,0 @@ -#!/bin/sh -# -PATH=/bin:/usr/bin:/sbin:/usr/sbin -DAEMON=/usr/sbin/l2tpd -PIDFILE=/var/run/l2tpd.pid - -test -f $DAEMON || exit 0 - -case "$1" in - start) - start-stop-daemon --start --verbose --pidfile $PIDFILE --exec $DAEMON - ;; - stop) - start-stop-daemon --stop --verbose --pidfile $PIDFILE --exec $DAEMON - ;; - restart|force-reload) - start-stop-daemon --stop --verbose --pidfile $PIDFILE --exec $DAEMON - sleep 1 - start-stop-daemon --start --verbose --pidfile $PIDFILE --exec $DAEMON - ;; - *) - echo "Usage: /etc/init.d/l2tdp {start|stop|restart|force-reload}" - exit 1 - ;; -esac - -exit 0 diff -u l2tpd-0.70-pre20031121/avp.c l2tpd-0.70-pre20031121/avp.c --- l2tpd-0.70-pre20031121/avp.c +++ l2tpd-0.70-pre20031121/avp.c @@ -775,6 +775,7 @@ int firstavp = -1; int hidlen = 0; char *data = buf->start + sizeof (struct control_hdr); + u_int32_t alignedbuf[(sizeof (struct avp_hdr) + 0x400 + 3) / 4]; avp = (struct avp_hdr *) data; if (debug_avp) @@ -867,7 +868,7 @@ /* We want to rewrite the AVP as an unhidden AVP and then pass it along as normal. Remeber how long the AVP was in the first place though! */ - hidlen = avp->length; + hidlen = rlen; if (decrypt_avp (data, t)) { if (debug_avp) @@ -890,10 +891,12 @@ else hidlen = 0; + memcpy(alignedbuf, avp, sizeof (struct avp_hdr) + ALENGTH (rlen)); + /* validate */ if (avps[attr].validate) { - if(avps[attr].validate(attr, t, c, avp, ALENGTH (rlen))) { + if(avps[attr].validate(attr, t, c, (struct avp_hdr *) alignedbuf, ALENGTH (rlen))) { if (AMBIT (rlen)) { log (LOG_WARN, @@ -917,7 +920,7 @@ /* handling */ if (avps[attr].handle) { - if (avps[attr].handle(t, c, avp, ALENGTH (rlen))) + if (avps[attr].handle(t, c, (struct avp_hdr *) alignedbuf, ALENGTH (rlen))) { if (AMBIT (rlen)) { diff -u l2tpd-0.70-pre20031121/control.c l2tpd-0.70-pre20031121/control.c --- l2tpd-0.70-pre20031121/control.c +++ l2tpd-0.70-pre20031121/control.c @@ -808,7 +808,7 @@ control_xmit (buf); po = NULL; po = add_opt (po, "passive"); - po = add_opt (po, "-detach"); + po = add_opt (po, "nodetach"); if (c->lac) { if (c->lac->defaultroute) @@ -900,7 +900,7 @@ strncpy (ip2, IPADDY (c->addr), sizeof (ip2)); po = NULL; po = add_opt (po, "passive"); - po = add_opt (po, "-detach"); + po = add_opt (po, "nodetach"); po = add_opt (po, "%s:%s", c->lns->localaddr ? ip1 : "", ip2); if (c->lns->authself) { @@ -948,7 +948,7 @@ case OCCN: /* jz: get OCCN, so the only thing we must do is to start the pppd */ po = NULL; po = add_opt (po, "passive"); - po = add_opt (po, "-detach"); + po = add_opt (po, "nodetach"); po = add_opt (po, "file"); strcat (dummy_buf, c->dial_no); /* jz: use /etc/ppp/dialnumber.options for pppd - kick it if you dont like */ strcat (dummy_buf, ".options"); -- END -- However, I still could not recommend using this package. This is essentially an alpha version and there is no final release. The package should probably be replaced with xl2tpd or rp-l2tpd (not that I can vouch for their quality). Ben. -- Ben Hutchings The obvious mathematical breakthrough [to break modern encryption] would be development of an easy way to factor large prime numbers. - Bill Gates
signature.asc
Description: This is a digitally signed message part