summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorotto <otto@openbsd.org>2004-02-05 22:12:06 +0000
committerotto <otto@openbsd.org>2004-02-05 22:12:06 +0000
commitff2708d56ea714429dc114ca47d53380e4f12704 (patch)
treef70b8a7bd30b4558e94d7c44ae70f4eb1413c953
parentCorrect a reference counting bug in shmat(2); adapted from FreeBSD. (diff)
downloadwireguard-openbsd-ff2708d56ea714429dc114ca47d53380e4f12704.tar.xz
wireguard-openbsd-ff2708d56ea714429dc114ca47d53380e4f12704.zip
Don't print two confusing error messages, print a single clear one.
ok deraadt@ hshoexer@ avsm@
-rw-r--r--usr.sbin/tcpdump/privsep.c20
-rw-r--r--usr.sbin/tcpdump/privsep_pcap.c23
2 files changed, 30 insertions, 13 deletions
diff --git a/usr.sbin/tcpdump/privsep.c b/usr.sbin/tcpdump/privsep.c
index 866b4561936..fc0c6cdfc59 100644
--- a/usr.sbin/tcpdump/privsep.c
+++ b/usr.sbin/tcpdump/privsep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: privsep.c,v 1.3 2004/02/04 09:47:10 otto Exp $ */
+/* $OpenBSD: privsep.c,v 1.4 2004/02/05 22:12:06 otto Exp $ */
/*
* Copyright (c) 2003 Can Erkin Acar
@@ -275,7 +275,7 @@ priv_init(int argc, char **argv)
static void
parent_open_bpf(int fd, int *bpfd)
{
- int snaplen, promisc;
+ int snaplen, promisc, err;
char device[IFNAMSIZ];
size_t iflen;
@@ -287,18 +287,20 @@ parent_open_bpf(int fd, int *bpfd)
if (iflen == 0)
errx(1, "Invalid interface size specified");
*bpfd = pcap_live(device, snaplen, promisc);
+ err = errno;
if (*bpfd < 0)
- logmsg(LOG_NOTICE,
+ logmsg(LOG_DEBUG,
"[priv]: failed to open bpf device for %s: %s",
device, strerror(errno));
send_fd(fd, *bpfd);
+ must_write(fd, &err, sizeof(int));
/* do not close bpfd until filter is set */
}
static void
parent_open_dump(int fd, const char *RFileName)
{
- int file;
+ int file, err;
logmsg(LOG_DEBUG, "[priv]: msg PRIV_OPEN_DUMP received");
@@ -307,27 +309,31 @@ parent_open_dump(int fd, const char *RFileName)
logmsg(LOG_ERR, "[priv]: No offline file specified");
} else {
file = open(RFileName, O_RDONLY, 0);
+ err = errno;
if (file < 0)
- logmsg(LOG_NOTICE, "[priv]: failed to open %s: %s",
+ logmsg(LOG_DEBUG, "[priv]: failed to open %s: %s",
RFileName, strerror(errno));
}
send_fd(fd, file);
+ must_write(fd, &err, sizeof(int));
close(file);
}
static void
parent_open_output(int fd, const char *WFileName)
{
- int file;
+ int file, err;
logmsg(LOG_DEBUG, "[priv]: msg PRIV_OPEN_OUTPUT received");
file = open(WFileName, O_WRONLY|O_CREAT|O_TRUNC, 0666);
+ err = errno;
if (file < 0)
- logmsg(LOG_NOTICE, "[priv]: failed to open %s: %s",
+ logmsg(LOG_DEBUG, "[priv]: failed to open %s: %s",
WFileName, strerror(errno));
send_fd(fd, file);
+ must_write(fd, &err, sizeof(int));
close(file);
}
diff --git a/usr.sbin/tcpdump/privsep_pcap.c b/usr.sbin/tcpdump/privsep_pcap.c
index b051e781f7f..58f396b5032 100644
--- a/usr.sbin/tcpdump/privsep_pcap.c
+++ b/usr.sbin/tcpdump/privsep_pcap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: privsep_pcap.c,v 1.1 2004/01/28 19:44:55 canacar Exp $ */
+/* $OpenBSD: privsep_pcap.c,v 1.2 2004/02/05 22:12:06 otto Exp $ */
/*
* Copyright (c) 2004 Can Erkin Acar
@@ -223,7 +223,7 @@ pcap_live(const char *device, int snaplen, int promisc)
pcap_t *
priv_pcap_live(const char *dev, int slen, int prom, int to_ms, char *ebuf)
{
- int fd;
+ int fd, err;
struct bpf_version bv;
u_int v;
pcap_t *p;
@@ -249,9 +249,11 @@ priv_pcap_live(const char *dev, int slen, int prom, int to_ms, char *ebuf)
write_string(priv_fd, dev);
fd = receive_fd(priv_fd);
+ must_read(priv_fd, &err, sizeof(int));
if (fd < 0) {
snprintf(ebuf, PCAP_ERRBUF_SIZE,
- "Failed open bpf descriptor in privileged process.");
+ "Failed to open bpf device for %s: %s",
+ dev, strerror(err));
goto bad;
}
@@ -350,7 +352,7 @@ priv_pcap_offline(const char *fname, char *errbuf)
register pcap_t *p;
register FILE *fp;
struct pcap_file_header hdr;
- int linklen;
+ int linklen, err;
if (priv_fd < 0)
errx(1, "%s: called from privileged portion", __func__);
@@ -369,9 +371,11 @@ priv_pcap_offline(const char *fname, char *errbuf)
} else {
write_command(priv_fd, PRIV_OPEN_DUMP);
p->fd = receive_fd(priv_fd);
+ must_read(priv_fd, &err, sizeof(int));
if (p->fd < 0) {
snprintf(errbuf, PCAP_ERRBUF_SIZE,
- "Failed open input file in privileged process.");
+ "Failed to open input file %s: %s",
+ fname, strerror(err));
goto bad;
}
@@ -472,7 +476,7 @@ sf_write_header(FILE *fp, int linktype, int thiszone, int snaplen)
pcap_dumper_t *
priv_pcap_dump_open(pcap_t *p, char *fname)
{
- int fd;
+ int fd, err;
FILE *f;
if (priv_fd < 0)
@@ -483,6 +487,13 @@ priv_pcap_dump_open(pcap_t *p, char *fname)
else {
write_command(priv_fd, PRIV_OPEN_OUTPUT);
fd = receive_fd(priv_fd);
+ must_read(priv_fd, &err, sizeof(err));
+ if (fd < 0) {
+ snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
+ "Failed to open output file %s: %s",
+ fname, strerror(err));
+ return (NULL);
+ }
f = fdopen(fd, "w");
if (f == NULL) {
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "%s: %s",