Browse Source

xl2tpd: refactor for more resilience.

- Use netifd no_proto_task for notifying that xl2tpd does not have a
   protocol task running.
 - Use procd for xl2tpd service management.
 - Refreshed 2xx patches to

    - Prevent leftover regular type control result file.
    - Allow xl2tpd run as foreground process while logging via syslog.

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>

 - bumped version
 - removed dependency on `ip` package as routes are setup by netifd
   if iproute2 is actually required, please depend on
   `@(PACKAGE_ip||PACKAGE_ip-full)` instead of `ip`

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
lilik-openwrt-22.03
Yousong Zhou 10 years ago
committed by Daniel Golle
parent
commit
59f33d2aa7
17 changed files with 495 additions and 114 deletions
  1. +3
    -5
      net/xl2tpd/Makefile
  2. +37
    -14
      net/xl2tpd/files/l2tp.sh
  3. +15
    -10
      net/xl2tpd/files/xl2tpd.init
  4. +10
    -5
      net/xl2tpd/patches/200-xl2tpd-control-check-end-of-file-when-reading-pipe-t.patch
  5. +9
    -4
      net/xl2tpd/patches/201-xl2tpd-control-define-_GNU_SOURCE-to-use-fmemopen-an.patch
  6. +8
    -3
      net/xl2tpd/patches/202-xl2tpd-control-open-control-file-with-O_NONBLOCK.patch
  7. +21
    -8
      net/xl2tpd/patches/203-xl2tpd-control-cleaup-result-file-atexit.patch
  8. +58
    -0
      net/xl2tpd/patches/204-xl2tpd-control-enhance-output-of-print_error.patch
  9. +34
    -0
      net/xl2tpd/patches/205-xl2tpd-fix-typo-in-reporting-available-lns-count.patch
  10. +0
    -22
      net/xl2tpd/patches/206-xl2tpd-fix-possible-buffer-overflow-when-filling-str.patch
  11. +19
    -10
      net/xl2tpd/patches/206-xl2tpd-start_pppd-place-opts-after-plugin-pppol2tp.s.patch
  12. +0
    -21
      net/xl2tpd/patches/207-l2tp_log-remove-log-prefix-that-will-duplicate-with-.patch
  13. +104
    -0
      net/xl2tpd/patches/207-xl2tpd-introduce-new-option-l-for-using-syslog-as-th.patch
  14. +26
    -0
      net/xl2tpd/patches/208-xl2tpd-unlink-result-file-to-prevent-leftover-a-regu.patch
  15. +32
    -0
      net/xl2tpd/patches/209-xl2tpd-ignore-SIGPIPE-signal.patch
  16. +119
    -0
      net/xl2tpd/patches/210-xl2tpd-control-show-all-available-commands-in-help.patch
  17. +0
    -12
      net/xl2tpd/patches/250-xl2tpd-control-atexit-needs-stdlib.patch

+ 3
- 5
net/xl2tpd/Makefile View File

@ -1,5 +1,5 @@
#
# Copyright (C) 2006-2014 OpenWrt.org
# Copyright (C) 2006-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
@ -8,14 +8,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=xl2tpd
PKG_VERSION:=1.3.7pre20141126
PKG_VERSION:=1.3.7pre20150524
PKG_RELEASE:=1
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=LICENSE
PKG_RELEASE=$(PKG_SOURCE_VERSION)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/xelerance/xl2tpd.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
@ -32,7 +30,7 @@ define Package/xl2tpd
TITLE:=An L2TP (Layer 2 Tunneling Protocol) daemon
URL:=http://www.xelerance.com/software/xl2tpd/
SUBMENU:=VPN
DEPENDS:=+ppp-mod-pppol2tp +ip +resolveip
DEPENDS:=+ppp-mod-pppol2tp +resolveip
endef
define Package/xl2tpd/description


+ 37
- 14
net/xl2tpd/files/l2tp.sh View File

