From 6ec34720b0d2effe661c9dd4da2ef47a4e5030e3 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sat, 9 Jun 2018 15:43:20 +0100 Subject: [PATCH] noip.c (recvfrom, recvmsg): Don't swallow the underlying system error. Move the call to `real_recvfoo' outside of `PRESERVING_ERRNO'. --- noip.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/noip.c b/noip.c index 2d5e932..0063ee9 100644 --- a/noip.c +++ b/noip.c @@ -1812,14 +1812,14 @@ ssize_t recvfrom(int sk, void *buf, size_t len, int flags, D( fprintf(stderr, " -> null addr; pass through"); ) n = real_recvfrom(sk, buf, len, flags, 0, 0); } else { - PRESERVING_ERRNO({ - n = real_recvfrom(sk, buf, len, flags, SA(sabuf), &mylen); - if (n >= 0) { - D( fprintf(stderr, " -> converting...\n"); ) + n = real_recvfrom(sk, buf, len, flags, SA(sabuf), &mylen); + if (n >= 0) { + D( fprintf(stderr, " -> converting...\n"); ) + PRESERVING_ERRNO({ return_fake_peer(sk, SA(sabuf), mylen, from, fromlen); - D( fprintf(stderr, "noip(%d): ... RECVFROM", pid); ) - } - }); + }); + D( fprintf(stderr, "noip(%d): ... RECVFROM", pid); ) + } } D( dump_addrresult(n, from, fromlen ? *fromlen : 0); ) return (n); @@ -1874,18 +1874,18 @@ ssize_t recvmsg(int sk, struct msghdr *msg, int flags) D( fprintf(stderr, " -> null addr; pass through"); ) return (real_recvmsg(sk, msg, flags)); } else { - PRESERVING_ERRNO({ - msg->msg_name = sabuf; - msg->msg_namelen = sizeof(sabuf); - n = real_recvmsg(sk, msg, flags); - if (n >= 0) { - D( fprintf(stderr, " -> converting...\n"); ) + msg->msg_name = sabuf; + msg->msg_namelen = sizeof(sabuf); + n = real_recvmsg(sk, msg, flags); + if (n >= 0) { + D( fprintf(stderr, " -> converting...\n"); ) + PRESERVING_ERRNO({ return_fake_peer(sk, SA(sabuf), msg->msg_namelen, sa, &len); - D( fprintf(stderr, "noip(%d): ... RECVMSG", pid); ) - } - msg->msg_name = sa; - msg->msg_namelen = len; - }); + }); + } + D( fprintf(stderr, "noip(%d): ... RECVMSG", pid); ) + msg->msg_name = sa; + msg->msg_namelen = len; } D( dump_addrresult(n, sa, len); ) return (n); -- 2.11.0