Date: Fri, 23 Mar 2001 12:31:36 -0800 (PST) From: Gordon Tetlow <gordont@bluemtn.net> To: Harti Brandt <brandt@fokus.gmd.de> Cc: <freebsd-hackers@FreeBSD.ORG> Subject: Re: Problems with new RPC Message-ID: <Pine.BSF.4.33.0103231228370.62665-100000@sdmail0.sd.bmarts.com> In-Reply-To: <Pine.BSF.4.33.0103231538350.583-100000@beagle.fokus.gmd.de>
next in thread | previous in thread | raw e-mail | index | archive | help
If you haven't, please please please, send-pr(1) this so the right people
get a look at this. Last thing we need is a broken ypbind (not that I use
it). More down below.
On Fri, 23 Mar 2001, Harti Brandt wrote:
> the recent update to RPC causes ypbind to break. The problem is, that
> /usr/src/usr.sbin/ypbind/yp_ping.c mirrors some code from the RPC library,
> including the internal structure used for the CLIENT structure. The
> version in libc uses a struct sockaddr_storage (128 bytes) whereas yp_ping
> has a struct sockaddr_in (something lesser). The libc version also
> includes a member just at the end of the structure (struct pollfd) that
> the ypbind version does not have.
> Because the XDR buffers are allocate directly behind struct CLIENT, this
> makes the pointers into the buffer wrong. This causes the ypbind child to
> dump core, which in turn causes the parent to create a new child, which
> dumps core, causing the parent to create a new child, which dumps core ...
>
> A simple fix (rather a workaround is):
>
> Index: yp_ping.c
> ===================================================================
> RCS file: /usr/ncvs/src/usr.sbin/ypbind/yp_ping.c,v
> retrieving revision 1.8
> diff -u -r1.8 yp_ping.c
> --- yp_ping.c 2001/03/19 12:50:12 1.8
> +++ yp_ping.c 2001/03/20 13:46:24
> @@ -93,6 +93,7 @@
> #include <rpcsvc/yp.h>
> #include <sys/socket.h>
> #include <sys/ioctl.h>
> +#include <sys/poll.h>
> #include <net/if.h>
> #include "yp_ping.h"
>
> @@ -126,7 +127,7 @@
> struct cu_data {
> int cu_sock;
> bool_t cu_closeit;
> - struct sockaddr_in cu_raddr;
> + struct sockaddr_storage cu_raddr;
> int cu_rlen;
> struct timeval cu_wait;
> struct timeval cu_total;
> @@ -136,6 +137,7 @@
> u_int cu_sendsz;
> char *cu_outbuf;
> u_int cu_recvsz;
> + struct pollfd cu_pollfd;
> char cu_inbuf[1];
> };
>
> Another problem which started at the day the RPC stuff was committed are
> error messages of the form
>
> yp_match: clnt_call: RPC: Program unavailable
>
> spit out from various programs, among them pine, tcpdump, tcptrace.
> How can I fix this (or at least find out, what's the problem)?
If I had to take a wild stab, if ypbind isn't working right, I suspect
that tcpdump is doing RPC lookups on traffic going by. The rest? ah who
knows.
-gordon
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.33.0103231228370.62665-100000>
