Subject: bin/21265: rpcgen produces wrong code
To: None <gnats-bugs@gnats.netbsd.org>
From: None <NOS@Utel.no>
List: netbsd-bugs
Date: 04/22/2003 21:17:20
>Number:         21265
>Category:       bin
>Synopsis:       rpcgen produces wrong code
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Apr 22 21:18:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Nils O. Selåsdal
>Release:        1.6.1
>Organization:
>Environment:
NetBSD netbsd 1.6.1 NetBSD 1.6.1 (GENERIC) #0: Tue Apr  8 12:05:52 UTC 2003     autobuild@tgm.daemon.org:/autobuild/netbsd-1-6/i386/OBJ/autobuild/netbsd-1-6/src/sys/arch/i386/compile/GENERIC i386

>Description:
rpcgen seems to produce bad output for the server stub.
the server stub tries to call the function_version(..) but it should really
call function_version_svc(..). which in the headerfile generated from the .x file has the right prototype. function(..) is what the client is supposed to call.
>How-To-Repeat:
 
given a simple .x file like:
program H2VXWPROG
{
    version H2VXWVERS
    {
        int SENDSIGNAL(int)  = 1;
    } = 1;
} = 0x20406091;

  rpcgen   -h -o h2vxw.h h2vxw.x 
  the header file will tell that the signature for the server function should be:
  extern  int *sendsignal_1_svc(int *, struct svc_req *);

  rpcgen -m -o h2vxw_svc.c h2vxw.x
  for making the server stub will include "h2vxw.h"
  and do the following:
   case SENDSIGNAL:
                xdr_argument = xdr_int;
                xdr_result = xdr_int;
                local = (char *(*)())sendsignal_1;
  now, in the header file sendsignal_1 is declared as:
  extern  int *sendsignal_1(int *, CLIENT *);
  clearly wrong. it should call the
  extern  int *sendsignal_1_svc(int *, struct svc_req *);

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted: