Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Mar 2001 15:45:24 +0100 (CET)
From:      Harti Brandt <brandt@fokus.gmd.de>
To:        <freebsd-hackers@freebsd.org>
Subject:   Problems with new RPC
Message-ID:  <Pine.BSF.4.33.0103231538350.583-100000@beagle.fokus.gmd.de>

next in thread | raw e-mail | index | archive | help

Hi,

I described the problem a couple of days on -current, but either I'm
doing something dumb or nobody is using ypbind -- I got no answer up to
now. So here is it again:

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)?

harti
-- 
harti brandt, http://www.fokus.gmd.de/research/cc/cats/employees/hartmut.brandt/private
              brandt@fokus.gmd.de, harti@begemot.org



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.0103231538350.583-100000>