Skip site navigation (1)Skip section navigation (2)
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>