Browse Source

Merge pull request #1653 from yousong/xl2tpd-fix

Xl2tpd fix
lilik-openwrt-22.03
Steven Barth 9 years ago
parent
commit
c08eb2c9be
13 changed files with 53 additions and 668 deletions
  1. +25
    -6
      net/xl2tpd/Makefile
  2. +28
    -33
      net/xl2tpd/files/l2tp.sh
  3. +0
    -42
      net/xl2tpd/patches/200-xl2tpd-control-check-end-of-file-when-reading-pipe-t.patch
  4. +0
    -26
      net/xl2tpd/patches/201-xl2tpd-control-define-_GNU_SOURCE-to-use-fmemopen-an.patch
  5. +0
    -42
      net/xl2tpd/patches/202-xl2tpd-control-open-control-file-with-O_NONBLOCK.patch
  6. +0
    -75
      net/xl2tpd/patches/203-xl2tpd-control-cleaup-result-file-atexit.patch
  7. +0
    -58
      net/xl2tpd/patches/204-xl2tpd-control-enhance-output-of-print_error.patch
  8. +0
    -34
      net/xl2tpd/patches/205-xl2tpd-fix-typo-in-reporting-available-lns-count.patch
  9. +0
    -71
      net/xl2tpd/patches/206-xl2tpd-start_pppd-place-opts-after-plugin-pppol2tp.s.patch
  10. +0
    -104
      net/xl2tpd/patches/207-xl2tpd-introduce-new-option-l-for-using-syslog-as-th.patch
  11. +0
    -26
      net/xl2tpd/patches/208-xl2tpd-unlink-result-file-to-prevent-leftover-a-regu.patch
  12. +0
    -32
      net/xl2tpd/patches/209-xl2tpd-ignore-SIGPIPE-signal.patch
  13. +0
    -119
      net/xl2tpd/patches/210-xl2tpd-control-show-all-available-commands-in-help.patch

+ 25
- 6
net/xl2tpd/Makefile View File

@ -8,8 +8,8 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=xl2tpd PKG_NAME:=xl2tpd
PKG_VERSION:=1.3.7pre20150524
PKG_RELEASE:=3
PKG_VERSION:=devel-20150812
PKG_RELEASE:=1
PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com> PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
PKG_LICENSE:=GPL-2.0 PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=LICENSE PKG_LICENSE_FILES:=LICENSE
@ -17,7 +17,7 @@ PKG_LICENSE_FILES:=LICENSE
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/xelerance/xl2tpd.git PKG_SOURCE_URL:=https://github.com/xelerance/xl2tpd.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=1cda2a266e2e957b81019d63a8902b28304a0ac4
PKG_SOURCE_VERSION:=5674a5835e9b89b7438917a380f3a6d68528fa3e
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_INSTALL:=1 PKG_INSTALL:=1
@ -39,9 +39,28 @@ 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. main goal of this protocol is to tunnel PPP frame trough an IP network.
endef endef
# XXX: CFLAGS are already set by Build/Compile/Default
MAKE_FLAGS+= \
OFLAGS=""
# Use optimization options from OpenWrt build system
MAKE_FLAGS += OFLAGS=""
ifneq (0,0)
# debugging options from Makefile of xl2tpd package
EXTRA_CFLAGS += \
-DDEBUG_ZLB \
-DDEBUG_HELLO \
-DDEBUG_CLOSE \
-DDEBUG_FLOW \
-DDEBUG_FILE \
-DDEBUG_AAA \
-DDEBUG_PAYLOAD \
-DDEBUG_CONTROL \
-DDEBUG_PPPD \
-DDEBUG_HIDDEN \
-DDEBUG_ENTROPY \
-DDEBUG_CONTROL_XMIT \
-DDEBUG_MAGIC \
-DDEBUG_FLOW_MORE \
-DDEBUG_AUTH
endif
define Package/xl2tpd/conffiles define Package/xl2tpd/conffiles
/etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf


+ 28
- 33
net/xl2tpd/files/l2tp.sh View File

