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
              [EMAIL PROTECTED], [EMAIL PROTECTED]



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to