From ab9f9a4a46e93259281d198a9fa9420886acd895 Mon Sep 17 00:00:00 2001 From: Ezra Peisach Date: Thu, 28 Jun 2001 20:46:58 +0000 Subject: * auth.h: Provide full prototype for xdr_des_block * auth_gssapi.h: Complete prototypes for _svcauth_gssapi_unset_names(). * clnt.h: Prototype dispatch functions and all functions. * clnt_perror.c: Prototype static auth_errmsg(). * clnt_raw.h clnt_tcp.c, clnt_udp.c: Provide prototypes to static functions and match dispatch table prototypes. control function takes void * instead of caddr_t. * pmap_rmt.c: Move prototype for resultproc_t to pmap_clnt.h. * rpc.h: get_myaddress returns int. Add prototypes for callrpc and getrpcport. * rpc_commondata.c (rpc_createerr): When initializing rpc_creaerr use RPC_SUCCESS instead of 0. * get_myaddress.c, rpc_dtablesize.c: Include gssrpc/rpc.h for prototype. * pmap_clnt.h, pmap_prot.h, pmap_rmt.h, rpc_msg.h: Full prototypes for all functions. * svc.c: Provide full prototype for static function. * svc.h: Prototypes for dispatch functions added. Flushed out prototypes for all functions missing prototypes. Added prototype for svcfd_create. * svc_auth.c: Prototypes for all functions referenced. * svc_auth.h: Prototype dispatch functions to svc_auth_ops. * svc_auth_any.c: Replace use of authany_wrap() with a new local function that matches svc_auth_ops dispatch table. * svc_simple.c: Provide prototype for static function universal. Fill in missing types of parameters to gssrpc_registerrpc. * svc_raw.c svc_tcp.c, svc_udp.c: Provide prototypes for static functions and match prototypes in dispatch table. Change getargs and freeargs argument to void * from caddr_t. * xdr.c (xdr_void): Function to match prototype of arguments given. * xdr.h: Provide full prototypes for xdr_ops dispatch table and xdr_void(). * svc_auth_gssapi.c, xdr_alloc.c, xdr_mem.c, xdr_rec.c, xdr_stdio.c: Provide protypes for static functions and match dispatch tables. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@13528 dc483132-0cff-0310-8789-dd5450dbe970 --- src/lib/rpc/ChangeLog | 59 +++++++++++++++++++++++++++++++ src/lib/rpc/auth.h | 2 +- src/lib/rpc/auth_gssapi.h | 2 +- src/lib/rpc/clnt.h | 58 +++++++++++++++++------------- src/lib/rpc/clnt_perror.c | 2 +- src/lib/rpc/clnt_raw.c | 41 ++++++++++++++-------- src/lib/rpc/clnt_tcp.c | 34 ++++++++++-------- src/lib/rpc/clnt_udp.c | 29 ++++++++------- src/lib/rpc/get_myaddress.c | 1 + src/lib/rpc/pmap_clnt.h | 23 ++++++++---- src/lib/rpc/pmap_prot.h | 4 +-- src/lib/rpc/pmap_rmt.c | 2 -- src/lib/rpc/pmap_rmt.h | 4 +-- src/lib/rpc/rpc.h | 9 ++++- src/lib/rpc/rpc_commondata.c | 2 +- src/lib/rpc/rpc_dtablesize.c | 1 + src/lib/rpc/rpc_msg.h | 17 ++++++--- src/lib/rpc/svc.c | 3 +- src/lib/rpc/svc.h | 82 +++++++++++++++++++++++++++++-------------- src/lib/rpc/svc_auth.c | 18 ++++++---- src/lib/rpc/svc_auth.h | 9 +++-- src/lib/rpc/svc_auth_any.c | 19 ++++++++-- src/lib/rpc/svc_auth_gssapi.c | 14 ++++---- src/lib/rpc/svc_raw.c | 22 ++++++------ src/lib/rpc/svc_simple.c | 3 +- src/lib/rpc/svc_tcp.c | 65 ++++++++++++++++++++++++---------- src/lib/rpc/svc_udp.c | 20 +++++------ src/lib/rpc/xdr.c | 6 ++-- src/lib/rpc/xdr.h | 37 +++++++++++++------ src/lib/rpc/xdr_alloc.c | 45 +++++++++++++++++------- src/lib/rpc/xdr_mem.c | 20 +++++------ src/lib/rpc/xdr_rec.c | 27 +++++++------- src/lib/rpc/xdr_stdio.c | 20 +++++------ 33 files changed, 469 insertions(+), 231 deletions(-) (limited to 'src') diff --git a/src/lib/rpc/ChangeLog b/src/lib/rpc/ChangeLog index 050630fd3a..6410072a66 100644 --- a/src/lib/rpc/ChangeLog +++ b/src/lib/rpc/ChangeLog @@ -1,3 +1,62 @@ +2001-06-28 Ezra Peisach + + * auth.h: Provide full prototype for xdr_des_block. + + * auth_gssapi.h: Complete prototypes for + _svcauth_gssapi_unset_names(). + + * clnt.h: Prototype dispatch functions and all functions. + + * clnt_perror.c: Prototype static auth_errmsg(). + + * clnt_raw.h clnt_tcp.c, clnt_udp.c: Provide prototypes to static + functions and match dispatch table prototypes. control function + takes void * instead of caddr_t. + + * pmap_rmt.c: Move prototype for resultproc_t to pmap_clnt.h. + + * rpc.h: get_myaddress returns int. Add prototypes for callrpc and + getrpcport. + + * rpc_commondata.c (rpc_createerr): When initializing rpc_creaerr + use RPC_SUCCESS instead of 0. + + * get_myaddress.c, rpc_dtablesize.c: Include gssrpc/rpc.h for + prototype. + + * pmap_clnt.h, pmap_prot.h, pmap_rmt.h, rpc_msg.h: Full prototypes + for all functions. + + * svc.c: Provide full prototype for static function. + + * svc.h: Prototypes for dispatch functions added. Flushed out + prototypes for all functions missing prototypes. Added prototype + for svcfd_create. + + * svc_auth.c: Prototypes for all functions referenced. + + * svc_auth.h: Prototype dispatch functions to svc_auth_ops. + + * svc_auth_any.c: Replace use of authany_wrap() with a new local + function that matches svc_auth_ops dispatch table. + + * svc_simple.c: Provide prototype for static function + universal. Fill in missing types of parameters to + gssrpc_registerrpc. + + * svc_raw.c svc_tcp.c, svc_udp.c: Provide prototypes for static + functions and match prototypes in dispatch table. Change getargs + and freeargs argument to void * from caddr_t. + + * xdr.c (xdr_void): Function to match prototype of arguments given. + + * xdr.h: Provide full prototypes for xdr_ops dispatch table and + xdr_void(). + + * svc_auth_gssapi.c, xdr_alloc.c, xdr_mem.c, xdr_rec.c, + xdr_stdio.c: Provide protypes for static functions and match + dispatch tables. + 2001-06-27 Ezra Peisach * bindresvport.c: Include gssrpc/rpc.h for prototype. diff --git a/src/lib/rpc/auth.h b/src/lib/rpc/auth.h index e47a3881e5..8c2bb58afe 100644 --- a/src/lib/rpc/auth.h +++ b/src/lib/rpc/auth.h @@ -75,7 +75,7 @@ union des_block { }; typedef union des_block des_block; #define xdr_des_block gssrpc_xdr_des_block -extern bool_t xdr_des_block(); +extern bool_t xdr_des_block(XDR *, des_block *); /* * Authentication info. Opaque to client. diff --git a/src/lib/rpc/auth_gssapi.h b/src/lib/rpc/auth_gssapi.h index bd6ea173c6..7f4aae5f87 100644 --- a/src/lib/rpc/auth_gssapi.h +++ b/src/lib/rpc/auth_gssapi.h @@ -122,7 +122,7 @@ PROTOTYPE((gss_ctx_id_t context, gss_buffer_t in_buf, rpc_u_int32 *seq_num)); bool_t _svcauth_gssapi_set_names PROTOTYPE((auth_gssapi_name *names, int num)); void _svcauth_gssapi_unset_names -PROTOTYPE(()); +PROTOTYPE((void)); void _svcauth_gssapi_set_log_badauth_func PROTOTYPE((auth_gssapi_log_badauth_func func, diff --git a/src/lib/rpc/clnt.h b/src/lib/rpc/clnt.h index f308dd9996..ccdbe1c222 100644 --- a/src/lib/rpc/clnt.h +++ b/src/lib/rpc/clnt.h @@ -110,15 +110,27 @@ struct rpc_err { * Created by individual implementations, see e.g. rpc_udp.c. * Client is responsible for initializing auth, see e.g. auth_none.c. */ -typedef struct { +typedef struct __rpc_client { AUTH *cl_auth; /* authenticator */ struct clnt_ops { - enum clnt_stat (*cl_call)(); /* call remote procedure */ - void (*cl_abort)(); /* abort a call */ - void (*cl_geterr)(); /* get specific error code */ - bool_t (*cl_freeres)(); /* frees results */ - void (*cl_destroy)();/* destroy this structure */ - bool_t (*cl_control)();/* the ioctl() of rpc */ + /* call remote procedure */ + enum clnt_stat (*cl_call)(struct __rpc_client *, + rpc_u_int32, xdrproc_t, void *, + xdrproc_t, void *, + struct timeval); + /* abort a call */ + void (*cl_abort)(struct __rpc_client *); + /* get specific error code */ + void (*cl_geterr)(struct __rpc_client *, + struct rpc_err *); + /* frees results */ + bool_t (*cl_freeres)(struct __rpc_client *, + xdrproc_t, void *); + /* destroy this structure */ + void (*cl_destroy)(struct __rpc_client *); + /* the ioctl() of rpc */ + bool_t (*cl_control)(struct __rpc_client *, int, + void *); } *cl_ops; caddr_t cl_private; /* private stuff */ } CLIENT; @@ -240,7 +252,7 @@ typedef struct { * rpc_u_int32 vers; */ #define clntraw_create gssrpc_clntraw_create -extern CLIENT *clntraw_create(); +extern CLIENT *clntraw_create(rpc_u_int32, rpc_u_int32); /* @@ -248,13 +260,7 @@ extern CLIENT *clntraw_create(); */ #define clnt_create gssrpc_clnt_create extern CLIENT * -clnt_create(/*host, prog, vers, prot*/); /* - char *host; -- hostname - rpc_u_int32 prog; -- program number - rpc_u_int32 vers; -- version number - char *prot; -- protocol -*/ - +clnt_create(char *, rpc_u_int32, rpc_u_int32, char *); @@ -270,7 +276,8 @@ clnt_create(/*host, prog, vers, prot*/); /* * unsigned int recvsz; */ #define clnttcp_create gssrpc_clnttcp_create -extern CLIENT *clnttcp_create(); +extern CLIENT *clnttcp_create(struct sockaddr_in *, rpc_u_int32, rpc_u_int32, + int *, unsigned int, unsigned int); /* * UDP based rpc. @@ -295,8 +302,11 @@ extern CLIENT *clnttcp_create(); */ #define clntudp_create gssrpc_clntudp_create #define clntudp_bufcreate gssrpc_clntudp_bufcreate -extern CLIENT *clntudp_create(); -extern CLIENT *clntudp_bufcreate(); +extern CLIENT *clntudp_create(struct sockaddr_in *, rpc_u_int32, + rpc_u_int32, struct timeval, int *); +extern CLIENT *clntudp_bufcreate(struct sockaddr_in *, rpc_u_int32, + rpc_u_int32, struct timeval, int *, + unsigned int, unsigned int); #define _rpc_dtablesize _gssrpc_rpc_dtablesize extern int _rpc_dtablesize(void); @@ -305,22 +315,22 @@ extern int _rpc_dtablesize(void); */ #define clnt_pcreateerror gssrpc_clnt_pcreateerror #define clnt_spcreateerror gssrpc_clnt_spcreateerror -void clnt_pcreateerror(/* char *msg */); /* stderr */ -char *clnt_spcreateerror(/* char *msg */); /* string */ +void clnt_pcreateerror(char *); /* stderr */ +char *clnt_spcreateerror(char *); /* string */ /* * Like clnt_perror(), but is more verbose in its output */ #define clnt_perrno gssrpc_clnt_perrno -void clnt_perrno(/* enum clnt_stat num */); /* stderr */ +void clnt_perrno(enum clnt_stat num); /* stderr */ /* * Print an English error message, given the client error code */ #define clnt_perror gssrpc_clnt_perror #define clnt_sperror gssrpc_clnt_sperror -void clnt_perror(/* CLIENT *clnt, char *msg */); /* stderr */ -char *clnt_sperror(/* CLIENT *clnt, char *msg */); /* string */ +void clnt_perror(CLIENT *, char *); /* stderr */ +char *clnt_sperror(CLIENT *, char *); /* string */ /* * If a creation fails, the following allows the user to figure out why. @@ -339,7 +349,7 @@ extern struct rpc_createerr rpc_createerr; * Copy error message to buffer. */ #define clnt_sperrno gssrpc_clnt_sperrno -char *clnt_sperrno(/* enum clnt_stat num */); /* string */ +char *clnt_sperrno(enum clnt_stat num); /* string */ #define UDPMSGSIZE 8800 /* rpc imposed limit on udp msg size */ #define RPCSMALLMSGSIZE 400 /* a more reasonable packet size */ diff --git a/src/lib/rpc/clnt_perror.c b/src/lib/rpc/clnt_perror.c index 50168dff44..08e8471b1e 100644 --- a/src/lib/rpc/clnt_perror.c +++ b/src/lib/rpc/clnt_perror.c @@ -53,7 +53,7 @@ extern int sys_nerr; #undef strerror #define strerror(N) (((N) > 0 && (N) < sys_nerr) ? sys_errlist[N] : (char *)0) #endif /* HAVE_STRERROR */ -static char *auth_errmsg(); +static char *auth_errmsg(enum auth_stat); diff --git a/src/lib/rpc/clnt_raw.c b/src/lib/rpc/clnt_raw.c index 44fbf5da2a..464142a44d 100644 --- a/src/lib/rpc/clnt_raw.c +++ b/src/lib/rpc/clnt_raw.c @@ -57,12 +57,14 @@ static struct clntraw_private { unsigned int mcnt; } *clntraw_private; -static enum clnt_stat clntraw_call(); -static void clntraw_abort(); -static void clntraw_geterr(); -static bool_t clntraw_freeres(); -static bool_t clntraw_control(); -static void clntraw_destroy(); +static enum clnt_stat clntraw_call(CLIENT *, rpc_u_int32, xdrproc_t, + void *, xdrproc_t, void *, + struct timeval); +static void clntraw_abort(CLIENT *); +static void clntraw_geterr(CLIENT *, struct rpc_err *); +static bool_t clntraw_freeres(CLIENT *, xdrproc_t, void *); +static bool_t clntraw_control(CLIENT *, int, void *); +static void clntraw_destroy(CLIENT *); static struct clnt_ops client_ops = { clntraw_call, @@ -126,9 +128,9 @@ clntraw_call(h, proc, xargs, argsp, xresults, resultsp, timeout) CLIENT *h; rpc_u_int32 proc; xdrproc_t xargs; - caddr_t argsp; + void * argsp; xdrproc_t xresults; - caddr_t resultsp; + void * resultsp; struct timeval timeout; { register struct clntraw_private *clp = clntraw_private; @@ -180,7 +182,7 @@ call_again: * specifies a receive buffer size that is too small.) * This memory must be free()ed to avoid a leak. */ - int op = xdrs->x_op; + enum xdr_op op = xdrs->x_op; xdrs->x_op = XDR_FREE; xdr_replymsg(xdrs, &msg); xdrs->x_op = op; @@ -212,8 +214,11 @@ call_again: return (status); } +/*ARGSUSED*/ static void -clntraw_geterr() +clntraw_geterr(cl, err) + CLIENT *cl; + struct rpc_err *err; { } @@ -222,7 +227,7 @@ static bool_t clntraw_freeres(cl, xdr_res, res_ptr) CLIENT *cl; xdrproc_t xdr_res; - caddr_t res_ptr; + void *res_ptr; { register struct clntraw_private *clp = clntraw_private; register XDR *xdrs = &clp->xdr_stream; @@ -237,18 +242,26 @@ clntraw_freeres(cl, xdr_res, res_ptr) return ((*xdr_res)(xdrs, res_ptr)); } +/*ARGSUSED*/ static void -clntraw_abort() +clntraw_abort(cl) + CLIENT *cl; { } +/*ARGSUSED*/ static bool_t -clntraw_control() +clntraw_control(cl, request, info) + CLIENT *cl; + int request; + void *info; { return (FALSE); } +/*ARGSUSED*/ static void -clntraw_destroy() +clntraw_destroy(cl) + CLIENT *cl; { } diff --git a/src/lib/rpc/clnt_tcp.c b/src/lib/rpc/clnt_tcp.c index 6f81ea1367..c89950b432 100644 --- a/src/lib/rpc/clnt_tcp.c +++ b/src/lib/rpc/clnt_tcp.c @@ -62,15 +62,13 @@ static char sccsid[] = "@(#)clnt_tcp.c 1.37 87/10/05 Copyr 1984 Sun Micro"; extern int errno; -static int readtcp(); -static int writetcp(); - -static enum clnt_stat clnttcp_call(); -static void clnttcp_abort(); -static void clnttcp_geterr(); -static bool_t clnttcp_freeres(); -static bool_t clnttcp_control(); -static void clnttcp_destroy(); +static enum clnt_stat clnttcp_call(CLIENT *, rpc_u_int32, xdrproc_t, void *, + xdrproc_t, void *, struct timeval); +static void clnttcp_abort(CLIENT *); +static void clnttcp_geterr(CLIENT *, struct rpc_err *); +static bool_t clnttcp_freeres(CLIENT *, xdrproc_t, void *); +static bool_t clnttcp_control(CLIENT *, int, void *); +static void clnttcp_destroy(CLIENT *); static struct clnt_ops tcp_ops = { clnttcp_call, @@ -93,6 +91,10 @@ struct ct_data { XDR ct_xdrs; }; +static int readtcp(struct ct_data *, caddr_t, int); +static int writetcp(struct ct_data *, caddr_t, int); + + /* * Create a client handle for a tcp/ip connection. * If *sockp<0, *sockp is set to a newly created TCP socket and it is @@ -225,9 +227,9 @@ clnttcp_call(h, proc, xdr_args, args_ptr, xdr_results, results_ptr, timeout) register CLIENT *h; rpc_u_int32 proc; xdrproc_t xdr_args; - caddr_t args_ptr; + void * args_ptr; xdrproc_t xdr_results; - caddr_t results_ptr; + void * results_ptr; struct timeval timeout; { register struct ct_data *ct = (struct ct_data *) h->cl_private; @@ -289,7 +291,7 @@ call_again: * to avoid leaks, since it may allocate * memory from partially successful decodes. */ - int op = xdrs->x_op; + enum xdr_op op = xdrs->x_op; xdrs->x_op = XDR_FREE; xdr_replymsg(xdrs, &reply_msg); xdrs->x_op = op; @@ -344,7 +346,7 @@ static bool_t clnttcp_freeres(cl, xdr_res, res_ptr) CLIENT *cl; xdrproc_t xdr_res; - caddr_t res_ptr; + void * res_ptr; { register struct ct_data *ct = (struct ct_data *)cl->cl_private; register XDR *xdrs = &(ct->ct_xdrs); @@ -353,8 +355,10 @@ clnttcp_freeres(cl, xdr_res, res_ptr) return ((*xdr_res)(xdrs, res_ptr)); } +/*ARGSUSED*/ static void -clnttcp_abort() +clnttcp_abort(cl) + CLIENT *cl; { } @@ -362,7 +366,7 @@ static bool_t clnttcp_control(cl, request, info) CLIENT *cl; int request; - char *info; + void *info; { register struct ct_data *ct = (struct ct_data *)cl->cl_private; int len; diff --git a/src/lib/rpc/clnt_udp.c b/src/lib/rpc/clnt_udp.c index 7a8b03c140..12a3aca0cf 100644 --- a/src/lib/rpc/clnt_udp.c +++ b/src/lib/rpc/clnt_udp.c @@ -54,12 +54,13 @@ extern int errno; /* * UDP bases client side rpc operations */ -static enum clnt_stat clntudp_call(); -static void clntudp_abort(); -static void clntudp_geterr(); -static bool_t clntudp_freeres(); -static bool_t clntudp_control(); -static void clntudp_destroy(); +static enum clnt_stat clntudp_call(CLIENT *, rpc_u_int32, xdrproc_t, void *, + xdrproc_t, void *, struct timeval); +static void clntudp_abort(CLIENT *); +static void clntudp_geterr(CLIENT *, struct rpc_err *); +static bool_t clntudp_freeres(CLIENT *, xdrproc_t, void *); +static bool_t clntudp_control(CLIENT *, int, void *); +static void clntudp_destroy(CLIENT *); static struct clnt_ops udp_ops = { clntudp_call, @@ -221,9 +222,9 @@ clntudp_call(cl, proc, xargs, argsp, xresults, resultsp, utimeout) register CLIENT *cl; /* client handle */ rpc_u_int32 proc; /* procedure number */ xdrproc_t xargs; /* xdr routine for args */ - caddr_t argsp; /* pointer to args */ + void * argsp; /* pointer to args */ xdrproc_t xresults; /* xdr routine for results */ - caddr_t resultsp; /* pointer to results */ + void * resultsp; /* pointer to results */ struct timeval utimeout; /* seconds to wait before giving up */ { register struct cu_data *cu = (struct cu_data *)cl->cl_private; @@ -390,7 +391,7 @@ send_again: * specifies a receive buffer size that is too small.) * This memory must be free()ed to avoid a leak. */ - int op = reply_xdrs.x_op; + enum xdr_op op = reply_xdrs.x_op; reply_xdrs.x_op = XDR_FREE; xdr_replymsg(&reply_xdrs, &reply_msg); reply_xdrs.x_op = op; @@ -415,7 +416,7 @@ static bool_t clntudp_freeres(cl, xdr_res, res_ptr) CLIENT *cl; xdrproc_t xdr_res; - caddr_t res_ptr; + void *res_ptr; { register struct cu_data *cu = (struct cu_data *)cl->cl_private; register XDR *xdrs = &(cu->cu_outxdrs); @@ -424,9 +425,11 @@ clntudp_freeres(cl, xdr_res, res_ptr) return ((*xdr_res)(xdrs, res_ptr)); } + +/*ARGSUSED*/ static void -clntudp_abort(/*h*/) - /*CLIENT *h;*/ +clntudp_abort(h) + CLIENT *h; { } @@ -434,7 +437,7 @@ static bool_t clntudp_control(cl, request, info) CLIENT *cl; int request; - char *info; + void *info; { register struct cu_data *cu = (struct cu_data *)cl->cl_private; diff --git a/src/lib/rpc/get_myaddress.c b/src/lib/rpc/get_myaddress.c index 9f79cda1b7..f5bf2bdabf 100644 --- a/src/lib/rpc/get_myaddress.c +++ b/src/lib/rpc/get_myaddress.c @@ -41,6 +41,7 @@ static char sccsid[] = "@(#)get_myaddress.c 1.4 87/08/11 Copyr 1984 Sun Micro"; #ifdef GSSAPI_KRB5 #include #include +#include #include #include #include diff --git a/src/lib/rpc/pmap_clnt.h b/src/lib/rpc/pmap_clnt.h index 4b3ba02a22..d4623c499d 100644 --- a/src/lib/rpc/pmap_clnt.h +++ b/src/lib/rpc/pmap_clnt.h @@ -64,9 +64,20 @@ #define clnt_broadcast gssrpc_clnt_broadcast #define pmap_getport gssrpc_pmap_getport -extern bool_t pmap_set(); -extern bool_t pmap_unset(); -extern struct pmaplist *pmap_getmaps(); -enum clnt_stat pmap_rmtcall(); -enum clnt_stat clnt_broadcast(); -extern unsigned short pmap_getport(); +extern bool_t pmap_set(rpc_u_int32, rpc_u_int32, int, + unsigned short); +extern bool_t pmap_unset(rpc_u_int32, rpc_u_int32); +extern struct pmaplist *pmap_getmaps(struct sockaddr_in *); +enum clnt_stat pmap_rmtcall(struct sockaddr_in *, rpc_u_int32, + rpc_u_int32, rpc_u_int32, xdrproc_t, + caddr_t, xdrproc_t, caddr_t, + struct timeval, rpc_u_int32 *); + +typedef bool_t (*resultproc_t)(caddr_t, struct sockaddr_in *); + +enum clnt_stat clnt_broadcast(rpc_u_int32, rpc_u_int32, rpc_u_int32, + xdrproc_t, caddr_t, xdrproc_t, + caddr_t, resultproc_t); +extern unsigned short pmap_getport(struct sockaddr_in *, + rpc_u_int32, + rpc_u_int32, unsigned int); diff --git a/src/lib/rpc/pmap_prot.h b/src/lib/rpc/pmap_prot.h index 935fa45a1a..24f45274bb 100644 --- a/src/lib/rpc/pmap_prot.h +++ b/src/lib/rpc/pmap_prot.h @@ -85,7 +85,7 @@ struct pmap { }; #define xdr_pmap gssrpc_xdr_pmap -extern bool_t xdr_pmap(); +extern bool_t xdr_pmap(XDR *, struct pmap *); struct pmaplist { struct pmap pml_map; @@ -93,4 +93,4 @@ struct pmaplist { }; #define xdr_pmaplist gssrpc_xdr_pmaplist -extern bool_t xdr_pmaplist(); +extern bool_t xdr_pmaplist(XDR *, struct pmaplist **); diff --git a/src/lib/rpc/pmap_rmt.c b/src/lib/rpc/pmap_rmt.c index 401fd80b6e..d1c565d295 100644 --- a/src/lib/rpc/pmap_rmt.c +++ b/src/lib/rpc/pmap_rmt.c @@ -222,8 +222,6 @@ getbroadcastnets(addrs, sock, buf) return (i); } -typedef bool_t (*resultproc_t)(); - enum clnt_stat clnt_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult) rpc_u_int32 prog; /* program number */ diff --git a/src/lib/rpc/pmap_rmt.h b/src/lib/rpc/pmap_rmt.h index f43f618cd5..0771a74407 100644 --- a/src/lib/rpc/pmap_rmt.h +++ b/src/lib/rpc/pmap_rmt.h @@ -42,7 +42,7 @@ struct rmtcallargs { }; #define xdr_rmtcall_args gssrpc_xdr_rmtcall_args -bool_t xdr_rmtcall_args(); +bool_t xdr_rmtcall_args(XDR *, struct rmtcallargs *); struct rmtcallres { rpc_u_int32 *port_ptr; @@ -52,4 +52,4 @@ struct rmtcallres { }; #define xdr_rmtcallres gssrpc_xdr_rmtcallres -bool_t xdr_rmtcallres(); +bool_t xdr_rmtcallres(XDR *, struct rmtcallres *); diff --git a/src/lib/rpc/rpc.h b/src/lib/rpc/rpc.h index bd12dcf01c..917001537a 100644 --- a/src/lib/rpc/rpc.h +++ b/src/lib/rpc/rpc.h @@ -85,9 +85,16 @@ * name service library functions */ #define get_myaddress gssrpc_get_myaddress -extern void get_myaddress (struct sockaddr_in *); +extern int get_myaddress (struct sockaddr_in *); #define bindresvport gssrpc_bindresvport extern int bindresvport(int, struct sockaddr_in *); +#define callrpc gssrpc_callrpc +extern int callrpc (char *, int, int, int, xdrproc_t, char *, + xdrproc_t , char *); + +#define getrpcport gssrpc_getrpcport +extern int getrpcport (char *, int, int, int); + #endif /* ndef __RPC_HEADER__ */ diff --git a/src/lib/rpc/rpc_commondata.c b/src/lib/rpc/rpc_commondata.c index 9391f51938..8c27774e21 100644 --- a/src/lib/rpc/rpc_commondata.c +++ b/src/lib/rpc/rpc_commondata.c @@ -41,4 +41,4 @@ fd_set svc_fdset = {0}; #else int svc_fds = 0; #endif /* def FD_SETSIZE */ -struct rpc_createerr rpc_createerr = {0}; +struct rpc_createerr rpc_createerr = {RPC_SUCCESS}; diff --git a/src/lib/rpc/rpc_dtablesize.c b/src/lib/rpc/rpc_dtablesize.c index c26f87b96b..0a00bfe038 100644 --- a/src/lib/rpc/rpc_dtablesize.c +++ b/src/lib/rpc/rpc_dtablesize.c @@ -32,6 +32,7 @@ static char sccsid[] = "@(#)rpc_dtablesize.c 1.2 87/08/11 Copyr 1987 Sun Micro"; #endif #include +#include /* * Cache the result of getdtablesize(), so we don't have to do an diff --git a/src/lib/rpc/rpc_msg.h b/src/lib/rpc/rpc_msg.h index 08ca63a31b..37632848f4 100644 --- a/src/lib/rpc/rpc_msg.h +++ b/src/lib/rpc/rpc_msg.h @@ -161,7 +161,7 @@ struct rpc_msg { * struct rpc_msg *cmsg; */ #define xdr_callmsg gssrpc_xdr_callmsg -extern bool_t xdr_callmsg(); +extern bool_t xdr_callmsg(XDR *, struct rpc_msg *); /* * XDR routine to pre-serialize the static part of a rpc message. @@ -170,7 +170,7 @@ extern bool_t xdr_callmsg(); * struct rpc_msg *cmsg; */ #define xdr_callhdr gssrpc_xdr_callhdr -extern bool_t xdr_callhdr(); +extern bool_t xdr_callhdr(XDR *, struct rpc_msg *); /* * XDR routine to handle a rpc reply. @@ -179,7 +179,7 @@ extern bool_t xdr_callhdr(); * struct rpc_msg *rmsg; */ #define xdr_replymsg gssrpc_xdr_replymsg -extern bool_t xdr_replymsg(); +extern bool_t xdr_replymsg(XDR *, struct rpc_msg *); /* * Fills in the error part of a reply message. @@ -189,4 +189,13 @@ extern bool_t xdr_replymsg(); */ #define _seterr_reply _gssrpc_seterr_reply #define sunrpc_seterr_reply _seterr_reply -extern void _seterr_reply(); +extern void _seterr_reply(struct rpc_msg *, struct rpc_err *); + +/* XDR the MSG_ACCEPTED part of a reply message union */ +#define xdr_accepted_reply gssrpc_xdr_accepted_reply +extern bool_t xdr_accepted_reply(XDR *, struct accepted_reply *); + +/* XDR the MSG_DENIED part of a reply message union */ +#define xdr_rejected_reply gssrpc_xdr_rejected_reply +extern bool_t xdr_rejected_reply(XDR *, struct rejected_reply *); + diff --git a/src/lib/rpc/svc.c b/src/lib/rpc/svc.c index 3118df241c..573ea887ce 100644 --- a/src/lib/rpc/svc.c +++ b/src/lib/rpc/svc.c @@ -73,7 +73,8 @@ static struct svc_callout { void (*sc_dispatch)(); } *svc_head; -static struct svc_callout *svc_find(); +static struct svc_callout *svc_find(rpc_u_int32, rpc_u_int32, + struct svc_callout **); /* *************** SVCXPRT related stuff **************** */ diff --git a/src/lib/rpc/svc.h b/src/lib/rpc/svc.h index 7472d2d7e8..189edf32ac 100644 --- a/src/lib/rpc/svc.h +++ b/src/lib/rpc/svc.h @@ -68,16 +68,25 @@ enum xprt_stat { /* * Server side transport handle */ -typedef struct { +typedef struct __rpc_svcxprt { int xp_sock; unsigned short xp_port; /* associated port number */ struct xp_ops { - bool_t (*xp_recv)(); /* receive incomming requests */ - enum xprt_stat (*xp_stat)(); /* get transport status */ - bool_t (*xp_getargs)(); /* get arguments */ - bool_t (*xp_reply)(); /* send reply */ - bool_t (*xp_freeargs)();/* free mem allocated for args */ - void (*xp_destroy)(); /* destroy this struct */ + /* receive incomming requests */ + bool_t (*xp_recv)(struct __rpc_svcxprt *, struct rpc_msg *); + /* get transport status */ + enum xprt_stat (*xp_stat)(struct __rpc_svcxprt *); + /* get arguments */ + bool_t (*xp_getargs)(struct __rpc_svcxprt *, xdrproc_t, + void *); + /* send reply */ + bool_t (*xp_reply)(struct __rpc_svcxprt *, + struct rpc_msg *); + /* free mem allocated for args */ + bool_t (*xp_freeargs)(struct __rpc_svcxprt *, xdrproc_t, + void *); + /* destroy this struct */ + void (*xp_destroy)(struct __rpc_svcxprt *); } *xp_ops; int xp_addrlen; /* length of remote address */ struct sockaddr_in xp_raddr; /* remote address */ @@ -173,9 +182,18 @@ struct svc_req { * rpc_u_int32 vers; * void (*dispatch)(); * int protocol; like TCP or UDP, zero means do not register + * + * registerrpc(prog, vers, proc, routine, inproc, outproc) + * returns 0 upon success, -1 if error. */ #define svc_register gssrpc_svc_register -extern bool_t svc_register(); +extern bool_t svc_register(SVCXPRT *, rpc_u_int32, rpc_u_int32, + void (*)(struct svc_req *, SVCXPRT *), int); + +#define registerrpc gssrpc_registerrpc +extern int registerrpc(rpc_u_int32, rpc_u_int32, rpc_u_int32, + char *(*)(void *), + xdrproc_t, xdrproc_t); /* * Service un-registration @@ -185,7 +203,7 @@ extern bool_t svc_register(); * rpc_u_int32 vers; */ #define svc_unregister gssrpc_svc_unregister -extern void svc_unregister(); +extern void svc_unregister(rpc_u_int32, rpc_u_int32); /* * Transport registration. @@ -194,7 +212,7 @@ extern void svc_unregister(); * SVCXPRT *xprt; */ #define xprt_register gssrpc_xprt_register -extern void xprt_register(); +extern void xprt_register(SVCXPRT *); /* * Transport un-register @@ -203,7 +221,7 @@ extern void xprt_register(); * SVCXPRT *xprt; */ #define xprt_unregister gssrpc_xprt_unregister -extern void xprt_unregister(); +extern void xprt_unregister(SVCXPRT *); @@ -244,14 +262,14 @@ extern void xprt_unregister(); #define svcerr_noprog gssrpc_svcerr_noprog #define svcerr_systemerr gssrpc_svcerr_systemerr -extern bool_t svc_sendreply(); -extern void svcerr_decode(); -extern void svcerr_weakauth(); -extern void svcerr_noproc(); -extern void svcerr_progvers(); -extern void svcerr_auth(); -extern void svcerr_noprog(); -extern void svcerr_systemerr(); +extern bool_t svc_sendreply(SVCXPRT *, xdrproc_t, caddr_t); +extern void svcerr_decode(SVCXPRT *); +extern void svcerr_weakauth(SVCXPRT *); +extern void svcerr_noproc(SVCXPRT *); +extern void svcerr_progvers(SVCXPRT *, rpc_u_int32, rpc_u_int32); +extern void svcerr_auth(SVCXPRT *, enum auth_stat); +extern void svcerr_noprog(SVCXPRT *); +extern void svcerr_systemerr(SVCXPRT *); /* * Lowest level dispatching -OR- who owns this process anyway. @@ -288,9 +306,13 @@ extern void rpctest_service(); #define svc_getreqset gssrpc_svc_getreqset #define svc_run gssrpc_svc_run -extern void svc_getreq(); -extern void svc_getreqset(); /* takes fdset instead of int */ -extern void svc_run(); /* never returns */ +extern void svc_getreq(int); +#ifdef FD_SETSIZE +extern void svc_getreqset(fd_set *);/* takes fdset instead of int */ +#else +extern void svc_getreqset(int *); +#endif +extern void svc_run(void); /* never returns */ /* * Socket to use on svcxxx_create call to get default socket @@ -305,20 +327,28 @@ extern void svc_run(); /* never returns */ * Memory based rpc for testing and timing. */ #define svcraw_create gssrpc_svcraw_create -extern SVCXPRT *svcraw_create(); +extern SVCXPRT *svcraw_create(void); /* * Udp based rpc. */ #define svcudp_create gssrpc_svcudp_create #define svcudp_bufcreate gssrpc_svcudp_bufcreate -extern SVCXPRT *svcudp_create(); -extern SVCXPRT *svcudp_bufcreate(); +extern SVCXPRT *svcudp_create(int); +extern SVCXPRT *svcudp_bufcreate(int, unsigned int, unsigned int); /* * Tcp based rpc. */ #define svctcp_create gssrpc_svctcp_create -extern SVCXPRT *svctcp_create(); +extern SVCXPRT *svctcp_create(int, unsigned int, unsigned int); + +/* + * Like svtcp_create(), except the routine takes any *open* UNIX file + * descriptor as its first input. + */ +#define svcfd_create gssrpc_svcfd_create +extern SVCXPRT *svcfd_create(int, u_int, u_int); #endif /* !__SVC_HEADER__ */ + diff --git a/src/lib/rpc/svc_auth.c b/src/lib/rpc/svc_auth.c index b5b3eb5713..2b65d5b594 100644 --- a/src/lib/rpc/svc_auth.c +++ b/src/lib/rpc/svc_auth.c @@ -56,14 +56,19 @@ static char sccsid[] = "@(#)svc_auth.c 2.1 88/08/07 4.0 RPCSRC; from 1.19 87/08/ #define _svcauth_unix _gssrpc_svcauth_unix #define _svcauth_short _gssrpc_svcauth_short -enum auth_stat _svcauth_null(); /* no authentication */ -enum auth_stat _svcauth_unix(); /* unix style (uid, gids) */ -enum auth_stat _svcauth_short(); /* short hand unix style */ -enum auth_stat _svcauth_gssapi(); /* GSS-API style */ +/* no authentication */ +enum auth_stat _svcauth_null(struct svc_req *, struct rpc_msg *, bool_t *); +/* unix style (uid, gids) */ +enum auth_stat _svcauth_unix(struct svc_req *, struct rpc_msg *, bool_t *); +/* short hand unix style */ +enum auth_stat _svcauth_short(struct svc_req *, struct rpc_msg *, bool_t *); +/* GSS-API style */ +enum auth_stat _svcauth_gssapi(struct svc_req *, struct rpc_msg *, bool_t *); static struct svcauthsw_type { unsigned int flavor; - enum auth_stat (*authenticator)(); + enum auth_stat (*authenticator)(struct svc_req *, struct rpc_msg *, + bool_t *); } svcauthsw[] = { {AUTH_GSSAPI, _svcauth_gssapi}, /* AUTH_GSSAPI */ {AUTH_NONE, _svcauth_null}, /* AUTH_NULL */ @@ -114,9 +119,10 @@ _authenticate(rqst, msg, no_dispatch) } enum auth_stat -_svcauth_null(rqst, msg) +_svcauth_null(rqst, msg, no_dispatch) struct svc_req *rqst; struct rpc_msg *msg; + bool_t *no_dispatch; { rqst->rq_xprt->xp_auth = &svc_auth_any; return (AUTH_OK); diff --git a/src/lib/rpc/svc_auth.h b/src/lib/rpc/svc_auth.h index 18c70d8382..814732546a 100644 --- a/src/lib/rpc/svc_auth.h +++ b/src/lib/rpc/svc_auth.h @@ -38,10 +38,13 @@ /* * Interface to server-side authentication flavors. */ -typedef struct { + +typedef struct __rpc_svc_auth { struct svc_auth_ops { - int (*svc_ah_wrap)(); - int (*svc_ah_unwrap)(); + int (*svc_ah_wrap)(struct __rpc_svc_auth *, XDR *, xdrproc_t, + caddr_t); + int (*svc_ah_unwrap)(struct __rpc_svc_auth *, XDR *, xdrproc_t, + caddr_t); } *svc_ah_ops; caddr_t svc_ah_private; } SVCAUTH; diff --git a/src/lib/rpc/svc_auth_any.c b/src/lib/rpc/svc_auth_any.c index f538b17094..e634cbcdb3 100644 --- a/src/lib/rpc/svc_auth_any.c +++ b/src/lib/rpc/svc_auth_any.c @@ -9,14 +9,27 @@ #include #include -extern int authany_wrap(); +static int svc_authany_wrap(SVCAUTH *, XDR *, xdrproc_t, caddr_t); struct svc_auth_ops svc_auth_any_ops = { - authany_wrap, - authany_wrap, + svc_authany_wrap, + svc_authany_wrap, }; SVCAUTH svc_auth_any = { &svc_auth_any_ops, NULL, }; + +static int +svc_authany_wrap(auth, xdrs, xfunc, xwhere) + SVCAUTH *auth; + XDR *xdrs; + xdrproc_t xfunc; + caddr_t xwhere; +{ + return (*xfunc)(xdrs, xwhere); +} + + + diff --git a/src/lib/rpc/svc_auth_gssapi.c b/src/lib/rpc/svc_auth_gssapi.c index 9d831ad0de..a1d46c31f0 100644 --- a/src/lib/rpc/svc_auth_gssapi.c +++ b/src/lib/rpc/svc_auth_gssapi.c @@ -73,16 +73,16 @@ typedef struct _svc_auth_gssapi_data { #define SVCAUTH_PRIVATE(auth) \ ((svc_auth_gssapi_data *)(auth)->svc_ah_private) -static bool_t svc_auth_gssapi_wrap(); -static bool_t svc_auth_gssapi_unwrap(); -static svc_auth_gssapi_data *create_client(); +static bool_t svc_auth_gssapi_wrap(SVCAUTH *, XDR *, xdrproc_t, caddr_t); +static bool_t svc_auth_gssapi_unwrap(SVCAUTH *, XDR *, xdrproc_t, caddr_t); +static svc_auth_gssapi_data *create_client(void); static svc_auth_gssapi_data *get_client -PROTOTYPE((gss_buffer_t client_handle)); + PROTOTYPE((gss_buffer_t client_handle)); static void destroy_client -PROTOTYPE((svc_auth_gssapi_data *client_data)); -static void clean_client(), cleanup(); + PROTOTYPE((svc_auth_gssapi_data *client_data)); +static void clean_client(void), cleanup(void); static void client_expire -PROTOTYPE((svc_auth_gssapi_data *client_data, rpc_u_int32 exp)); + PROTOTYPE((svc_auth_gssapi_data *client_data, rpc_u_int32 exp)); static void dump_db PROTOTYPE((char *msg)); diff --git a/src/lib/rpc/svc_raw.c b/src/lib/rpc/svc_raw.c index 23ff8898aa..00220e6eb8 100644 --- a/src/lib/rpc/svc_raw.c +++ b/src/lib/rpc/svc_raw.c @@ -53,12 +53,12 @@ static struct svcraw_private { char verf_body[MAX_AUTH_BYTES]; } *svcraw_private; -static bool_t svcraw_recv(); -static enum xprt_stat svcraw_stat(); -static bool_t svcraw_getargs(); -static bool_t svcraw_reply(); -static bool_t svcraw_freeargs(); -static void svcraw_destroy(); +static bool_t svcraw_recv(SVCXPRT *, struct rpc_msg *); +static enum xprt_stat svcraw_stat(SVCXPRT *); +static bool_t svcraw_getargs(SVCXPRT *, xdrproc_t, void *); +static bool_t svcraw_reply(SVCXPRT *, struct rpc_msg *); +static bool_t svcraw_freeargs(SVCXPRT *, xdrproc_t, void *); +static void svcraw_destroy(SVCXPRT *); static struct xp_ops server_ops = { svcraw_recv, @@ -88,7 +88,8 @@ svcraw_create() } static enum xprt_stat -svcraw_stat() +svcraw_stat(xprt) + SVCXPRT *xprt; { return (XPRT_IDLE); @@ -135,7 +136,7 @@ static bool_t svcraw_getargs(xprt, xdr_args, args_ptr) SVCXPRT *xprt; xdrproc_t xdr_args; - caddr_t args_ptr; + void * args_ptr; { register struct svcraw_private *srp = svcraw_private; @@ -152,7 +153,7 @@ static bool_t svcraw_freeargs(xprt, xdr_args, args_ptr) SVCXPRT *xprt; xdrproc_t xdr_args; - caddr_t args_ptr; + void * args_ptr; { register struct svcraw_private *srp = svcraw_private; register XDR *xdrs; @@ -165,6 +166,7 @@ svcraw_freeargs(xprt, xdr_args, args_ptr) } static void -svcraw_destroy() +svcraw_destroy(xprt) + SVCXPRT *xprt; { } diff --git a/src/lib/rpc/svc_simple.c b/src/lib/rpc/svc_simple.c index b4769d02b1..28f192cba2 100644 --- a/src/lib/rpc/svc_simple.c +++ b/src/lib/rpc/svc_simple.c @@ -51,13 +51,14 @@ static struct proglst { xdrproc_t p_inproc, p_outproc; struct proglst *p_nxt; } *proglst; -static void universal(); +static void universal(struct svc_req *, SVCXPRT *); static SVCXPRT *transp; int gssrpc_registerrpc(prognum, versnum, procnum, progname, inproc, outproc) char *(*progname)(); xdrproc_t inproc, outproc; + rpc_u_int32 prognum, versnum, procnum; { struct proglst *pl; diff --git a/src/lib/rpc/svc_tcp.c b/src/lib/rpc/svc_tcp.c index 6fe3b30058..e9f5312b05 100644 --- a/src/lib/rpc/svc_tcp.c +++ b/src/lib/rpc/svc_tcp.c @@ -54,12 +54,12 @@ extern errno; /* * Ops vector for TCP/IP based rpc service handle */ -static bool_t svctcp_recv(); -static enum xprt_stat svctcp_stat(); -static bool_t svctcp_getargs(); -static bool_t svctcp_reply(); -static bool_t svctcp_freeargs(); -static void svctcp_destroy(); +static bool_t svctcp_recv(SVCXPRT *, struct rpc_msg *); +static enum xprt_stat svctcp_stat(SVCXPRT *); +static bool_t svctcp_getargs(SVCXPRT *, xdrproc_t, void *); +static bool_t svctcp_reply(SVCXPRT *, struct rpc_msg *); +static bool_t svctcp_freeargs(SVCXPRT *, xdrproc_t, void *); +static void svctcp_destroy(SVCXPRT *); static struct xp_ops svctcp_op = { svctcp_recv, @@ -73,21 +73,24 @@ static struct xp_ops svctcp_op = { /* * Ops vector for TCP/IP rendezvous handler */ -static bool_t rendezvous_request(); -static bool_t abortx(); -static enum xprt_stat rendezvous_stat(); +static bool_t rendezvous_request(SVCXPRT *, struct rpc_msg *); +static bool_t abortx(void); +static bool_t abortx_getargs(SVCXPRT *, xdrproc_t, void *); +static bool_t abortx_reply(SVCXPRT *, struct rpc_msg *); +static bool_t abortx_freeargs(SVCXPRT *, xdrproc_t, void *); +static enum xprt_stat rendezvous_stat(SVCXPRT *); static struct xp_ops svctcp_rendezvous_op = { rendezvous_request, rendezvous_stat, - abortx, - abortx, - abortx, + abortx_getargs, + abortx_reply, + abortx_freeargs, svctcp_destroy }; -static int readtcp(), writetcp(); -static SVCXPRT *makefd_xprt(); +static int readtcp(SVCXPRT *, caddr_t, int), writetcp(SVCXPRT *, caddr_t, int); +static SVCXPRT *makefd_xprt(int, unsigned int, unsigned int); struct tcp_rendezvous { /* kept in xprt->xp_p1 */ unsigned int sendsize; @@ -233,8 +236,9 @@ makefd_xprt(fd, sendsize, recvsize) } static bool_t -rendezvous_request(xprt) +rendezvous_request(xprt, msg) register SVCXPRT *xprt; + struct rpc_msg *msg; { int sock; struct tcp_rendezvous *r; @@ -265,7 +269,8 @@ rendezvous_request(xprt) } static enum xprt_stat -rendezvous_stat() +rendezvous_stat(xprt) + register SVCXPRT *xprt; { return (XPRT_IDLE); @@ -398,7 +403,7 @@ static bool_t svctcp_getargs(xprt, xdr_args, args_ptr) SVCXPRT *xprt; xdrproc_t xdr_args; - caddr_t args_ptr; + void *args_ptr; { if (! SVCAUTH_UNWRAP(xprt->xp_auth, &(((struct tcp_conn *)(xprt->xp_p1))->xdrs), @@ -413,7 +418,7 @@ static bool_t svctcp_freeargs(xprt, xdr_args, args_ptr) SVCXPRT *xprt; xdrproc_t xdr_args; - caddr_t args_ptr; + void * args_ptr; { register XDR *xdrs = &(((struct tcp_conn *)(xprt->xp_p1))->xdrs); @@ -464,3 +469,27 @@ static bool_t abortx() return 1; } +static bool_t abortx_getargs(xprt, proc, info) + SVCXPRT *xprt; + xdrproc_t proc; + void *info; +{ + return abortx(); +} + + +static bool_t abortx_reply(xprt, msg) + SVCXPRT *xprt; + struct rpc_msg *msg; +{ + return abortx(); +} + +static bool_t abortx_freeargs(xprt, proc, info) + SVCXPRT *xprt; + xdrproc_t proc; + void * info; +{ + return abortx(); +} + diff --git a/src/lib/rpc/svc_udp.c b/src/lib/rpc/svc_udp.c index 7dca8a0832..ca30bcde5f 100644 --- a/src/lib/rpc/svc_udp.c +++ b/src/lib/rpc/svc_udp.c @@ -54,15 +54,15 @@ static char sccsid[] = "@(#)svc_udp.c 1.24 87/08/11 Copyr 1984 Sun Micro"; #define MAX(a, b) ((a > b) ? a : b) #endif -static bool_t svcudp_recv(); -static bool_t svcudp_reply(); -static enum xprt_stat svcudp_stat(); -static bool_t svcudp_getargs(); -static bool_t svcudp_freeargs(); -static void svcudp_destroy(); +static bool_t svcudp_recv(SVCXPRT *, struct rpc_msg *); +static bool_t svcudp_reply(SVCXPRT *, struct rpc_msg *); +static enum xprt_stat svcudp_stat(SVCXPRT *); +static bool_t svcudp_getargs(SVCXPRT *, xdrproc_t, void *); +static bool_t svcudp_freeargs(SVCXPRT *, xdrproc_t, void *); +static void svcudp_destroy(SVCXPRT *); -static void cache_set(); -static int cache_get(); +static void cache_set(SVCXPRT *, rpc_u_int32); +static int cache_get(SVCXPRT *, struct rpc_msg *, char **, rpc_u_int32 *); static struct xp_ops svcudp_op = { svcudp_recv, @@ -271,7 +271,7 @@ static bool_t svcudp_getargs(xprt, xdr_args, args_ptr) SVCXPRT *xprt; xdrproc_t xdr_args; - caddr_t args_ptr; + void * args_ptr; { if (! SVCAUTH_UNWRAP(xprt->xp_auth, &(su_data(xprt)->su_xdrs), xdr_args, args_ptr)) { @@ -285,7 +285,7 @@ static bool_t svcudp_freeargs(xprt, xdr_args, args_ptr) SVCXPRT *xprt; xdrproc_t xdr_args; - caddr_t args_ptr; + void * args_ptr; { register XDR *xdrs = &(su_data(xprt)->su_xdrs); diff --git a/src/lib/rpc/xdr.c b/src/lib/rpc/xdr.c index 084d838e6d..ccce136a09 100644 --- a/src/lib/rpc/xdr.c +++ b/src/lib/rpc/xdr.c @@ -78,9 +78,9 @@ gssrpc_xdr_free(proc, objp) * XDR nothing */ bool_t -xdr_void(/* xdrs, addr */) - /* XDR *xdrs; */ - /* caddr_t addr; */ +xdr_void(xdrs, addr ) + XDR *xdrs; + void *addr; { return (TRUE); diff --git a/src/lib/rpc/xdr.h b/src/lib/rpc/xdr.h index d6742dda4f..f4b50f959a 100644 --- a/src/lib/rpc/xdr.h +++ b/src/lib/rpc/xdr.h @@ -108,6 +108,8 @@ enum xdr_op { * to be decoded. If this pointer is 0, then the type routines should * allocate dynamic storage of the appropriate size and return it. * bool_t (*xdrproc_t)(XDR *, caddr_t *); + * + * XXX can't actually prototype it, because some take three args!!! */ typedef bool_t (*xdrproc_t)(); @@ -117,17 +119,32 @@ typedef bool_t (*xdrproc_t)(); * an operations vector for the paticular implementation (e.g. see xdr_mem.c), * and two private fields for the use of the particular impelementation. */ -typedef struct { +typedef struct __xdr_s { enum xdr_op x_op; /* operation; fast additional param */ struct xdr_ops { - bool_t (*x_getlong)(); /* get a long from underlying stream */ - bool_t (*x_putlong)(); /* put a long to " */ - bool_t (*x_getbytes)();/* get some bytes from " */ - bool_t (*x_putbytes)();/* put some bytes to " */ - unsigned int (*x_getpostn)();/* returns bytes off from beginning */ - bool_t (*x_setpostn)();/* lets you reposition the stream */ - rpc_int32 * (*x_inline)(); /* buf quick ptr to buffered data */ - void (*x_destroy)(); /* free privates of this xdr_stream */ + /* get a long from underlying stream */ + bool_t (*x_getlong)(struct __xdr_s *, long *); + + /* put a long to underlying stream */ + bool_t (*x_putlong)(struct __xdr_s *, long *); + + /* get some bytes from underlying stream */ + bool_t (*x_getbytes)(struct __xdr_s *, caddr_t, unsigned int); + + /* put some bytes to underlying stream */ + bool_t (*x_putbytes)(struct __xdr_s *, caddr_t, unsigned int); + + /* returns bytes off from beginning */ + unsigned int (*x_getpostn)(struct __xdr_s *); + + /* lets you reposition the stream */ + bool_t (*x_setpostn)(struct __xdr_s *, unsigned int); + + /* buf quick ptr to buffered data */ + rpc_int32 * (*x_inline)(struct __xdr_s *, int); + + /* free privates of this xdr_stream */ + void (*x_destroy)(struct __xdr_s *); } *x_ops; caddr_t x_public; /* users' data */ caddr_t x_private; /* pointer to private data */ @@ -258,7 +275,7 @@ struct xdr_discrim { #define xdr_pointer gssrpc_xdr_pointer #define xdr_wrapstring gssrpc_xdr_wrapstring -extern bool_t xdr_void(); +extern bool_t xdr_void(XDR *, void *); extern bool_t xdr_int PROTOTYPE((XDR *, int *)); extern bool_t xdr_u_int diff --git a/src/lib/rpc/xdr_alloc.c b/src/lib/rpc/xdr_alloc.c index 6023930f33..6ee9a742f1 100644 --- a/src/lib/rpc/xdr_alloc.c +++ b/src/lib/rpc/xdr_alloc.c @@ -40,20 +40,21 @@ static char sccsid[] = "@(#)xdr_mem.c 1.19 87/08/11 Copyr 1984 Sun Micro"; #include #include -static bool_t xdralloc_putlong(); -static bool_t xdralloc_putbytes(); -static unsigned int xdralloc_getpos(); -static rpc_int32 * xdralloc_inline(); -static void xdralloc_destroy(); -static bool_t xdralloc_notsup(); - +static bool_t xdralloc_putlong(XDR *, long *); +static bool_t xdralloc_putbytes(XDR *, caddr_t, unsigned int); +static unsigned int xdralloc_getpos(XDR *); +static rpc_int32 * xdralloc_inline(XDR *, int); +static void xdralloc_destroy(XDR *); +static bool_t xdralloc_notsup_getlong(XDR *, long *); +static bool_t xdralloc_notsup_getbytes(XDR *, caddr_t, unsigned int); +static bool_t xdralloc_notsup_setpos(XDR *, unsigned int); static struct xdr_ops xdralloc_ops = { - xdralloc_notsup, + xdralloc_notsup_getlong, xdralloc_putlong, - xdralloc_notsup, + xdralloc_notsup_getbytes, xdralloc_putbytes, xdralloc_getpos, - xdralloc_notsup, + xdralloc_notsup_setpos, xdralloc_inline, xdralloc_destroy, }; @@ -90,14 +91,16 @@ static void xdralloc_destroy(xdrs) DynDestroy((DynObject) xdrs->x_private); } -static bool_t xdralloc_notsup() +static bool_t xdralloc_notsup_getlong(xdrs, lp) + register XDR *xdrs; + long *lp; { return FALSE; } static bool_t xdralloc_putlong(xdrs, lp) register XDR *xdrs; - rpc_int32 *lp; + long *lp; { int l = htonl((rpc_u_int32) *(int *)lp); @@ -108,6 +111,16 @@ static bool_t xdralloc_putlong(xdrs, lp) return (TRUE); } + +static bool_t xdralloc_notsup_getbytes(xdrs, addr, len) + register XDR *xdrs; + caddr_t addr; + register unsigned int len; +{ + return FALSE; +} + + static bool_t xdralloc_putbytes(xdrs, addr, len) register XDR *xdrs; caddr_t addr; @@ -126,6 +139,14 @@ static unsigned int xdralloc_getpos(xdrs) return DynSize((DynObject) xdrs->x_private); } +static bool_t xdralloc_notsup_setpos(xdrs, lp) + register XDR *xdrs; + unsigned int lp; +{ + return FALSE; +} + + static rpc_int32 *xdralloc_inline(xdrs, len) register XDR *xdrs; diff --git a/src/lib/rpc/xdr_mem.c b/src/lib/rpc/xdr_mem.c index c09b21245f..885d724e6c 100644 --- a/src/lib/rpc/xdr_mem.c +++ b/src/lib/rpc/xdr_mem.c @@ -49,14 +49,14 @@ static char sccsid[] = "@(#)xdr_mem.c 1.19 87/08/11 Copyr 1984 Sun Micro"; #include #include -static bool_t xdrmem_getlong(); -static bool_t xdrmem_putlong(); -static bool_t xdrmem_getbytes(); -static bool_t xdrmem_putbytes(); -static unsigned int xdrmem_getpos(); -static bool_t xdrmem_setpos(); -static rpc_int32 * xdrmem_inline(); -static void xdrmem_destroy(); +static bool_t xdrmem_getlong(XDR *, long *); +static bool_t xdrmem_putlong(XDR *, long *); +static bool_t xdrmem_getbytes(XDR *, caddr_t, unsigned int); +static bool_t xdrmem_putbytes(XDR *, caddr_t, unsigned int); +static unsigned int xdrmem_getpos(XDR *); +static bool_t xdrmem_setpos(XDR *, unsigned int); +static rpc_int32 * xdrmem_inline(XDR *, int); +static void xdrmem_destroy(XDR *); static struct xdr_ops xdrmem_ops = { xdrmem_getlong, @@ -88,8 +88,8 @@ xdrmem_create(xdrs, addr, size, op) } static void -xdrmem_destroy(/*xdrs*/) - /*XDR *xdrs;*/ +xdrmem_destroy(xdrs) + XDR *xdrs; { } diff --git a/src/lib/rpc/xdr_rec.c b/src/lib/rpc/xdr_rec.c index fd140f1baa..2022504599 100644 --- a/src/lib/rpc/xdr_rec.c +++ b/src/lib/rpc/xdr_rec.c @@ -56,20 +56,14 @@ static char sccsid[] = "@(#)xdr_rec.c 1.21 87/08/11 Copyr 1984 Sun Micro"; #include #include -static unsigned int fix_buf_size(); -static bool_t flush_out(); -static bool_t get_input_bytes(); -static bool_t set_input_fragment(); -static bool_t skip_input_bytes(); - -static bool_t xdrrec_getlong(); -static bool_t xdrrec_putlong(); -static bool_t xdrrec_getbytes(); -static bool_t xdrrec_putbytes(); -static unsigned int xdrrec_getpos(); -static bool_t xdrrec_setpos(); -static rpc_int32 * xdrrec_inline(); -static void xdrrec_destroy(); +static bool_t xdrrec_getlong(XDR *, long *); +static bool_t xdrrec_putlong(XDR *, long *); +static bool_t xdrrec_getbytes(XDR *, caddr_t, unsigned int); +static bool_t xdrrec_putbytes(XDR *, caddr_t, unsigned int); +static unsigned int xdrrec_getpos(XDR *); +static bool_t xdrrec_setpos(XDR *, unsigned int); +static rpc_int32 * xdrrec_inline(XDR *, int); +static void xdrrec_destroy(XDR *); static struct xdr_ops xdrrec_ops = { xdrrec_getlong, @@ -123,6 +117,11 @@ typedef struct rec_strm { unsigned int recvsize; } RECSTREAM; +static unsigned int fix_buf_size(unsigned int); +static bool_t flush_out(RECSTREAM *, bool_t); +static bool_t get_input_bytes(RECSTREAM *, caddr_t, int); +static bool_t set_input_fragment(RECSTREAM *); +static bool_t skip_input_bytes(RECSTREAM *, rpc_int32); /* * Create an xdr handle for xdrrec diff --git a/src/lib/rpc/xdr_stdio.c b/src/lib/rpc/xdr_stdio.c index 84bdd96718..6afdb5ad95 100644 --- a/src/lib/rpc/xdr_stdio.c +++ b/src/lib/rpc/xdr_stdio.c @@ -45,14 +45,14 @@ static char sccsid[] = "@(#)xdr_stdio.c 1.16 87/08/11 Copyr 1984 Sun Micro"; #include #include -static bool_t xdrstdio_getlong(); -static bool_t xdrstdio_putlong(); -static bool_t xdrstdio_getbytes(); -static bool_t xdrstdio_putbytes(); -static unsigned int xdrstdio_getpos(); -static bool_t xdrstdio_setpos(); -static rpc_int32 * xdrstdio_inline(); -static void xdrstdio_destroy(); +static bool_t xdrstdio_getlong(XDR *, long *); +static bool_t xdrstdio_putlong(XDR *, long *); +static bool_t xdrstdio_getbytes(XDR *, caddr_t, unsigned int); +static bool_t xdrstdio_putbytes(XDR *, caddr_t, unsigned int); +static unsigned int xdrstdio_getpos(XDR *); +static bool_t xdrstdio_setpos(XDR *, unsigned int); +static rpc_int32 * xdrstdio_inline(XDR *, int); +static void xdrstdio_destroy(XDR *); /* * Ops vector for stdio type XDR @@ -104,7 +104,7 @@ xdrstdio_getlong(xdrs, lp) XDR *xdrs; register long *lp; { - rpc_int32 tmp; + rpc_int32 tmp; if (fread((caddr_t)&tmp, sizeof(rpc_int32), 1, (FILE *)xdrs->x_private) != 1) return (FALSE); @@ -171,7 +171,7 @@ xdrstdio_setpos(xdrs, pos) static rpc_int32 * xdrstdio_inline(xdrs, len) XDR *xdrs; - unsigned int len; + int len; { /* -- cgit