summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRainer Giedat <rainer@cvs.openbsd.org>2008-06-08 21:08:58 +0000
committerRainer Giedat <rainer@cvs.openbsd.org>2008-06-08 21:08:58 +0000
commit92c9e8a49cc4e796de7bcd524a64a3173cbe29e9 (patch)
tree7e3259ae97ba69bd5af641b6cfad26d1f94bfb13
parent21683dff667775a17c1fdc1aae7a320c12a1521f (diff)
Send debug output to syslog instead of a file when receiving SIGUSR1.
This is a preparation for dropping privileges. ok henning@, pyr@
-rw-r--r--usr.sbin/rtadvd/dump.c162
-rw-r--r--usr.sbin/rtadvd/dump.h4
-rw-r--r--usr.sbin/rtadvd/rtadvd.813
-rw-r--r--usr.sbin/rtadvd/rtadvd.c11
4 files changed, 92 insertions, 98 deletions
diff --git a/usr.sbin/rtadvd/dump.c b/usr.sbin/rtadvd/dump.c
index 2c06a58fa0c..b2f94bff7f8 100644
--- a/usr.sbin/rtadvd/dump.c
+++ b/usr.sbin/rtadvd/dump.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dump.c,v 1.8 2008/04/23 10:17:50 pyr Exp $ */
+/* $OpenBSD: dump.c,v 1.9 2008/06/08 21:08:57 rainer Exp $ */
/* $KAME: dump.c,v 1.27 2002/05/29 14:23:55 itojun Exp $ */
/*
@@ -47,6 +47,7 @@
#include <time.h>
#include <stdio.h>
#include <stdarg.h>
+#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
@@ -54,15 +55,12 @@
#include "rtadvd.h"
#include "timer.h"
#include "if.h"
-#include "dump.h"
#include "log.h"
-
-static FILE *fp;
+#include "dump.h"
extern struct ralist ralist;
static char *ether_str(struct sockaddr_dl *);
-static void if_dump(void);
static char *rtpref_str[] = {
"medium", /* 00 */
@@ -88,130 +86,132 @@ ether_str(sdl)
return(hbuf);
}
-static void
-if_dump()
+char*
+lifetime(int lt)
+{
+ char *str;
+
+ if (lt == ND6_INFINITE_LIFETIME)
+ asprintf(&str, "infinity");
+ else
+ asprintf(&str, "%ld", (long)lt);
+ return str;
+}
+
+void
+rtadvd_dump()
{
struct rainfo *rai;
struct prefix *pfx;
char prefixbuf[INET6_ADDRSTRLEN];
int first;
struct timeval now;
+ char *origin, *vltime, *pltime, *flags;
+ char *vltimexpire=NULL, *pltimexpire=NULL;
gettimeofday(&now, NULL); /* XXX: unused in most cases */
SLIST_FOREACH(rai, &ralist, entry) {
- fprintf(fp, "%s:\n", rai->ifname);
+ log_info("%s:", rai->ifname);
- fprintf(fp, " Status: %s\n",
- (iflist[rai->ifindex]->ifm_flags & IFF_UP) ? "UP" :
- "DOWN");
+ log_info(" Status: %s",
+ (iflist[rai->ifindex]->ifm_flags & IFF_UP) ? "UP" : "DOWN");
/* control information */
if (rai->lastsent.tv_sec) {
/* note that ctime() appends CR by itself */
- fprintf(fp, " Last RA sent: %s",
- ctime((time_t *)&rai->lastsent.tv_sec));
+ log_info(" Last RA sent: %s",
+ ctime((time_t *)&rai->lastsent.tv_sec));
+
}
if (rai->timer) {
- fprintf(fp, " Next RA will be sent: %s",
- ctime((time_t *)&rai->timer->tm.tv_sec));
+ log_info(" Next RA will be sent: %s",
+ ctime((time_t *)&rai->timer->tm.tv_sec));
+
}
else
- fprintf(fp, " RA timer is stopped");
- fprintf(fp, " waits: %d, initcount: %d\n",
+ log_info(" RA timer is stopped");
+ log_info(" waits: %d, initcount: %d",
+
rai->waiting, rai->initcounter);
/* statistics */
- fprintf(fp, " statistics: RA(out/in/inconsistent): "
- "%llu/%llu/%llu, ",
+ log_info(" statistics: RA(out/in/inconsistent): "
+ "%llu/%llu/%llu, RS(input): %llu",
(unsigned long long)rai->raoutput,
(unsigned long long)rai->rainput,
- (unsigned long long)rai->rainconsistent);
- fprintf(fp, "RS(input): %llu\n",
+ (unsigned long long)rai->rainconsistent,
(unsigned long long)rai->rsinput);
/* interface information */
if (rai->advlinkopt)
- fprintf(fp, " Link-layer address: %s\n",
+ log_info(" Link-layer address: %s",
ether_str(rai->sdl));
- fprintf(fp, " MTU: %d\n", rai->phymtu);
+ log_info(" MTU: %d", rai->phymtu);
/* Router configuration variables */
- fprintf(fp, " DefaultLifetime: %d, MaxAdvInterval: %d, "
- "MinAdvInterval: %d\n", rai->lifetime, rai->maxinterval,
- rai->mininterval);
- fprintf(fp, " Flags: %s%s%s, ",
+ log_info(" DefaultLifetime: %d, MaxAdvInterval: %d, "
+ "MinAdvInterval: %d"
+ "Flags: %s%s, Preference: %s, MTU: %d",
+ rai->lifetime, rai->maxinterval, rai->mininterval,
rai->managedflg ? "M" : "", rai->otherflg ? "O" : "",
- "");
- fprintf(fp, "Preference: %s, ",
- rtpref_str[(rai->rtpref >> 3) & 0xff]);
- fprintf(fp, "MTU: %d\n", rai->linkmtu);
- fprintf(fp, " ReachableTime: %d, RetransTimer: %d, "
- "CurHopLimit: %d\n", rai->reachabletime,
- rai->retranstimer, rai->hoplimit);
+ rtpref_str[(rai->rtpref >> 3) & 0xff], rai->linkmtu);
+ log_info(" ReachableTime: %d, RetransTimer: %d, "
+ "CurHopLimit: %d", rai->reachabletime,
+ rai->retranstimer, rai->hoplimit);
if (rai->clockskew)
- fprintf(fp, " Clock skew: %ldsec\n",
+ log_info(" Clock skew: %ldsec",
rai->clockskew);
first = 1;
TAILQ_FOREACH(pfx, &rai->prefixes, entry) {
if (first) {
- fprintf(fp, " Prefixes:\n");
+ log_info(" Prefixes:");
first = 0;
}
- fprintf(fp, " %s/%d(",
- inet_ntop(AF_INET6, &pfx->prefix, prefixbuf,
- sizeof(prefixbuf)), pfx->prefixlen);
switch (pfx->origin) {
case PREFIX_FROM_KERNEL:
- fprintf(fp, "KERNEL, ");
+ origin = "KERNEL";
break;
case PREFIX_FROM_CONFIG:
- fprintf(fp, "CONFIG, ");
+ origin = "CONFIG";
break;
case PREFIX_FROM_DYNAMIC:
- fprintf(fp, "DYNAMIC, ");
+ origin = "DYNAMIC";
break;
+ default:
+ origin = "";
}
- if (pfx->validlifetime == ND6_INFINITE_LIFETIME)
- fprintf(fp, "vltime: infinity");
- else
- fprintf(fp, "vltime: %ld",
- (long)pfx->validlifetime);
if (pfx->vltimeexpire != 0)
- fprintf(fp, "(decr,expire %ld), ", (long)
- pfx->vltimeexpire > now.tv_sec ?
- pfx->vltimeexpire - now.tv_sec : 0);
- else
- fprintf(fp, ", ");
- if (pfx->preflifetime == ND6_INFINITE_LIFETIME)
- fprintf(fp, "pltime: infinity");
- else
- fprintf(fp, "pltime: %ld",
- (long)pfx->preflifetime);
+ asprintf(&vltimexpire, "(decr,expire %ld)", (long)
+ pfx->vltimeexpire > now.tv_sec ?
+ pfx->vltimeexpire - now.tv_sec : 0);
if (pfx->pltimeexpire != 0)
- fprintf(fp, "(decr,expire %ld), ", (long)
- pfx->pltimeexpire > now.tv_sec ?
- pfx->pltimeexpire - now.tv_sec : 0);
- else
- fprintf(fp, ", ");
- fprintf(fp, "flags: %s%s%s",
- pfx->onlinkflg ? "L" : "",
- pfx->autoconfflg ? "A" : "",
- "");
- fprintf(fp, ")\n");
- }
- }
-}
+ asprintf(&pltimexpire, "(decr,expire %ld)", (long)
+ pfx->pltimeexpire > now.tv_sec ?
+ pfx->pltimeexpire - now.tv_sec : 0);
+
+ vltime = lifetime(pfx->validlifetime);
+ pltime = lifetime(pfx->preflifetime);
+ asprintf(&flags, "%s%s",
+ pfx->onlinkflg ? "L" : "",
+ pfx->autoconfflg ? "A" : "");
+ log_info(" %s/%d(%s, vltime: %s%s, "
+ "pltime: %s%s, flags: %s)",
+ inet_ntop(AF_INET6, &pfx->prefix, prefixbuf,
+ sizeof(prefixbuf)), pfx->prefixlen, origin,
+ vltime, (vltimexpire)? vltimexpire : "",
+ pltime, (pltimexpire)? pltimexpire : "", flags);
-void
-rtadvd_dump_file(dumpfile)
- char *dumpfile;
-{
- if ((fp = fopen(dumpfile, "w")) == NULL) {
- log_warn("open a dump file(%s)", dumpfile);
- return;
+ if (vltimexpire) {
+ free(vltimexpire);
+ vltimexpire = NULL;
+ }
+ if (pltimexpire) {
+ free(pltimexpire);
+ pltimexpire = NULL;
+ }
+ free(vltime);
+ free(pltime);
+ free(flags);
+ }
}
-
- if_dump();
-
- fclose(fp);
}
diff --git a/usr.sbin/rtadvd/dump.h b/usr.sbin/rtadvd/dump.h
index 41a31d93ed3..8a0e001c7dc 100644
--- a/usr.sbin/rtadvd/dump.h
+++ b/usr.sbin/rtadvd/dump.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: dump.h,v 1.2 2002/02/16 21:28:08 millert Exp $ */
+/* $OpenBSD: dump.h,v 1.3 2008/06/08 21:08:57 rainer Exp $ */
/* $KAME: dump.h,v 1.1 2000/05/23 11:31:26 itojun Exp $ */
/*
@@ -30,4 +30,4 @@
* SUCH DAMAGE.
*/
-extern void rtadvd_dump_file(char *);
+void rtadvd_dump();
diff --git a/usr.sbin/rtadvd/rtadvd.8 b/usr.sbin/rtadvd/rtadvd.8
index 0f3f1890866..e4b532e13cd 100644
--- a/usr.sbin/rtadvd/rtadvd.8
+++ b/usr.sbin/rtadvd/rtadvd.8
@@ -1,4 +1,4 @@
-.\" $OpenBSD: rtadvd.8,v 1.25 2008/04/22 05:04:07 jmc Exp $
+.\" $OpenBSD: rtadvd.8,v 1.26 2008/06/08 21:08:57 rainer Exp $
.\" $KAME: rtadvd.8,v 1.18 2002/04/28 10:43:02 jinmei Exp $
.\"
.\" Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -28,7 +28,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd $Mdocdate: April 22 2008 $
+.Dd $Mdocdate: June 8 2008 $
.Dt RTADVD 8
.Os
.Sh NAME
@@ -133,8 +133,7 @@ Only statically configured prefixes, if any, will be advertised.
Upon receipt of signal
.Dv SIGUSR1 ,
.Nm
-will dump the current internal state into
-.Pa /var/run/rtadvd.dump .
+will dump the current internal state into syslog.
.Pp
Use
.Dv SIGTERM
@@ -149,16 +148,12 @@ to all the interfaces
.Pp
.Ex -std rtadvd
.Sh FILES
-.Bl -tag -width "/var/run/rtadvd.dumpXX" -compact
+.Bl -tag -width "/var/run/rtadvd.pidXX" -compact
.It Pa /etc/rtadvd.conf
The default configuration file.
.It Pa /var/run/rtadvd.pid
Contains the PID of the currently running
.Nm .
-.It Pa /var/run/rtadvd.dump
-The file in which
-.Nm
-dumps its internal state.
.El
.Sh SEE ALSO
.Xr rtadvd.conf 5 ,
diff --git a/usr.sbin/rtadvd/rtadvd.c b/usr.sbin/rtadvd/rtadvd.c
index 74f8a5b646b..1e1f4829438 100644
--- a/usr.sbin/rtadvd/rtadvd.c
+++ b/usr.sbin/rtadvd/rtadvd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rtadvd.c,v 1.34 2008/05/02 04:28:51 pyr Exp $ */
+/* $OpenBSD: rtadvd.c,v 1.35 2008/06/08 21:08:57 rainer Exp $ */
/* $KAME: rtadvd.c,v 1.66 2002/05/29 14:18:36 itojun Exp $ */
/*
@@ -78,7 +78,6 @@ struct iovec sndiov[2];
struct sockaddr_in6 from;
struct sockaddr_in6 sin6_allnodes = {sizeof(sin6_allnodes), AF_INET6};
struct in6_addr in6a_site_allrouters;
-static char *dumpfilename = "/var/run/rtadvd.dump"; /* XXX: should be configurable */
static char *mcastif;
int sock;
int rtsock = -1;
@@ -142,7 +141,7 @@ static int nd6_options(struct nd_opt_hdr *, int,
static void free_ndopts(union nd_opts *);
static void ra_output(struct rainfo *);
static void rtmsg_input(void);
-static void rtadvd_set_dump_file(int);
+static void rtadvd_set_dump(int);
int
main(argc, argv)
@@ -243,14 +242,14 @@ main(argc, argv)
FD_SET(rtsock, fdsetp);
signal(SIGTERM, set_die);
- signal(SIGUSR1, rtadvd_set_dump_file);
+ signal(SIGUSR1, rtadvd_set_dump);
while (1) {
memcpy(selectfdp, fdsetp, fdmasks); /* reinitialize */
if (do_dump) { /* SIGUSR1 */
do_dump = 0;
- rtadvd_dump_file(dumpfilename);
+ rtadvd_dump();
}
if (do_die) {
@@ -287,7 +286,7 @@ main(argc, argv)
}
static void
-rtadvd_set_dump_file(int signo)
+rtadvd_set_dump(int signo)
{
do_dump = 1;
}