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>