@ -15,6 +15,7 @@ proto_l2tp_init_config() {
proto_config_add_string "pppd_options" proto_config_add_string "pppd_options"
proto_config_add_boolean "ipv6" proto_config_add_boolean "ipv6"
proto_config_add_int "mtu" proto_config_add_int "mtu"
proto_config_add_int "checkup_interval"
proto_config_add_string "server" proto_config_add_string "server"
available=1 available=1
no_device=1 no_device=1
@ -39,8 +40,9 @@ proto_l2tp_setup() {
exit 1 exit 1
} }
if [ ! -p /var/run/xl2tpd/l2tp-control ]; then
/etc/init.d/xl2tpd start
# Start and wait for xl2tpd
if [ ! -p /var/run/xl2tpd/l2tp-control -o -z "$(pidof xl2tpd)" ]; then
/etc/init.d/xl2tpd restart
local wait_timeout=0 local wait_timeout=0
while [ ! -p /var/run/xl2tpd/l2tp-control ]; do while [ ! -p /var/run/xl2tpd/l2tp-control ]; do
@ -54,8 +56,8 @@ proto_l2tp_setup() {
done done
fi fi
local ipv6 demand keepalive username password pppd_options
json_get_vars ipv6 demand keepalive username password pppd_options
local ipv6 demand keepalive username password pppd_options mtu
json_get_vars ipv6 demand keepalive username password pppd_options mtu
[ "$ipv6" = 1 ] || ipv6="" [ "$ipv6" = 1 ] || ipv6=""
if [ "${demand:-0}" -gt 0 ]; then if [ "${demand:-0}" -gt 0 ]; then
demand="precompiled-active-filter /etc/ppp/filter demand idle $demand" demand="precompiled-active-filter /etc/ppp/filter demand idle $demand"
@ -63,28 +65,32 @@ proto_l2tp_setup() {
demand="persist" demand="persist"
fi fi
local mtu
[ -n "$mtu" ] || json_get_var mtu mtu
local interval="${keepalive##*[, ]}" local interval="${keepalive##*[, ]}"
[ "$interval" != "$keepalive" ] || interval=5 [ "$interval" != "$keepalive" ] || interval=5
mkdir -p /tmp/l2tp
keepalive="${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}}"
username="${username:+user \"$username\" password \"$password\"}"
ipv6="${ipv6:++ipv6}"
mtu="${mtu:+mtu $mtu mru $mtu}"
echo "${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}}" > "${optfile}"
echo "usepeerdns" >> "${optfile}"
echo "nodefaultroute" >> "${optfile}"
echo "${username:+user \"$username\" password \"$password\"}" >> "${optfile}"
echo "ipparam \"$interface\"" >> "${optfile}"
echo "ifname \"l2tp-$interface\"" >> "${optfile}"
echo "ip-up-script /lib/netifd/ppp-up" >> "${optfile}"
echo "ipv6-up-script /lib/netifd/ppp-up" >> "${optfile}"
echo "ip-down-script /lib/netifd/ppp-down" >> "${optfile}"
echo "ipv6-down-script /lib/netifd/ppp-down" >> "${optfile}"
# Don't wait for LCP term responses; exit immediately when killed.
echo "lcp-max-terminate 0" >> "${optfile}"
echo "${ipv6:++ipv6} ${pppd_options}" >> "${optfile}"
echo "${mtu:+mtu $mtu mru $mtu}" >> "${optfile}"
mkdir -p /tmp/l2tp
cat <<EOF >"$optfile"
usepeerdns
nodefaultroute
ipparam "$interface"
ifname "l2tp-$interface"
ip-up-script /lib/netifd/ppp-up
ipv6-up-script /lib/netifd/ppp-up
ip-down-script /lib/netifd/ppp-down
ipv6-down-script /lib/netifd/ppp-down
# Don't wait for LCP term responses; exit immediately when killed.
lcp-max-terminate 0
$keepalive
$username
$ipv6
$mtu
$pppd_options
EOF
xl2tpd-control add l2tp-${interface} pppoptfile=${optfile} lns=${server} || { xl2tpd-control add l2tp-${interface} pppoptfile=${optfile} lns=${server} || {
echo "xl2tpd-control: Add l2tp-$interface failed" >&2 echo "xl2tpd-control: Add l2tp-$interface failed" >&2
@ -103,17 +109,6 @@ proto_l2tp_teardown() {
local optfile="/tmp/l2tp/options.${interface}" local optfile="/tmp/l2tp/options.${interface}"
rm -f ${optfile} rm -f ${optfile}
case "$ERROR" in
11|19)
proto_notify_error "$interface" AUTH_FAILED
proto_block_restart "$interface"
;;
2)
proto_notify_error "$interface" INVALID_OPTIONS
proto_block_restart "$interface"
;;
esac
if [ -p /var/run/xl2tpd/l2tp-control ]; then if [ -p /var/run/xl2tpd/l2tp-control ]; then
xl2tpd-control remove l2tp-${interface} || { xl2tpd-control remove l2tp-${interface} || {
echo "xl2tpd-control: Remove l2tp-$interface failed" >&2 echo "xl2tpd-control: Remove l2tp-$interface failed" >&2


+ 0
- 42
net/xl2tpd/patches/200-xl2tpd-control-check-end-of-file-when-reading-pipe-t.patch View File

@ -1,42 +0,0 @@
From 7973d45a0e1716ddc6bfb6caf600f826f59a7932 Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Tue, 28 Apr 2015 21:26:15 +0800
Subject: [PATCH 200/210] xl2tpd-control: check end-of-file when reading pipe
to avoid dead loop.
---
xl2tpd-control.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/xl2tpd-control.c b/xl2tpd-control.c
index feafe10..e5904d8 100644
--- a/xl2tpd-control.c
+++ b/xl2tpd-control.c
@@ -306,17 +306,20 @@ int read_result(int result_fd, char* buf, ssize_t size)
/*FIXME: there is a chance to hang up reading.
Should I create watching thread with timeout?
*/
- ssize_t readed;
+ ssize_t readed = 0;
+ ssize_t len;
+
do
{
- readed = read (result_fd, buf, size);
- if (readed < 0)
+ len = read (result_fd, buf + readed, size - readed);
+ if (len < 0)
{
print_error (ERROR_LEVEL,
"error: can't read command result: %s\n", strerror (errno));
break;
}
- } while (readed == 0);
+ readed += len;
+ } while (len > 0 && (size - readed) > 0);
buf[readed] = '\0';
/* scan result code */
--
1.7.10.4

+ 0
- 26
net/xl2tpd/patches/201-xl2tpd-control-define-_GNU_SOURCE-to-use-fmemopen-an.patch View File

@ -1,26 +0,0 @@
From efa0a18b5dfd827792b07acdcb35101229ccf612 Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Wed, 29 Apr 2015 10:32:37 +0800
Subject: [PATCH 201/210] xl2tpd-control: define _GNU_SOURCE to use fmemopen()
and friends.
---
xl2tpd-control.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/xl2tpd-control.c b/xl2tpd-control.c
index e5904d8..9b6235d 100644
--- a/xl2tpd-control.c
+++ b/xl2tpd-control.c
@@ -10,6 +10,8 @@
*
*/
+#define _GNU_SOURCE
+
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
--
1.7.10.4

+ 0
- 42
net/xl2tpd/patches/202-xl2tpd-control-open-control-file-with-O_NONBLOCK.patch View File

@ -1,42 +0,0 @@
From fedfd6685e5f81f0460beb4c448a30e7a6cfbd31 Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Wed, 29 Apr 2015 14:21:12 +0800
Subject: [PATCH 202/210] xl2tpd-control: open control file with O_NONBLOCK.
Otherwise xl2tpd-control would block indefinitely in case xl2tpd is
not running.
---
xl2tpd-control.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/xl2tpd-control.c b/xl2tpd-control.c
index 9b6235d..973ee87 100644
--- a/xl2tpd-control.c
+++ b/xl2tpd-control.c
@@ -246,7 +246,7 @@ int main (int argc, char *argv[])
print_error (DEBUG_LEVEL, "command to be passed:\n%s\n", buf);
/* try to open control file for writing */
- int control_fd = open (control_filename, O_WRONLY, 0600);
+ int control_fd = open (control_filename, O_WRONLY | O_NONBLOCK, 0600);
if (control_fd < 0)
{
int errorno = errno;
@@ -265,6 +265,14 @@ int main (int argc, char *argv[])
}
return -1;
}
+
+ /* turn off O_NONBLOCK */
+ if (fcntl (control_fd, F_SETFL, O_WRONLY) == -1) {
+ print_error (ERROR_LEVEL,
+ "Can not turn off nonblocking mode for control_fd: %s\n",
+ strerror(errno));
+ return -2;
+ }
/* pass command to control pipe */
if (write (control_fd, buf, ftell (mesf)) < 0)
--
1.7.10.4

+ 0
- 75
net/xl2tpd/patches/203-xl2tpd-control-cleaup-result-file-atexit.patch View File

@ -1,75 +0,0 @@
From 07e522cd7e223517389582a8eb647a4a6a8a5cf8 Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Thu, 30 Apr 2015 13:53:11 +0800
Subject: [PATCH 203/210] xl2tpd-control: cleaup result file atexit().
---
xl2tpd-control.c | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/xl2tpd-control.c b/xl2tpd-control.c
index 973ee87..abc0324 100644
--- a/xl2tpd-control.c
+++ b/xl2tpd-control.c
@@ -12,6 +12,7 @@
#define _GNU_SOURCE
+#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
@@ -35,6 +36,9 @@
#define TUNNEL_REQUIRED 1
#define TUNNEL_NOT_REQUIRED 0
+char result_filename[128];
+int result_fd = -1;
+
int log_level = ERROR_LEVEL;
void print_error (int level, const char *fmt, ...);
@@ -117,6 +121,14 @@ void help()
);
}
+void cleanup(void)
+{
+ /* cleaning up */
+ if (result_fd >= 0)
+ close (result_fd);
+ unlink (result_filename);
+}
+
int main (int argc, char *argv[])
{
char* control_filename = NULL;
@@ -195,11 +207,11 @@ int main (int argc, char *argv[])
FILE* mesf = fmemopen (buf, CONTROL_PIPE_MESSAGE_SIZE, "w");
/* create result pipe for reading */
- char result_filename[128];
snprintf (result_filename, 128, RESULT_FILENAME_FORMAT, getpid());
unlink (result_filename);
mkfifo (result_filename, 0600);
- int result_fd = open (result_filename, O_RDONLY | O_NONBLOCK, 0600);
+ atexit(cleanup);
+ result_fd = open (result_filename, O_RDONLY | O_NONBLOCK, 0600);
if (result_fd < 0)
{
print_error (ERROR_LEVEL,
@@ -293,11 +305,6 @@ int main (int argc, char *argv[])
);
printf ("%s", rbuf);
- /* cleaning up */
-
- close (result_fd);
- unlink (result_filename);
-
return command_result_code;
}
--
1.7.10.4

+ 0
- 58
net/xl2tpd/patches/204-xl2tpd-control-enhance-output-of-print_error.patch View File

@ -1,58 +0,0 @@
From f6eaaabb0b2fab12cf597b8c1d12d470a13e581f Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Thu, 14 May 2015 14:58:10 +0800
Subject: [PATCH 204/210] xl2tpd-control: enhance output of print_error().
- Add prefix "xl2tpd-control: " to print_error() output.
- Output response from xl2tpd only when -d is enabled as result of
control command can be retrieved from exit code.
- Remove some redundant and not that useful verbose output.
---
xl2tpd-control.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/xl2tpd-control.c b/xl2tpd-control.c
index abc0324..6b08850 100644
--- a/xl2tpd-control.c
+++ b/xl2tpd-control.c
@@ -164,7 +164,6 @@ int main (int argc, char *argv[])
{
control_filename = strdup (CONTROL_PIPE);
}
- print_error (DEBUG_LEVEL, "set control filename to %s\n", control_filename);
/* parse command name */
for (command = commands; command->name; command++)
@@ -176,10 +175,7 @@ int main (int argc, char *argv[])
}
}
- if (command->name)
- {
- print_error (DEBUG_LEVEL, "get command %s\n", command->name);
- } else {
+ if (!command->name) {
print_error (ERROR_LEVEL, "error: no such command %s\n", argv[i]);
return -1;
}
@@ -303,7 +299,8 @@ int main (int argc, char *argv[])
int command_result_code = read_result (
result_fd, rbuf, CONTROL_PIPE_MESSAGE_SIZE
);
- printf ("%s", rbuf);
+ /* rbuf contains a newline, make it double to form a boundary. */
+ print_error (DEBUG_LEVEL, "command response: \n%s\n", rbuf);
return command_result_code;
}
@@ -313,6 +310,7 @@ void print_error (int level, const char *fmt, ...)
if (level > log_level) return;
va_list args;
va_start (args, fmt);
+ fprintf (stderr, "xl2tpd-control: ");
vfprintf (stderr, fmt, args);
va_end (args);
}
--
1.7.10.4

