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

