diff options
author | 2004-02-05 22:12:06 +0000 | |
---|---|---|
committer | 2004-02-05 22:12:06 +0000 | |
commit | ff2708d56ea714429dc114ca47d53380e4f12704 (patch) | |
tree | f70b8a7bd30b4558e94d7c44ae70f4eb1413c953 | |
parent | Correct a reference counting bug in shmat(2); adapted from FreeBSD. (diff) | |
download | wireguard-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.c | 20 | ||||
-rw-r--r-- | usr.sbin/tcpdump/privsep_pcap.c | 23 |
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", |