+ 0
- 34
net/xl2tpd/patches/205-xl2tpd-fix-typo-in-reporting-available-lns-count.patch View File

@ -1,34 +0,0 @@
From 1c148f6645f43bf5abd8a9b8f0708a598b357d97 Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Thu, 14 May 2015 19:56:39 +0800
Subject: [PATCH 205/210] xl2tpd: fix typo in reporting available lns count.
---
xl2tpd.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/xl2tpd.c b/xl2tpd.c
index c9b7579..6c945fc 100644
--- a/xl2tpd.c
+++ b/xl2tpd.c
@@ -1039,7 +1039,7 @@ int control_handle_available(FILE* resf, char* bufp){
lns_count++;
}
- write_res (resf, "%02i AVAILABLE lns.cout=%d\n", 0, lns_count);
+ write_res (resf, "%02i AVAILABLE lns.count=%d\n", 0, lns_count);
lac = laclist;
int lac_count = 0;
@@ -1053,7 +1053,7 @@ int control_handle_available(FILE* resf, char* bufp){
if(deflac){
write_res (resf, "%02i AVAILABLE lac.%d.name=%s\n", 0, lac_count, deflac->entname);
lac_count++;
- }
+ }
write_res (resf, "%02i AVAILABLE lac.count=%d\n", 0, lac_count);
return 1;
--
1.7.10.4