@ -18,31 +18,43 @@ proto_l2tp_init_config() {
proto_config_add_string "server"
available=1
no_device=1
no_proto_task=1
}
proto_l2tp_setup() {
local config="$1"
local iface="$2"
local optfile="/tmp/l2tp/options.${config}"
local interface="$1"
local optfile="/tmp/l2tp/options.${interface}"
local ip serv_addr server
json_get_var server server && {
for ip in $(resolveip -t 5 "$server"); do
( proto_add_host_dependency "$config" "$ip" )
( proto_add_host_dependency "$interface" "$ip" )
serv_addr=1
done
}
[ -n "$serv_addr" ] || {
echo "Could not resolve server address"
echo "Could not resolve server address" >&2
sleep 5
proto_setup_failed "$config"
proto_setup_failed "$interface"
exit 1
}
if [ ! -p /var/run/xl2tpd/l2tp-control ]; then
/etc/init.d/xl2tpd start
local wait_timeout=0
while [ ! -p /var/run/xl2tpd/l2tp-control ]; do
wait_timeout=$(($wait_timeout + 1))
[ "$wait_timeout" -gt 5 ] && {
echo "Cannot find xl2tpd control file." >&2
proto_setup_failed "$interface"
exit 1
}
sleep 1
done
fi
local ipv6 demand keepalive username password pppd_options
json_get_vars ipv6 demand keepalive username password pppd_options
[ "$ipv6" = 1 ] || ipv6=""
if [ "${demand:-0}" -gt 0 ]; then
@ -51,6 +63,7 @@ proto_l2tp_setup() {
demand="persist"
fi
local mtu
[ -n "$mtu" ] || json_get_var mtu mtu
local interval="${keepalive##*[, ]}"
@ -62,8 +75,8 @@ proto_l2tp_setup() {
echo "usepeerdns" >> "${optfile}"
echo "nodefaultroute" >> "${optfile}"
echo "${username:+user \"$username\" password \"$password\"}" >> "${optfile}"
echo "ipparam \"$config\"" >> "${optfile}"
echo "ifname \"l2tp-$config\"" >> "${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}"
@ -73,14 +86,23 @@ proto_l2tp_setup() {
echo "${ipv6:++ipv6} ${pppd_options}" >> "${optfile}"
echo "${mtu:+mtu $mtu mru $mtu}" >> "${optfile}"
xl2tpd-control add l2tp-${config} pppoptfile=${optfile} lns=${server} redial=yes redial timeout=20
xl2tpd-control connect l2tp-${config}
xl2tpd-control add l2tp-${interface} pppoptfile=${optfile} lns=${server} redial=yes redial timeout=20 || {
echo "xl2tpd-control: Add l2tp-$interface failed" >&2
proto_setup_failed "$interface"
exit 1
}
xl2tpd-control connect l2tp-${interface} || {
echo "xl2tpd-control: Connect l2tp-$interface failed" >&2
proto_setup_failed "$interface"
exit 1
}
}
proto_l2tp_teardown() {
local interface="$1"
local optfile="/tmp/l2tp/options.${interface}"
rm -f ${optfile}
case "$ERROR" in
11|19)
proto_notify_error "$interface" AUTH_FAILED
@ -92,14 +114,15 @@ proto_l2tp_teardown() {
;;
esac
xl2tpd-control disconnect l2tp-${interface}
if [ -p /var/run/xl2tpd/l2tp-control ]; then
xl2tpd-control remove l2tp-${interface} || {
echo "xl2tpd-control: Remove l2tp-$interface failed" >&2
}
fi
# Wait for interface to go down
while [ -d /sys/class/net/l2tp-${interface} ]; do
sleep 1
done
xl2tpd-control remove l2tp-${interface}
rm -f ${optfile}
}
[ -n "$INCLUDE_ONLY" ] || {


+ 15
- 10
net/xl2tpd/files/xl2tpd.init View File

@ -1,18 +1,23 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2006-2015 OpenWrt.org
START=60
USE_PROCD=1
BIN=xl2tpd
DEFAULT=/etc/default/$BIN
RUN_D=/var/run
PID_F=$RUN_D/$BIN.pid
RUN_D="/var/run/xl2tpd"
PID_F="/var/run/xl2tpd.pid"
start_service() {
rm -rf "$RUN_D"
mkdir -p "$RUN_D"
start() {
mkdir -p $RUN_D/$BIN
[ -f $DEFAULT ] && . $DEFAULT
$BIN $OPTIONS
procd_open_instance
procd_set_param command $BIN -D -l -p "$PID_F"
procd_close_instance
}
stop() {
[ -f $PID_F ] && kill $(cat $PID_F)
stop_service() {
rm -rf "$RUN_D"
rm -rf "$PID_F"
}

net/xl2tpd/patches/201-xl2tpd-control-check-end-of-file-when-reading-pipe-t.patch → net/xl2tpd/patches/200-xl2tpd-control-check-end-of-file-when-reading-pipe-t.patch View File


net/xl2tpd/patches/202-xl2tpd-control-define-_GNU_SOURCE-to-use-fmemopen-an.patch → net/xl2tpd/patches/201-xl2tpd-control-define-_GNU_SOURCE-to-use-fmemopen-an.patch View File


net/xl2tpd/patches/203-xl2tpd-control-open-control-file-with-O_NONBLOCK.patch → net/xl2tpd/patches/202-xl2tpd-control-open-control-file-with-O_NONBLOCK.patch View File


net/xl2tpd/patches/205-xl2tpd-control-cleaup-result-file-atexit.patch → net/xl2tpd/patches/203-xl2tpd-control-cleaup-result-file-atexit.patch View File


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

@ -0,0 +1,58 @@
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

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

@ -0,0 +1,34 @@
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
- 22
net/xl2tpd/patches/206-xl2tpd-fix-possible-buffer-overflow-when-filling-str.patch View File

@ -1,22 +0,0 @@
From 1e8b82388578a622c5caf8fa04c238fdd7808ecc Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Thu, 30 Apr 2015 13:53:40 +0800
Subject: [PATCH 6/7] xl2tpd: fix possible buffer overflow when filling
stropt[].
---
xl2tpd.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/xl2tpd.c
+++ b/xl2tpd.c
@@ -490,7 +490,8 @@ int start_pppd (struct call *c, struct p
{
struct ppp_opts *p = opts;
- while (p)
+ int maxn_opts = sizeof(stropt) / sizeof(stropt[0]) - 1;
+ while (p && pos < maxn_opts)
{
stropt[pos] = strdup (p->option);
pos++;

net/xl2tpd/patches/204-start_pppd-place-opts-after-plugin-pppol2tp.so.patch → net/xl2tpd/patches/206-xl2tpd-start_pppd-place-opts-after-plugin-pppol2tp.s.patch View File


+ 0
- 21
net/xl2tpd/patches/207-l2tp_log-remove-log-prefix-that-will-duplicate-with-.patch View File

@ -1,21 +0,0 @@
From 44ced2bbf1d6b39bb36c3cb8be6e40c8764e2e8a Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Thu, 30 Apr 2015 13:57:36 +0800
Subject: [PATCH 7/7] l2tp_log: remove log prefix that will duplicate with
procd.
---
misc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/misc.c
+++ b/misc.c
@@ -61,7 +61,7 @@ void l2tp_log (int level, const char *fm
init_log();
SYSLOG_CALL( syslog (level, "%s", buf) );
} else {
- fprintf(stderr, "xl2tpd[%d]: %s", getpid(), buf);
+ fprintf(stderr, "%s", buf);
}
}

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

@ -0,0 +1,104 @@
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

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

@ -0,0 +1,26 @@
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

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

@ -0,0 +1,32 @@
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

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

@ -0,0 +1,119 @@
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

+ 0
- 12
net/xl2tpd/patches/250-xl2tpd-control-atexit-needs-stdlib.patch View File

@ -1,12 +0,0 @@
Index: xl2tpd-1.3.7pre20141126/xl2tpd-control.c
===================================================================
--- xl2tpd-1.3.7pre20141126.orig/xl2tpd-control.c
+++ xl2tpd-1.3.7pre20141126/xl2tpd-control.c
@@ -12,6 +12,7 @@
#define _GNU_SOURCE
+#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>

Loading…
Cancel
Save