commit
c08eb2c9be
13 changed files with 53 additions and 668 deletions
|
@ -8,8 +8,8 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
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_LICENSE:=GPL-2.0
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
@ -17,7 +17,7 @@ PKG_LICENSE_FILES:=LICENSE
|
|||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/xelerance/xl2tpd.git
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_VERSION:=1cda2a266e2e957b81019d63a8902b28304a0ac4
|
||||
PKG_SOURCE_VERSION:=5674a5835e9b89b7438917a380f3a6d68528fa3e
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
|
||||
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.
|
||||
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
|
||||
/etc/xl2tpd/xl2tpd.conf
|
||||
|
|
|
@ -15,6 +15,7 @@ proto_l2tp_init_config() {
|
|||
proto_config_add_string "pppd_options"
|
||||
proto_config_add_boolean "ipv6"
|
||||
proto_config_add_int "mtu"
|
||||
proto_config_add_int "checkup_interval"
|
||||
proto_config_add_string "server"
|
||||
available=1
|
||||
no_device=1
|
||||
|
@ -39,8 +40,9 @@ proto_l2tp_setup() {
|
|||
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
|
||||
while [ ! -p /var/run/xl2tpd/l2tp-control ]; do
|
||||
|
@ -54,8 +56,8 @@ proto_l2tp_setup() {
|
|||
done
|
||||
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=""
|
||||
if [ "${demand:-0}" -gt 0 ]; then
|
||||
demand="precompiled-active-filter /etc/ppp/filter demand idle $demand"
|
||||
|
@ -63,28 +65,32 @@ proto_l2tp_setup() {
|
|||
demand="persist"
|
||||
fi
|
||||
|
||||
local mtu
|
||||
[ -n "$mtu" ] || json_get_var mtu mtu
|
||||
|
||||
local interval="${keepalive##*[, ]}"
|
||||
[ "$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} || {
|
||||
echo "xl2tpd-control: Add l2tp-$interface failed" >&2
|
||||
|
@ -103,17 +109,6 @@ proto_l2tp_teardown() {
|
|||
local optfile="/tmp/l2tp/options.${interface}"
|
||||
|
||||
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
|
||||
xl2tpd-control remove l2tp-${interface} || {
|
||||
echo "xl2tpd-control: Remove l2tp-$interface failed" >&2
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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…
Reference in a new issue