+ 0
- 71
net/xl2tpd/patches/206-xl2tpd-start_pppd-place-opts-after-plugin-pppol2tp.s.patch View File

@ -1,71 +0,0 @@
From 18fdf802d31354c62a27cc5a63b196780a0d486e Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Wed, 29 Apr 2015 16:30:17 +0800
Subject: [PATCH 206/210] xl2tpd: start_pppd: place opts after "plugin
pppol2tp.so".
so that plugin options like pppol2tp_debug_mark can be recognized by
pppd. While doing this also add bound check to prevent potential buffer
overflow problem.
---
xl2tpd.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/xl2tpd.c b/xl2tpd.c
index 6c945fc..017adfd 100644
--- a/xl2tpd.c
+++ b/xl2tpd.c
@@ -382,7 +382,6 @@ int start_pppd (struct call *c, struct ppp_opts *opts)
/* char a, b; */
char tty[512];
char *stropt[80];
- struct ppp_opts *p;
#ifdef USE_KERNEL
struct sockaddr_pppol2tp sax;
int flags;
@@ -396,16 +395,7 @@ int start_pppd (struct call *c, struct ppp_opts *opts)
struct call *sc;
struct tunnel *st;
- p = opts;
stropt[0] = strdup (PPPD);
- while (p)
- {
- stropt[pos] = (char *) malloc (strlen (p->option) + 1);
- strncpy (stropt[pos], p->option, strlen (p->option) + 1);
- pos++;
- p = p->next;
- }
- stropt[pos] = NULL;
if (c->pppd > 0)
{
l2tp_log(LOG_WARNING, "%s: PPP already started on call!\n", __FUNCTION__);
@@ -467,7 +457,6 @@ int start_pppd (struct call *c, struct ppp_opts *opts)
snprintf (stropt[pos], 10, "%d", c->ourcid);
pos++;
}
- stropt[pos] = NULL;
}
else
#endif
@@ -497,6 +486,17 @@ int start_pppd (struct call *c, struct ppp_opts *opts)
return -EINVAL;
}
stropt[pos++] = strdup(tty);
+ }
+
+ {
+ struct ppp_opts *p = opts;
+ int maxn_opts = sizeof(stropt) / sizeof(stropt[0]) - 1;
+ while (p && pos < maxn_opts)
+ {
+ stropt[pos] = strdup (p->option);
+ pos++;
+ p = p->next;
+ }
stropt[pos] = NULL;
}
--
1.7.10.4

