Tweaks for the stub lockd.
- Use rpcgen to generate the unmodified boilerplate code rather than having it in the repository. - Eliminate the conflicting function names by changing them to their "natural" rpcgen generated names
This commit is contained in:
parent
37a16ebf5f
commit
ce81d24b05
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=14981
@ -1,14 +1,26 @@
|
||||
# $Id$
|
||||
# $Id: Makefile,v 1.1.1.1 1996/02/17 15:11:28 peter Exp $
|
||||
|
||||
PROG = rpc.lockd
|
||||
SRCS = lockd.c procs.c
|
||||
SRCS = nlm_prot_svc.c lockd.c procs.c
|
||||
MAN8 = rpc.lockd.8
|
||||
|
||||
DPADD= ${LIBRPCSVC}
|
||||
LDADD= -lrpcsvc
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
CFLAGS+= -I.
|
||||
|
||||
CLEANFILES= nlm_prot_svc.c nlm_prot.h
|
||||
|
||||
RPCSRC= ${.DESTDIR}/usr/include/rpcsvc/nlm_prot.x
|
||||
RPCGEN= rpcgen -L -C
|
||||
|
||||
nlm_prot_svc.c: ${RPCSRC} nlm_prot.h
|
||||
${RPCGEN} -m -o ${.TARGET} ${RPCSRC}
|
||||
|
||||
nlm_prot.h: ${RPCSRC}
|
||||
${RPCGEN} -h -o ${.TARGET} ${RPCSRC}
|
||||
|
||||
test: test.c
|
||||
cc -o test test.c -lrpcsvc
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -33,7 +33,7 @@
|
||||
|
||||
|
||||
|
||||
#include "lockd.h"
|
||||
#include "nlm_prot.h"
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/*
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995
|
||||
* A.R. Gordon (andrew.gordon@net-tel.co.uk). All rights reserved.
|
||||
@ -39,13 +38,12 @@
|
||||
|
||||
#include "lockd.h"
|
||||
|
||||
extern void nlm_prog_1 __P((struct svc_req, register SVCXPRT));
|
||||
extern void nlm_prog_3 __P((struct svc_req, register SVCXPRT));
|
||||
|
||||
int debug_level = 0; /* Zero means no debugging syslog() calls */
|
||||
|
||||
|
||||
static void nlm_prog_1();
|
||||
static void nlm_prog_3();
|
||||
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
SVCXPRT *transp;
|
||||
@ -102,8 +100,10 @@ main(int argc, char **argv)
|
||||
|
||||
/* Note that it is NOT sensible to run this program from inetd - the */
|
||||
/* protocol assumes that it will run immediately at boot time. */
|
||||
daemon(0, 0);
|
||||
|
||||
if (daemon(0,0)) {
|
||||
perror("cannot fork");
|
||||
exit(1);
|
||||
}
|
||||
openlog("rpc.lockd", 0, LOG_DAEMON);
|
||||
if (debug_level) syslog(LOG_INFO, "Starting, debug level %d", debug_level);
|
||||
else syslog(LOG_INFO, "Starting");
|
||||
@ -111,215 +111,3 @@ main(int argc, char **argv)
|
||||
svc_run(); /* Should never return */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static void
|
||||
nlm_prog_1(struct svc_req *rqstp, SVCXPRT *transp)
|
||||
{
|
||||
union
|
||||
{
|
||||
struct nlm_testargs nlm_test_1_arg;
|
||||
struct nlm_lockargs nlm_lock_1_arg;
|
||||
struct nlm_cancargs nlm_cancel_1_arg;
|
||||
struct nlm_unlockargs nlm_unlock_1_arg;
|
||||
struct nlm_testargs nlm_granted_1_arg;
|
||||
struct nlm_testargs nlm_test_msg_1_arg;
|
||||
struct nlm_lockargs nlm_lock_msg_1_arg;
|
||||
struct nlm_cancargs nlm_cancel_msg_1_arg;
|
||||
struct nlm_unlockargs nlm_unlock_msg_1_arg;
|
||||
struct nlm_testargs nlm_granted_msg_1_arg;
|
||||
nlm_testres nlm_test_res_1_arg;
|
||||
nlm_res nlm_lock_res_1_arg;
|
||||
nlm_res nlm_cancel_res_1_arg;
|
||||
nlm_res nlm_unlock_res_1_arg;
|
||||
nlm_res nlm_granted_res_1_arg;
|
||||
} argument;
|
||||
char *result;
|
||||
bool_t (*xdr_argument)(), (*xdr_result)();
|
||||
char *(*local)();
|
||||
|
||||
switch (rqstp->rq_proc)
|
||||
{
|
||||
case NULLPROC:
|
||||
(void)svc_sendreply(transp, xdr_void, (char *)NULL);
|
||||
return;
|
||||
|
||||
case NLM_TEST:
|
||||
xdr_argument = xdr_nlm_testargs;
|
||||
xdr_result = xdr_nlm_testres;
|
||||
local = (char *(*)()) nlm_test_1;
|
||||
break;
|
||||
|
||||
case NLM_LOCK:
|
||||
xdr_argument = xdr_nlm_lockargs;
|
||||
xdr_result = xdr_nlm_res;
|
||||
local = (char *(*)()) nlm_lock_1;
|
||||
break;
|
||||
|
||||
case NLM_CANCEL:
|
||||
xdr_argument = xdr_nlm_cancargs;
|
||||
xdr_result = xdr_nlm_res;
|
||||
local = (char *(*)()) nlm_cancel_1;
|
||||
break;
|
||||
|
||||
case NLM_UNLOCK:
|
||||
xdr_argument = xdr_nlm_unlockargs;
|
||||
xdr_result = xdr_nlm_res;
|
||||
local = (char *(*)()) nlm_unlock_1;
|
||||
break;
|
||||
|
||||
case NLM_GRANTED:
|
||||
xdr_argument = xdr_nlm_testargs;
|
||||
xdr_result = xdr_nlm_res;
|
||||
local = (char *(*)()) nlm_granted_1;
|
||||
break;
|
||||
|
||||
case NLM_TEST_MSG:
|
||||
xdr_argument = xdr_nlm_testargs;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_test_msg_1;
|
||||
break;
|
||||
|
||||
case NLM_LOCK_MSG:
|
||||
xdr_argument = xdr_nlm_lockargs;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_lock_msg_1;
|
||||
break;
|
||||
|
||||
case NLM_CANCEL_MSG:
|
||||
xdr_argument = xdr_nlm_cancargs;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_cancel_msg_1;
|
||||
break;
|
||||
|
||||
case NLM_UNLOCK_MSG:
|
||||
xdr_argument = xdr_nlm_unlockargs;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_unlock_msg_1;
|
||||
break;
|
||||
|
||||
case NLM_GRANTED_MSG:
|
||||
xdr_argument = xdr_nlm_testargs;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_granted_msg_1;
|
||||
break;
|
||||
|
||||
case NLM_TEST_RES:
|
||||
xdr_argument = xdr_nlm_testres;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_test_res_1;
|
||||
break;
|
||||
|
||||
case NLM_LOCK_RES:
|
||||
xdr_argument = xdr_nlm_res;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_lock_res_1;
|
||||
break;
|
||||
|
||||
case NLM_CANCEL_RES:
|
||||
xdr_argument = xdr_nlm_res;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_cancel_res_1;
|
||||
break;
|
||||
|
||||
case NLM_UNLOCK_RES:
|
||||
xdr_argument = xdr_nlm_res;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_unlock_res_1;
|
||||
break;
|
||||
|
||||
case NLM_GRANTED_RES:
|
||||
xdr_argument = xdr_nlm_res;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_granted_res_1;
|
||||
break;
|
||||
|
||||
default:
|
||||
svcerr_noproc(transp);
|
||||
return;
|
||||
}
|
||||
bzero((char *)&argument, sizeof(argument));
|
||||
if (!svc_getargs(transp, xdr_argument, (caddr_t)&argument))
|
||||
{
|
||||
syslog(LOG_ERR, "RPC received with invalid arguments");
|
||||
svcerr_decode(transp);
|
||||
return;
|
||||
}
|
||||
result = (*local)(&argument, rqstp);
|
||||
if (result != NULL && !svc_sendreply(transp, xdr_result, result))
|
||||
{
|
||||
svcerr_systemerr(transp);
|
||||
}
|
||||
if (!svc_freeargs(transp, xdr_argument, (caddr_t)&argument))
|
||||
{
|
||||
syslog(LOG_ERR, "unable to free arguments");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
nlm_prog_3(struct svc_req *rqstp, SVCXPRT *transp)
|
||||
{
|
||||
union
|
||||
{
|
||||
nlm_shareargs nlm_share_3_arg;
|
||||
nlm_shareargs nlm_unshare_3_arg;
|
||||
nlm_lockargs nlm_nm_lock_3_arg;
|
||||
nlm_notify nlm_free_all_3_arg;
|
||||
} argument;
|
||||
char *result;
|
||||
bool_t (*xdr_argument)(), (*xdr_result)();
|
||||
char *(*local)();
|
||||
|
||||
switch (rqstp->rq_proc)
|
||||
{
|
||||
case NULLPROC:
|
||||
(void)svc_sendreply(transp, xdr_void, (char *)NULL);
|
||||
return;
|
||||
|
||||
case NLM_SHARE:
|
||||
xdr_argument = xdr_nlm_shareargs;
|
||||
xdr_result = xdr_nlm_shareres;
|
||||
local = (char *(*)()) nlm_share_3;
|
||||
break;
|
||||
|
||||
case NLM_UNSHARE:
|
||||
xdr_argument = xdr_nlm_shareargs;
|
||||
xdr_result = xdr_nlm_shareres;
|
||||
local = (char *(*)()) nlm_unshare_3;
|
||||
break;
|
||||
|
||||
case NLM_NM_LOCK:
|
||||
xdr_argument = xdr_nlm_lockargs;
|
||||
xdr_result = xdr_nlm_res;
|
||||
local = (char *(*)()) nlm_nm_lock_3;
|
||||
break;
|
||||
|
||||
case NLM_FREE_ALL:
|
||||
xdr_argument = xdr_nlm_notify;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_free_all_3;
|
||||
break;
|
||||
|
||||
default:
|
||||
svcerr_noproc(transp);
|
||||
return;
|
||||
}
|
||||
bzero((char *)&argument, sizeof(argument));
|
||||
if (!svc_getargs(transp, xdr_argument, (caddr_t)&argument))
|
||||
{
|
||||
syslog(LOG_ERR, "RPC received with invalid arguments");
|
||||
svcerr_decode(transp);
|
||||
return;
|
||||
}
|
||||
result = (*local)(&argument, rqstp);
|
||||
if (result != NULL && !svc_sendreply(transp, xdr_result, result))
|
||||
{
|
||||
svcerr_systemerr(transp);
|
||||
}
|
||||
if (!svc_freeargs(transp, xdr_argument, (caddr_t)&argument))
|
||||
{
|
||||
syslog(LOG_ERR, "unable to free arguments");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
||||
#include <rpc/rpc.h>
|
||||
#include <syslog.h>
|
||||
#include <rpcsvc/sm_inter.h> /* protocol to talk to rpc.statd */
|
||||
#include <rpcsvc/nlm_prot.h> /* The protocol we are implementing */
|
||||
#include "nlm_prot.h" /* The protocol we are implementing */
|
||||
|
||||
|
||||
/* global variables ------------------------------------------------------- */
|
||||
|
@ -252,7 +252,7 @@ static void transmit_result(int opcode, nlm_res *result, struct svc_req *req)
|
||||
Notes:
|
||||
*/
|
||||
|
||||
nlm_testres *nlm_test_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
nlm_testres *nlm_test_1_svc(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_testres res;
|
||||
if (debug_level) log_from_addr("nlm_test", rqstp);
|
||||
@ -267,7 +267,7 @@ nlm_testres *nlm_test_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
return (&res);
|
||||
}
|
||||
|
||||
void *nlm_test_msg_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
void *nlm_test_msg_1_svc(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
nlm_testres res;
|
||||
static char dummy;
|
||||
@ -304,7 +304,7 @@ void *nlm_test_msg_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
Notes: *** grace period support missing
|
||||
*/
|
||||
|
||||
nlm_res *nlm_lock_1(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
nlm_res *nlm_lock_1_svc(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_lock", rqstp);
|
||||
@ -316,7 +316,7 @@ nlm_res *nlm_lock_1(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
return (&res);
|
||||
}
|
||||
|
||||
void *nlm_lock_msg_1(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
void *nlm_lock_msg_1_svc(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
|
||||
@ -336,7 +336,7 @@ void *nlm_lock_msg_1(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
Notes:
|
||||
*/
|
||||
|
||||
nlm_res *nlm_cancel_1(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
nlm_res *nlm_cancel_1_svc(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_cancel", rqstp);
|
||||
@ -350,7 +350,7 @@ nlm_res *nlm_cancel_1(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
return (&res);
|
||||
}
|
||||
|
||||
void *nlm_cancel_msg_1(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
void *nlm_cancel_msg_1_svc(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_cancel_msg", rqstp);
|
||||
@ -372,7 +372,7 @@ void *nlm_cancel_msg_1(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
re-try an unlock that has already succeeded.
|
||||
*/
|
||||
|
||||
nlm_res *nlm_unlock_1(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
nlm_res *nlm_unlock_1_svc(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_unlock", rqstp);
|
||||
@ -383,7 +383,7 @@ nlm_res *nlm_unlock_1(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
return (&res);
|
||||
}
|
||||
|
||||
void *nlm_unlock_msg_1(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
void *nlm_unlock_msg_1_svc(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_unlock_msg", rqstp);
|
||||
@ -414,7 +414,7 @@ void *nlm_unlock_msg_1(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
Notes:
|
||||
*/
|
||||
|
||||
nlm_res *nlm_granted_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
nlm_res *nlm_granted_1_svc(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_granted", rqstp);
|
||||
@ -426,7 +426,7 @@ nlm_res *nlm_granted_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
return (&res);
|
||||
}
|
||||
|
||||
void *nlm_granted_msg_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
void *nlm_granted_msg_1_svc(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_granted_msg", rqstp);
|
||||
@ -443,7 +443,7 @@ void *nlm_granted_msg_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
Returns: Nothing
|
||||
*/
|
||||
|
||||
void *nlm_test_res_1(nlm_testres *arg, struct svc_req *rqstp)
|
||||
void *nlm_test_res_1_svc(nlm_testres *arg, struct svc_req *rqstp)
|
||||
{
|
||||
if (debug_level) log_from_addr("nlm_test_res", rqstp);
|
||||
return (NULL);
|
||||
@ -455,7 +455,7 @@ void *nlm_test_res_1(nlm_testres *arg, struct svc_req *rqstp)
|
||||
Returns: Nothing
|
||||
*/
|
||||
|
||||
void *nlm_lock_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
void *nlm_lock_res_1_svc(nlm_res *arg, struct svc_req *rqstp)
|
||||
{
|
||||
if (debug_level) log_from_addr("nlm_lock_res", rqstp);
|
||||
|
||||
@ -468,7 +468,7 @@ void *nlm_lock_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
Returns: Nothing
|
||||
*/
|
||||
|
||||
void *nlm_cancel_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
void *nlm_cancel_res_1_svc(nlm_res *arg, struct svc_req *rqstp)
|
||||
{
|
||||
if (debug_level) log_from_addr("nlm_cancel_res", rqstp);
|
||||
return (NULL);
|
||||
@ -480,7 +480,7 @@ void *nlm_cancel_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
Returns: Nothing
|
||||
*/
|
||||
|
||||
void *nlm_unlock_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
void *nlm_unlock_res_1_svc(nlm_res *arg, struct svc_req *rqstp)
|
||||
{
|
||||
if (debug_level) log_from_addr("nlm_unlock_res", rqstp);
|
||||
return (NULL);
|
||||
@ -492,7 +492,7 @@ void *nlm_unlock_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
Returns: Nothing
|
||||
*/
|
||||
|
||||
void *nlm_granted_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
void *nlm_granted_res_1_svc(nlm_res *arg, struct svc_req *rqstp)
|
||||
{
|
||||
if (debug_level) log_from_addr("nlm_granted_res", rqstp);
|
||||
return (NULL);
|
||||
@ -515,7 +515,7 @@ void *nlm_granted_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
to retry if required.
|
||||
*/
|
||||
|
||||
nlm_shareres *nlm_share_3(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
nlm_shareres *nlm_share_3_svc(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_shareres res;
|
||||
if (debug_level) log_from_addr("nlm_share", rqstp);
|
||||
@ -533,7 +533,7 @@ nlm_shareres *nlm_share_3(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
Notes:
|
||||
*/
|
||||
|
||||
nlm_shareres *nlm_unshare_3(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
nlm_shareres *nlm_unshare_3_svc(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_shareres res;
|
||||
if (debug_level) log_from_addr("nlm_unshare", rqstp);
|
||||
@ -555,7 +555,7 @@ nlm_shareres *nlm_unshare_3(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
respond to the statd protocol.
|
||||
*/
|
||||
|
||||
nlm_res *nlm_nm_lock_3(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
nlm_res *nlm_nm_lock_3_svc(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_nm_lock", rqstp);
|
||||
@ -577,7 +577,7 @@ nlm_res *nlm_nm_lock_3(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
using monitored locks.
|
||||
*/
|
||||
|
||||
void *nlm_free_all_3(nlm_notify *arg, struct svc_req *rqstp)
|
||||
void *nlm_free_all_3_svc(nlm_notify *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static char dummy;
|
||||
|
||||
|
@ -314,11 +314,15 @@ int main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
clnt_control(cli, CLGET_TIMEOUT, &tim);
|
||||
printf("Default timeout was %d.%d\n", tim.tv_sec, tim.tv_usec);
|
||||
tim.tv_usec = -1;
|
||||
tim.tv_sec = -1;
|
||||
clnt_control(cli, CLSET_TIMEOUT, &tim);
|
||||
clnt_control(cli, CLGET_TIMEOUT, &tim);
|
||||
printf("timeout now %d.%d\n", tim.tv_sec, tim.tv_usec);
|
||||
|
||||
|
||||
arg.cookie.n_len = 4;
|
||||
arg.cookie.n_bytes = "hello";
|
||||
|
@ -1,14 +1,26 @@
|
||||
# $Id$
|
||||
# $Id: Makefile,v 1.1.1.1 1996/02/17 15:11:28 peter Exp $
|
||||
|
||||
PROG = rpc.lockd
|
||||
SRCS = lockd.c procs.c
|
||||
SRCS = nlm_prot_svc.c lockd.c procs.c
|
||||
MAN8 = rpc.lockd.8
|
||||
|
||||
DPADD= ${LIBRPCSVC}
|
||||
LDADD= -lrpcsvc
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
CFLAGS+= -I.
|
||||
|
||||
CLEANFILES= nlm_prot_svc.c nlm_prot.h
|
||||
|
||||
RPCSRC= ${.DESTDIR}/usr/include/rpcsvc/nlm_prot.x
|
||||
RPCGEN= rpcgen -L -C
|
||||
|
||||
nlm_prot_svc.c: ${RPCSRC} nlm_prot.h
|
||||
${RPCGEN} -m -o ${.TARGET} ${RPCSRC}
|
||||
|
||||
nlm_prot.h: ${RPCSRC}
|
||||
${RPCGEN} -h -o ${.TARGET} ${RPCSRC}
|
||||
|
||||
test: test.c
|
||||
cc -o test test.c -lrpcsvc
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -33,7 +33,7 @@
|
||||
|
||||
|
||||
|
||||
#include "lockd.h"
|
||||
#include "nlm_prot.h"
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/*
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 1995
|
||||
* A.R. Gordon (andrew.gordon@net-tel.co.uk). All rights reserved.
|
||||
@ -39,13 +38,12 @@
|
||||
|
||||
#include "lockd.h"
|
||||
|
||||
extern void nlm_prog_1 __P((struct svc_req, register SVCXPRT));
|
||||
extern void nlm_prog_3 __P((struct svc_req, register SVCXPRT));
|
||||
|
||||
int debug_level = 0; /* Zero means no debugging syslog() calls */
|
||||
|
||||
|
||||
static void nlm_prog_1();
|
||||
static void nlm_prog_3();
|
||||
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
SVCXPRT *transp;
|
||||
@ -102,8 +100,10 @@ main(int argc, char **argv)
|
||||
|
||||
/* Note that it is NOT sensible to run this program from inetd - the */
|
||||
/* protocol assumes that it will run immediately at boot time. */
|
||||
daemon(0, 0);
|
||||
|
||||
if (daemon(0,0)) {
|
||||
perror("cannot fork");
|
||||
exit(1);
|
||||
}
|
||||
openlog("rpc.lockd", 0, LOG_DAEMON);
|
||||
if (debug_level) syslog(LOG_INFO, "Starting, debug level %d", debug_level);
|
||||
else syslog(LOG_INFO, "Starting");
|
||||
@ -111,215 +111,3 @@ main(int argc, char **argv)
|
||||
svc_run(); /* Should never return */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static void
|
||||
nlm_prog_1(struct svc_req *rqstp, SVCXPRT *transp)
|
||||
{
|
||||
union
|
||||
{
|
||||
struct nlm_testargs nlm_test_1_arg;
|
||||
struct nlm_lockargs nlm_lock_1_arg;
|
||||
struct nlm_cancargs nlm_cancel_1_arg;
|
||||
struct nlm_unlockargs nlm_unlock_1_arg;
|
||||
struct nlm_testargs nlm_granted_1_arg;
|
||||
struct nlm_testargs nlm_test_msg_1_arg;
|
||||
struct nlm_lockargs nlm_lock_msg_1_arg;
|
||||
struct nlm_cancargs nlm_cancel_msg_1_arg;
|
||||
struct nlm_unlockargs nlm_unlock_msg_1_arg;
|
||||
struct nlm_testargs nlm_granted_msg_1_arg;
|
||||
nlm_testres nlm_test_res_1_arg;
|
||||
nlm_res nlm_lock_res_1_arg;
|
||||
nlm_res nlm_cancel_res_1_arg;
|
||||
nlm_res nlm_unlock_res_1_arg;
|
||||
nlm_res nlm_granted_res_1_arg;
|
||||
} argument;
|
||||
char *result;
|
||||
bool_t (*xdr_argument)(), (*xdr_result)();
|
||||
char *(*local)();
|
||||
|
||||
switch (rqstp->rq_proc)
|
||||
{
|
||||
case NULLPROC:
|
||||
(void)svc_sendreply(transp, xdr_void, (char *)NULL);
|
||||
return;
|
||||
|
||||
case NLM_TEST:
|
||||
xdr_argument = xdr_nlm_testargs;
|
||||
xdr_result = xdr_nlm_testres;
|
||||
local = (char *(*)()) nlm_test_1;
|
||||
break;
|
||||
|
||||
case NLM_LOCK:
|
||||
xdr_argument = xdr_nlm_lockargs;
|
||||
xdr_result = xdr_nlm_res;
|
||||
local = (char *(*)()) nlm_lock_1;
|
||||
break;
|
||||
|
||||
case NLM_CANCEL:
|
||||
xdr_argument = xdr_nlm_cancargs;
|
||||
xdr_result = xdr_nlm_res;
|
||||
local = (char *(*)()) nlm_cancel_1;
|
||||
break;
|
||||
|
||||
case NLM_UNLOCK:
|
||||
xdr_argument = xdr_nlm_unlockargs;
|
||||
xdr_result = xdr_nlm_res;
|
||||
local = (char *(*)()) nlm_unlock_1;
|
||||
break;
|
||||
|
||||
case NLM_GRANTED:
|
||||
xdr_argument = xdr_nlm_testargs;
|
||||
xdr_result = xdr_nlm_res;
|
||||
local = (char *(*)()) nlm_granted_1;
|
||||
break;
|
||||
|
||||
case NLM_TEST_MSG:
|
||||
xdr_argument = xdr_nlm_testargs;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_test_msg_1;
|
||||
break;
|
||||
|
||||
case NLM_LOCK_MSG:
|
||||
xdr_argument = xdr_nlm_lockargs;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_lock_msg_1;
|
||||
break;
|
||||
|
||||
case NLM_CANCEL_MSG:
|
||||
xdr_argument = xdr_nlm_cancargs;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_cancel_msg_1;
|
||||
break;
|
||||
|
||||
case NLM_UNLOCK_MSG:
|
||||
xdr_argument = xdr_nlm_unlockargs;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_unlock_msg_1;
|
||||
break;
|
||||
|
||||
case NLM_GRANTED_MSG:
|
||||
xdr_argument = xdr_nlm_testargs;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_granted_msg_1;
|
||||
break;
|
||||
|
||||
case NLM_TEST_RES:
|
||||
xdr_argument = xdr_nlm_testres;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_test_res_1;
|
||||
break;
|
||||
|
||||
case NLM_LOCK_RES:
|
||||
xdr_argument = xdr_nlm_res;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_lock_res_1;
|
||||
break;
|
||||
|
||||
case NLM_CANCEL_RES:
|
||||
xdr_argument = xdr_nlm_res;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_cancel_res_1;
|
||||
break;
|
||||
|
||||
case NLM_UNLOCK_RES:
|
||||
xdr_argument = xdr_nlm_res;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_unlock_res_1;
|
||||
break;
|
||||
|
||||
case NLM_GRANTED_RES:
|
||||
xdr_argument = xdr_nlm_res;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_granted_res_1;
|
||||
break;
|
||||
|
||||
default:
|
||||
svcerr_noproc(transp);
|
||||
return;
|
||||
}
|
||||
bzero((char *)&argument, sizeof(argument));
|
||||
if (!svc_getargs(transp, xdr_argument, (caddr_t)&argument))
|
||||
{
|
||||
syslog(LOG_ERR, "RPC received with invalid arguments");
|
||||
svcerr_decode(transp);
|
||||
return;
|
||||
}
|
||||
result = (*local)(&argument, rqstp);
|
||||
if (result != NULL && !svc_sendreply(transp, xdr_result, result))
|
||||
{
|
||||
svcerr_systemerr(transp);
|
||||
}
|
||||
if (!svc_freeargs(transp, xdr_argument, (caddr_t)&argument))
|
||||
{
|
||||
syslog(LOG_ERR, "unable to free arguments");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
nlm_prog_3(struct svc_req *rqstp, SVCXPRT *transp)
|
||||
{
|
||||
union
|
||||
{
|
||||
nlm_shareargs nlm_share_3_arg;
|
||||
nlm_shareargs nlm_unshare_3_arg;
|
||||
nlm_lockargs nlm_nm_lock_3_arg;
|
||||
nlm_notify nlm_free_all_3_arg;
|
||||
} argument;
|
||||
char *result;
|
||||
bool_t (*xdr_argument)(), (*xdr_result)();
|
||||
char *(*local)();
|
||||
|
||||
switch (rqstp->rq_proc)
|
||||
{
|
||||
case NULLPROC:
|
||||
(void)svc_sendreply(transp, xdr_void, (char *)NULL);
|
||||
return;
|
||||
|
||||
case NLM_SHARE:
|
||||
xdr_argument = xdr_nlm_shareargs;
|
||||
xdr_result = xdr_nlm_shareres;
|
||||
local = (char *(*)()) nlm_share_3;
|
||||
break;
|
||||
|
||||
case NLM_UNSHARE:
|
||||
xdr_argument = xdr_nlm_shareargs;
|
||||
xdr_result = xdr_nlm_shareres;
|
||||
local = (char *(*)()) nlm_unshare_3;
|
||||
break;
|
||||
|
||||
case NLM_NM_LOCK:
|
||||
xdr_argument = xdr_nlm_lockargs;
|
||||
xdr_result = xdr_nlm_res;
|
||||
local = (char *(*)()) nlm_nm_lock_3;
|
||||
break;
|
||||
|
||||
case NLM_FREE_ALL:
|
||||
xdr_argument = xdr_nlm_notify;
|
||||
xdr_result = xdr_void;
|
||||
local = (char *(*)()) nlm_free_all_3;
|
||||
break;
|
||||
|
||||
default:
|
||||
svcerr_noproc(transp);
|
||||
return;
|
||||
}
|
||||
bzero((char *)&argument, sizeof(argument));
|
||||
if (!svc_getargs(transp, xdr_argument, (caddr_t)&argument))
|
||||
{
|
||||
syslog(LOG_ERR, "RPC received with invalid arguments");
|
||||
svcerr_decode(transp);
|
||||
return;
|
||||
}
|
||||
result = (*local)(&argument, rqstp);
|
||||
if (result != NULL && !svc_sendreply(transp, xdr_result, result))
|
||||
{
|
||||
svcerr_systemerr(transp);
|
||||
}
|
||||
if (!svc_freeargs(transp, xdr_argument, (caddr_t)&argument))
|
||||
{
|
||||
syslog(LOG_ERR, "unable to free arguments");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
||||
#include <rpc/rpc.h>
|
||||
#include <syslog.h>
|
||||
#include <rpcsvc/sm_inter.h> /* protocol to talk to rpc.statd */
|
||||
#include <rpcsvc/nlm_prot.h> /* The protocol we are implementing */
|
||||
#include "nlm_prot.h" /* The protocol we are implementing */
|
||||
|
||||
|
||||
/* global variables ------------------------------------------------------- */
|
||||
|
@ -252,7 +252,7 @@ static void transmit_result(int opcode, nlm_res *result, struct svc_req *req)
|
||||
Notes:
|
||||
*/
|
||||
|
||||
nlm_testres *nlm_test_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
nlm_testres *nlm_test_1_svc(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_testres res;
|
||||
if (debug_level) log_from_addr("nlm_test", rqstp);
|
||||
@ -267,7 +267,7 @@ nlm_testres *nlm_test_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
return (&res);
|
||||
}
|
||||
|
||||
void *nlm_test_msg_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
void *nlm_test_msg_1_svc(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
nlm_testres res;
|
||||
static char dummy;
|
||||
@ -304,7 +304,7 @@ void *nlm_test_msg_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
Notes: *** grace period support missing
|
||||
*/
|
||||
|
||||
nlm_res *nlm_lock_1(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
nlm_res *nlm_lock_1_svc(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_lock", rqstp);
|
||||
@ -316,7 +316,7 @@ nlm_res *nlm_lock_1(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
return (&res);
|
||||
}
|
||||
|
||||
void *nlm_lock_msg_1(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
void *nlm_lock_msg_1_svc(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
|
||||
@ -336,7 +336,7 @@ void *nlm_lock_msg_1(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
Notes:
|
||||
*/
|
||||
|
||||
nlm_res *nlm_cancel_1(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
nlm_res *nlm_cancel_1_svc(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_cancel", rqstp);
|
||||
@ -350,7 +350,7 @@ nlm_res *nlm_cancel_1(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
return (&res);
|
||||
}
|
||||
|
||||
void *nlm_cancel_msg_1(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
void *nlm_cancel_msg_1_svc(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_cancel_msg", rqstp);
|
||||
@ -372,7 +372,7 @@ void *nlm_cancel_msg_1(nlm_cancargs *arg, struct svc_req *rqstp)
|
||||
re-try an unlock that has already succeeded.
|
||||
*/
|
||||
|
||||
nlm_res *nlm_unlock_1(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
nlm_res *nlm_unlock_1_svc(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_unlock", rqstp);
|
||||
@ -383,7 +383,7 @@ nlm_res *nlm_unlock_1(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
return (&res);
|
||||
}
|
||||
|
||||
void *nlm_unlock_msg_1(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
void *nlm_unlock_msg_1_svc(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_unlock_msg", rqstp);
|
||||
@ -414,7 +414,7 @@ void *nlm_unlock_msg_1(nlm_unlockargs *arg, struct svc_req *rqstp)
|
||||
Notes:
|
||||
*/
|
||||
|
||||
nlm_res *nlm_granted_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
nlm_res *nlm_granted_1_svc(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_granted", rqstp);
|
||||
@ -426,7 +426,7 @@ nlm_res *nlm_granted_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
return (&res);
|
||||
}
|
||||
|
||||
void *nlm_granted_msg_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
void *nlm_granted_msg_1_svc(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_granted_msg", rqstp);
|
||||
@ -443,7 +443,7 @@ void *nlm_granted_msg_1(nlm_testargs *arg, struct svc_req *rqstp)
|
||||
Returns: Nothing
|
||||
*/
|
||||
|
||||
void *nlm_test_res_1(nlm_testres *arg, struct svc_req *rqstp)
|
||||
void *nlm_test_res_1_svc(nlm_testres *arg, struct svc_req *rqstp)
|
||||
{
|
||||
if (debug_level) log_from_addr("nlm_test_res", rqstp);
|
||||
return (NULL);
|
||||
@ -455,7 +455,7 @@ void *nlm_test_res_1(nlm_testres *arg, struct svc_req *rqstp)
|
||||
Returns: Nothing
|
||||
*/
|
||||
|
||||
void *nlm_lock_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
void *nlm_lock_res_1_svc(nlm_res *arg, struct svc_req *rqstp)
|
||||
{
|
||||
if (debug_level) log_from_addr("nlm_lock_res", rqstp);
|
||||
|
||||
@ -468,7 +468,7 @@ void *nlm_lock_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
Returns: Nothing
|
||||
*/
|
||||
|
||||
void *nlm_cancel_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
void *nlm_cancel_res_1_svc(nlm_res *arg, struct svc_req *rqstp)
|
||||
{
|
||||
if (debug_level) log_from_addr("nlm_cancel_res", rqstp);
|
||||
return (NULL);
|
||||
@ -480,7 +480,7 @@ void *nlm_cancel_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
Returns: Nothing
|
||||
*/
|
||||
|
||||
void *nlm_unlock_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
void *nlm_unlock_res_1_svc(nlm_res *arg, struct svc_req *rqstp)
|
||||
{
|
||||
if (debug_level) log_from_addr("nlm_unlock_res", rqstp);
|
||||
return (NULL);
|
||||
@ -492,7 +492,7 @@ void *nlm_unlock_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
Returns: Nothing
|
||||
*/
|
||||
|
||||
void *nlm_granted_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
void *nlm_granted_res_1_svc(nlm_res *arg, struct svc_req *rqstp)
|
||||
{
|
||||
if (debug_level) log_from_addr("nlm_granted_res", rqstp);
|
||||
return (NULL);
|
||||
@ -515,7 +515,7 @@ void *nlm_granted_res_1(nlm_res *arg, struct svc_req *rqstp)
|
||||
to retry if required.
|
||||
*/
|
||||
|
||||
nlm_shareres *nlm_share_3(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
nlm_shareres *nlm_share_3_svc(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_shareres res;
|
||||
if (debug_level) log_from_addr("nlm_share", rqstp);
|
||||
@ -533,7 +533,7 @@ nlm_shareres *nlm_share_3(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
Notes:
|
||||
*/
|
||||
|
||||
nlm_shareres *nlm_unshare_3(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
nlm_shareres *nlm_unshare_3_svc(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_shareres res;
|
||||
if (debug_level) log_from_addr("nlm_unshare", rqstp);
|
||||
@ -555,7 +555,7 @@ nlm_shareres *nlm_unshare_3(nlm_shareargs *arg, struct svc_req *rqstp)
|
||||
respond to the statd protocol.
|
||||
*/
|
||||
|
||||
nlm_res *nlm_nm_lock_3(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
nlm_res *nlm_nm_lock_3_svc(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static nlm_res res;
|
||||
if (debug_level) log_from_addr("nlm_nm_lock", rqstp);
|
||||
@ -577,7 +577,7 @@ nlm_res *nlm_nm_lock_3(nlm_lockargs *arg, struct svc_req *rqstp)
|
||||
using monitored locks.
|
||||
*/
|
||||
|
||||
void *nlm_free_all_3(nlm_notify *arg, struct svc_req *rqstp)
|
||||
void *nlm_free_all_3_svc(nlm_notify *arg, struct svc_req *rqstp)
|
||||
{
|
||||
static char dummy;
|
||||
|
||||
|
@ -314,11 +314,15 @@ int main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
clnt_control(cli, CLGET_TIMEOUT, &tim);
|
||||
printf("Default timeout was %d.%d\n", tim.tv_sec, tim.tv_usec);
|
||||
tim.tv_usec = -1;
|
||||
tim.tv_sec = -1;
|
||||
clnt_control(cli, CLSET_TIMEOUT, &tim);
|
||||
clnt_control(cli, CLGET_TIMEOUT, &tim);
|
||||
printf("timeout now %d.%d\n", tim.tv_sec, tim.tv_usec);
|
||||
|
||||
|
||||
arg.cookie.n_len = 4;
|
||||
arg.cookie.n_bytes = "hello";
|
||||
|
Loading…
Reference in New Issue
Block a user