From owner-svn-src-projects@FreeBSD.ORG Mon Aug 23 17:03:07 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E74041065696; Mon, 23 Aug 2010 17:03:06 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D6A2E8FC12; Mon, 23 Aug 2010 17:03:06 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o7NH366P046905; Mon, 23 Aug 2010 17:03:06 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o7NH36GD046903; Mon, 23 Aug 2010 17:03:06 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201008231703.o7NH36GD046903@svn.freebsd.org> From: Attilio Rao Date: Mon, 23 Aug 2010 17:03:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r211708 - projects/sv/usr.sbin/netdumpsrv X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Aug 2010 17:03:07 -0000 Author: attilio Date: Mon Aug 23 17:03:06 2010 New Revision: 211708 URL: http://svn.freebsd.org/changeset/base/211708 Log: Add a -D flag that runs the tool in 'debugging mode', avoiding daemonization and having output on console instead. Modified: projects/sv/usr.sbin/netdumpsrv/netdump_server.c Modified: projects/sv/usr.sbin/netdumpsrv/netdump_server.c ============================================================================== --- projects/sv/usr.sbin/netdumpsrv/netdump_server.c Mon Aug 23 16:47:29 2010 (r211707) +++ projects/sv/usr.sbin/netdumpsrv/netdump_server.c Mon Aug 23 17:03:06 2010 (r211708) @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -54,16 +55,17 @@ #define PFLAGS_ABIND 0x01 #define PFLAGS_DDIR 0x02 -#define PFLAGS_SCRIPT 0x04 +#define PFLAGS_DEBUG 0x04 +#define PFLAGS_SCRIPT 0x08 #define LOGERR(m, ...) \ - syslog(LOG_ERR | LOG_DAEMON, (m), ## __VA_ARGS__) + (*phook)(LOG_ERR | LOG_DAEMON, (m), ## __VA_ARGS__) #define LOGERR_PERROR(m) \ - syslog(LOG_ERR | LOG_DAEMON, "%s: %s\n", m, strerror(errno)) + (*phook)(LOG_ERR | LOG_DAEMON, "%s: %s\n", m, strerror(errno)) #define LOGINFO(m, ...) \ - syslog(LOG_INFO | LOG_DAEMON, (m), ## __VA_ARGS__) + (*phook)(LOG_INFO | LOG_DAEMON, (m), ## __VA_ARGS__) #define LOGWARN(m, ...) \ - syslog(LOG_WARNING | LOG_DAEMON, (m), ## __VA_ARGS__) + (*phook)(LOG_WARNING | LOG_DAEMON, (m), ## __VA_ARGS__) #define client_ntoa(cl) \ inet_ntoa((cl)->ip) @@ -100,6 +102,9 @@ static time_t last_timeout_check; static int do_shutdown; static int sock; +/* Daemon print functions hook. */ +static void (*phook)(int, const char *, ...); + static struct netdump_client *alloc_client(struct sockaddr_in *sip); static void eventloop(void); static void exec_handler(struct netdump_client *client, @@ -118,6 +123,9 @@ static void handle_packet(struct netdu static void handle_timeout(struct netdump_client *client); static void handle_vmcore(struct netdump_client *client, struct netdump_msg *msg); +static void phook_printf(int priority __unused, + const char *message, ...); +static void phook_syslog(int priority, const char *message, ...); static int receive_message(int isock, struct sockaddr_in *from, char *fromstr, size_t fromstrlen, struct netdump_msg *msg); @@ -135,6 +143,24 @@ usage(const char *cmd) cmd); } +static void +phook_printf(int priority __unused, const char *message, ...) +{ + va_list ap; + + va_start(ap, message); + vprintf(message, ap); +} + +static void +phook_syslog(int priority, const char *message, ...) +{ + va_list ap; + + va_start(ap, message); + vsyslog(priority, message, ap); +} + static struct netdump_client * alloc_client(struct sockaddr_in *sip) { @@ -744,7 +770,7 @@ main(int argc, char **argv) exit(1); } - while ((ch = getopt(argc, argv, "a:d:i:")) != -1) { + while ((ch = getopt(argc, argv, "a:Dd:i:")) != -1) { switch (ch) { case 'a': pflags |= PFLAGS_ABIND; @@ -755,6 +781,9 @@ main(int argc, char **argv) } printf("Listening on IP %s\n", optarg); break; + case 'D': + pflags |= PFLAGS_DEBUG; + break; case 'd': pflags |= PFLAGS_DDIR; assert(dumpdir[0] == '\0'); @@ -798,6 +827,10 @@ main(int argc, char **argv) strcpy(dumpdir, "/var/crash"); printf("Default: dumping on /var/crash/\n"); } + if ((pflags & PFLAGS_DEBUG) == 0) + phook = phook_syslog; + else + phook = phook_printf; /* Further sanity checks on dump location. */ if (stat(dumpdir, &statbuf)) { @@ -817,7 +850,7 @@ main(int argc, char **argv) strerror(errno)); } - if (daemon(0, 0) == -1) { + if ((pflags & PFLAGS_DEBUG) == 0 && daemon(0, 0) == -1) { pidfile_remove(pfh); perror("daemon()"); fprintf(stderr, "Impossible to demonize the process\n");