+ 0
- 104
net/xl2tpd/patches/207-xl2tpd-introduce-new-option-l-for-using-syslog-as-th.patch View File

@ -1,104 +0,0 @@
From b3402a68a4d29e9b1ae4e012e39a7bcb14fea3cf Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Thu, 30 Apr 2015 13:57:36 +0800
Subject: [PATCH 207/210] xl2tpd: introduce new option -l for using syslog as
the logging facility.
Defaults to old behaviour if no -l option was specified. Also update
manual doc to reflect this change.
---
doc/xl2tpd.8 | 5 +++++
file.h | 1 +
misc.c | 2 +-
xl2tpd.c | 13 ++++++++++++-
4 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/doc/xl2tpd.8 b/doc/xl2tpd.8
index 915b247..7afccac 100644
--- a/doc/xl2tpd.8
+++ b/doc/xl2tpd.8
@@ -20,6 +20,11 @@ This option prevents xl2tpd from detaching from the terminal and
daemonizing.
.TP
+.B -l
+This option tells xl2tpd to use syslog for logging even when \fB\-D\fR
+was specified.
+
+.TP
.B -c <config file>
Tells xl2tpd to use an alternate config file. Default is
/etc/xl2tpd/xl2tpd.conf. Fallback configuration file is
diff --git a/file.h b/file.h
index 89987ae..92df046 100644
--- a/file.h
+++ b/file.h
@@ -151,6 +151,7 @@ struct global
char pidfile[STRLEN]; /* File containing the pid number*/
char controlfile[STRLEN]; /* Control file name (named pipe) */
int daemon; /* Use daemon mode? */
+ int syslog; /* Use syslog for logging? */
int accesscontrol; /* Use access control? */
int forceuserspace; /* Force userspace? */
int packet_dump; /* Dump (print) all packets? */
diff --git a/misc.c b/misc.c
index 3092401..cccf4ca 100644
--- a/misc.c
+++ b/misc.c
@@ -57,7 +57,7 @@ void l2tp_log (int level, const char *fmt, ...)
vsnprintf (buf, sizeof (buf), fmt, args);
va_end (args);
- if(gconfig.daemon) {
+ if(gconfig.syslog) {
init_log();
SYSLOG_CALL( syslog (level, "%s", buf) );
} else {
diff --git a/xl2tpd.c b/xl2tpd.c
index 017adfd..1937690 100644
--- a/xl2tpd.c
+++ b/xl2tpd.c
@@ -1594,7 +1594,7 @@ void do_control ()
void usage(void) {
printf("\nxl2tpd version: %s\n", SERVER_VERSION);
printf("Usage: xl2tpd [-c <config file>] [-s <secret file>] [-p <pid file>]\n"
- " [-C <control file>] [-D]\n"
+ " [-C <control file>] [-D] [-l]\n"
" [-v, --version]\n");
printf("\n");
exit(1);
@@ -1605,6 +1605,7 @@ void init_args(int argc, char *argv[])
int i=0;
gconfig.daemon=1;
+ gconfig.syslog=-1;
memset(gconfig.altauthfile,0,STRLEN);
memset(gconfig.altconfigfile,0,STRLEN);
memset(gconfig.authfile,0,STRLEN);
@@ -1642,6 +1643,9 @@ void init_args(int argc, char *argv[])
else if (! strncmp(argv[i],"-D",2)) {
gconfig.daemon=0;
}
+ else if (! strncmp(argv[i],"-l",2)) {
+ gconfig.syslog=1;
+ }
else if (! strncmp(argv[i],"-s",2)) {
if(++i == argc)
usage();
@@ -1667,6 +1671,13 @@ void init_args(int argc, char *argv[])
usage();
}
}
+
+ /*
+ * defaults to syslog if no log facility was explicitly
+ * specified and we are about to daemonize
+ */
+ if (gconfig.syslog < 0)
+ gconfig.syslog = gconfig.daemon;
}
--
1.7.10.4

+ 0
- 26
net/xl2tpd/patches/208-xl2tpd-unlink-result-file-to-prevent-leftover-a-regu.patch View File

@ -1,26 +0,0 @@
From a2b163a65a2d4fbca57c3aa82b526cf8fbc8e449 Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Fri, 15 May 2015 10:56:23 +0800
Subject: [PATCH 208/210] xl2tpd: unlink result file to prevent leftover a
regular file.
---
xl2tpd.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/xl2tpd.c b/xl2tpd.c
index 1937690..c11fe66 100644
--- a/xl2tpd.c
+++ b/xl2tpd.c
@@ -1582,6 +1582,8 @@ void do_control ()
if (resf)
{
fclose (resf);
+ /* unlink it anyway to prevent leftover a regular file. */
+ unlink(res_filename);
}
}
--
1.7.10.4

