diff --git a/net/xl2tpd/Makefile b/net/xl2tpd/Makefile index 6f9bce869..f46cec615 100644 --- a/net/xl2tpd/Makefile +++ b/net/xl2tpd/Makefile @@ -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 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 diff --git a/net/xl2tpd/patches/200-xl2tpd-control-check-end-of-file-when-reading-pipe-t.patch b/net/xl2tpd/patches/200-xl2tpd-control-check-end-of-file-when-reading-pipe-t.patch deleted file mode 100644 index 811f9affe..000000000 --- a/net/xl2tpd/patches/200-xl2tpd-control-check-end-of-file-when-reading-pipe-t.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 7973d45a0e1716ddc6bfb6caf600f826f59a7932 Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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 - diff --git a/net/xl2tpd/patches/201-xl2tpd-control-define-_GNU_SOURCE-to-use-fmemopen-an.patch b/net/xl2tpd/patches/201-xl2tpd-control-define-_GNU_SOURCE-to-use-fmemopen-an.patch deleted file mode 100644 index a4f704aa3..000000000 --- a/net/xl2tpd/patches/201-xl2tpd-control-define-_GNU_SOURCE-to-use-fmemopen-an.patch +++ /dev/null @@ -1,26 +0,0 @@ -From efa0a18b5dfd827792b07acdcb35101229ccf612 Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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 - #include - #include --- -1.7.10.4 - diff --git a/net/xl2tpd/patches/202-xl2tpd-control-open-control-file-with-O_NONBLOCK.patch b/net/xl2tpd/patches/202-xl2tpd-control-open-control-file-with-O_NONBLOCK.patch deleted file mode 100644 index 17721f278..000000000 --- a/net/xl2tpd/patches/202-xl2tpd-control-open-control-file-with-O_NONBLOCK.patch +++ /dev/null @@ -1,42 +0,0 @@ -From fedfd6685e5f81f0460beb4c448a30e7a6cfbd31 Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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 - diff --git a/net/xl2tpd/patches/203-xl2tpd-control-cleaup-result-file-atexit.patch b/net/xl2tpd/patches/203-xl2tpd-control-cleaup-result-file-atexit.patch deleted file mode 100644 index 66eee642f..000000000 --- a/net/xl2tpd/patches/203-xl2tpd-control-cleaup-result-file-atexit.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 07e522cd7e223517389582a8eb647a4a6a8a5cf8 Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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 - #include - #include - #include -@@ -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 - diff --git a/net/xl2tpd/patches/204-xl2tpd-control-enhance-output-of-print_error.patch b/net/xl2tpd/patches/204-xl2tpd-control-enhance-output-of-print_error.patch deleted file mode 100644 index 4e575078a..000000000 --- a/net/xl2tpd/patches/204-xl2tpd-control-enhance-output-of-print_error.patch +++ /dev/null @@ -1,58 +0,0 @@ -From f6eaaabb0b2fab12cf597b8c1d12d470a13e581f Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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 - diff --git a/net/xl2tpd/patches/205-xl2tpd-fix-typo-in-reporting-available-lns-count.patch b/net/xl2tpd/patches/205-xl2tpd-fix-typo-in-reporting-available-lns-count.patch deleted file mode 100644 index b25e82be4..000000000 --- a/net/xl2tpd/patches/205-xl2tpd-fix-typo-in-reporting-available-lns-count.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 1c148f6645f43bf5abd8a9b8f0708a598b357d97 Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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 - diff --git a/net/xl2tpd/patches/206-xl2tpd-start_pppd-place-opts-after-plugin-pppol2tp.s.patch b/net/xl2tpd/patches/206-xl2tpd-start_pppd-place-opts-after-plugin-pppol2tp.s.patch deleted file mode 100644 index 60d8b84db..000000000 --- a/net/xl2tpd/patches/206-xl2tpd-start_pppd-place-opts-after-plugin-pppol2tp.s.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 18fdf802d31354c62a27cc5a63b196780a0d486e Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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 - diff --git a/net/xl2tpd/patches/207-xl2tpd-introduce-new-option-l-for-using-syslog-as-th.patch b/net/xl2tpd/patches/207-xl2tpd-introduce-new-option-l-for-using-syslog-as-th.patch deleted file mode 100644 index 5ab94cb05..000000000 --- a/net/xl2tpd/patches/207-xl2tpd-introduce-new-option-l-for-using-syslog-as-th.patch +++ /dev/null @@ -1,104 +0,0 @@ -From b3402a68a4d29e9b1ae4e012e39a7bcb14fea3cf Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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 - 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 ] [-s ] [-p ]\n" -- " [-C ] [-D]\n" -+ " [-C ] [-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 - diff --git a/net/xl2tpd/patches/208-xl2tpd-unlink-result-file-to-prevent-leftover-a-regu.patch b/net/xl2tpd/patches/208-xl2tpd-unlink-result-file-to-prevent-leftover-a-regu.patch deleted file mode 100644 index 90694f228..000000000 --- a/net/xl2tpd/patches/208-xl2tpd-unlink-result-file-to-prevent-leftover-a-regu.patch +++ /dev/null @@ -1,26 +0,0 @@ -From a2b163a65a2d4fbca57c3aa82b526cf8fbc8e449 Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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 - diff --git a/net/xl2tpd/patches/209-xl2tpd-ignore-SIGPIPE-signal.patch b/net/xl2tpd/patches/209-xl2tpd-ignore-SIGPIPE-signal.patch deleted file mode 100644 index a0d88bd34..000000000 --- a/net/xl2tpd/patches/209-xl2tpd-ignore-SIGPIPE-signal.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 2d0eff7f56936823d784425d2171be295ba11027 Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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 - diff --git a/net/xl2tpd/patches/210-xl2tpd-control-show-all-available-commands-in-help.patch b/net/xl2tpd/patches/210-xl2tpd-control-show-all-available-commands-in-help.patch deleted file mode 100644 index 8eccffa58..000000000 --- a/net/xl2tpd/patches/210-xl2tpd-control-show-all-available-commands-in-help.patch +++ /dev/null @@ -1,119 +0,0 @@ -From 26b77b7cdc70beddc68507f74372a4e2815720f0 Mon Sep 17 00:00:00 2001 -From: Yousong Zhou -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= 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 ] []\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= 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 -