+ 0
- 32
net/xl2tpd/patches/209-xl2tpd-ignore-SIGPIPE-signal.patch View File

@ -1,32 +0,0 @@
From 2d0eff7f56936823d784425d2171be295ba11027 Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Fri, 15 May 2015 15:55:10 +0800
Subject: [PATCH 209/210] xl2tpd: ignore SIGPIPE signal.
---
xl2tpd.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xl2tpd.c b/xl2tpd.c
index c11fe66..58ed868 100644
--- a/xl2tpd.c
+++ b/xl2tpd.c
@@ -1551,7 +1551,6 @@ void do_control ()
/*FIXME: check quotes to allow filenames with spaces?
(do not forget quotes escaping to allow filenames with quotes)*/
- /*FIXME: write to res_filename may cause SIGPIPE, need to catch it*/
resf = fopen (res_filename, "w");
if (!resf) {
l2tp_log (LOG_DEBUG, "%s: Can't open result file %s\n",
@@ -1811,6 +1810,7 @@ void init (int argc,char *argv[])
signal (SIGCHLD, &sigchld_handler);
signal (SIGUSR1, &sigusr1_handler);
signal (SIGHUP, &sighup_handler);
+ signal (SIGPIPE, SIG_IGN);
init_scheduler ();
unlink(gconfig.controlfile);
--
1.7.10.4

+ 0
- 119
net/xl2tpd/patches/210-xl2tpd-control-show-all-available-commands-in-help.patch View File

@ -1,119 +0,0 @@
From 26b77b7cdc70beddc68507f74372a4e2815720f0 Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Sun, 17 May 2015 10:53:44 +0800
Subject: [PATCH 210/210] xl2tpd-control: show all available commands in
--help.
---
xl2tpd-control.c | 63 ++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 44 insertions(+), 19 deletions(-)
diff --git a/xl2tpd-control.c b/xl2tpd-control.c
index 6b08850..b98ff24 100644
--- a/xl2tpd-control.c
+++ b/xl2tpd-control.c
@@ -51,6 +51,7 @@ struct command_t
char *name;
int (*handler) (FILE*, char* tunnel, int optc, char *optv[]);
int requires_tunnel;
+ char *help;
};
int command_add_lac (FILE*, char* tunnel, int optc, char *optv[]);
@@ -65,13 +66,29 @@ int command_available (FILE*, char* tunnel, int optc, char *optv[]);
struct command_t commands[] = {
/* Keep this command mapping for backwards compat */
- {"add", &command_add_lac, TUNNEL_REQUIRED},
- {"connect", &command_connect_lac, TUNNEL_REQUIRED},
- {"disconnect", &command_disconnect_lac, TUNNEL_REQUIRED},
- {"remove", &command_remove_lac, TUNNEL_REQUIRED},
+ {"add", &command_add_lac, TUNNEL_REQUIRED,
+ "\tadd\tadds new or modify existing lac configuration.\n"
+ "\t\tConfiguration must be specified as command options in\n"
+ "\t\t<key>=<value> pairs format.\n"
+ "\t\tSee available options in xl2tpd.conf(5)\n"
+ },
+ {"connect", &command_connect_lac, TUNNEL_REQUIRED,
+ "\tconnect\ttries to activate the tunnel.\n"
+ "\t\tUsername and secret for the tunnel can be passed as\n"
+ "\t\tcommand options.\n"
+ },
+ {"disconnect", &command_disconnect_lac, TUNNEL_REQUIRED,
+ "\tdisconnect\tdisconnects the tunnel.\n"
+ },
+ {"remove", &command_remove_lac, TUNNEL_REQUIRED,
+ "\tremove\tremoves lac configuration from xl2tpd.\n"
+ "\t\txl2tpd disconnects the tunnel before removing.\n"
+ },
/* LAC commands */
- {"add-lac", &command_add_lac, TUNNEL_REQUIRED},
+ {"add-lac", &command_add_lac, TUNNEL_REQUIRED,
+ "\tadd-lns\tadds new or modify existing lns configuration.\n"
+ },
{"connect-lac", &command_connect_lac, TUNNEL_REQUIRED},
{"disconnect-lac", &command_disconnect_lac, TUNNEL_REQUIRED},
{"remove-lac", &command_remove_lac, TUNNEL_REQUIRED},
@@ -89,36 +106,44 @@ struct command_t commands[] = {
void usage()
{
+ int i;
+
printf ("\nxl2tpd server version %s\n", SERVER_VERSION);
printf ("Usage: xl2tpd-control [-c <PATH>] <command> <tunnel name> [<COMMAND OPTIONS>]\n"
"\n"
" -c\tspecifies xl2tpd control file\n"
" -d\tspecify xl2tpd-control to run in debug mode\n"
"--help\tshows extended help\n"
- "Available commands: add, connect, disconnect, remove, add-lns\n"
);
+
+ printf ("Available commands: ");
+ for (i = 0; commands[i].name; i++) {
+ struct command_t *command = &commands[i];
+ int last = command[1].name == NULL;
+
+ printf ("%s%s", command->name, !last ? ", " : "\n");
+ }
}
void help()
{
+ int i;
+
usage();
printf (
"\n"
"Commands help:\n"
- "\tadd\tadds new or modify existing lac configuration.\n"
- "\t\tConfiguration must be specified as command options in\n"
- "\t\t<key>=<value> pairs format.\n"
- "\t\tSee available options in xl2tpd.conf(5)\n"
- "\tconnect\ttries to activate the tunnel.\n"
- "\t\tUsername and secret for the tunnel can be passed as\n"
- "\t\tcommand options.\n"
- "\tdisconnect\tdisconnects the tunnel.\n"
- "\tremove\tremoves lac configuration from xl2tpd.\n"
- "\t\txl2tpd disconnects the tunnel before removing.\n"
- "\n"
- "\tadd-lns\tadds new or modify existing lns configuration.\n"
- "See xl2tpd-control man page for more help\n"
);
+
+ for (i = 0; commands[i].name; i++) {
+ struct command_t *command = &commands[i];
+
+ if (!command->help)
+ continue;
+ printf ("%s", command->help);
+ }
+ /*FIXME Ha! there is currently no manpage for xl2tpd-control */
+ printf ("See xl2tpd-control man page for more help\n");
}
void cleanup(void)
--
1.7.10.4

Loading…
Cancel
Save