static void smoke_1(struct svc_req *rqstp, SVCXPRT *transp) { union { data get_me_my_supply_1_arg; } argument; char *result; xdrproc_t xdr_argument, xdr_result; char *(*local)(char *, struct svc_req *); _rpcsvcdirty = 1; switch (rqstp->rq_proc) { case NULLPROC: (void) svc_sendreply(transp, (xdrproc_t) xdr_void, (char *)NULL); _rpcsvcdirty = 0; return; case GET_ME_MY_SUPPLY: xdr_argument = (xdrproc_t) xdr_data; xdr_result = (xdrproc_t) xdr_int; local = (char *(*)(char *, struct svc_req *)) get_me_my_supply_1_svc; break; default: svcerr_noproc(transp); _rpcsvcdirty = 0; return; } (void) memset((char *)&argument, 0, sizeof (argument)); if (!svc_getargs(transp, xdr_argument, (caddr_t) &argument)) { svcerr_decode(transp); _rpcsvcdirty = 0; return; } result = (*local)((char *)&argument, rqstp); if (result != NULL && !svc_sendreply(transp, (xdrproc_t) xdr_result, result)) { svcerr_systemerr(transp); } if (!svc_freeargs(transp, xdr_argument, (caddr_t) &argument)) { _msgout("unable to free arguments"); exit(1); } _rpcsvcdirty = 0; return; }
int main(int argc, char *argv[]) { register SVCXPRT *transp = NULL; int sock; int proto = 0; struct sockaddr_in saddr; int asize = sizeof (saddr); int ch; while ((ch = getopt(argc, argv, "p:h")) != -1) { switch (ch) { case 'p': yp_dir = optarg; break; default: usage(); break; } } #ifdef foo load_securenets(); #endif if (svc_auth_reg(AUTH_DES, _svcauth_des) == -1) { yp_error("failed to register AUTH_DES flavor"); exit(1); } if (getsockname(0, (struct sockaddr *)&saddr, &asize) == 0) { int ssize = sizeof (int); if (saddr.sin_family != AF_INET) exit(1); if (getsockopt(0, SOL_SOCKET, SO_TYPE, (char *)&_rpcfdtype, &ssize) == -1) exit(1); sock = 0; _rpcpmstart = 1; proto = 0; openlog("rpc.ypupdatedd", LOG_PID, LOG_DAEMON); } else { #ifndef RPC_SVC_FG if (daemon(0,0)) { err(1, "cannot fork"); } openlog("rpc.ypupdated", LOG_PID, LOG_DAEMON); #endif sock = RPC_ANYSOCK; (void) pmap_unset(YPU_PROG, YPU_VERS); } if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_DGRAM)) { transp = svcudp_create(sock); if (transp == NULL) { _msgout("cannot create udp service."); exit(1); } if (!_rpcpmstart) proto = IPPROTO_UDP; if (!svc_register(transp, YPU_PROG, YPU_VERS, ypu_prog_1, proto)) { _msgout("unable to register (YPU_PROG, YPU_VERS, udp)."); exit(1); } } if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_STREAM)) { transp = svctcp_create(sock, 0, 0); if (transp == NULL) { _msgout("cannot create tcp service."); exit(1); } if (!_rpcpmstart) proto = IPPROTO_TCP; if (!svc_register(transp, YPU_PROG, YPU_VERS, ypu_prog_1, proto)) { _msgout("unable to register (YPU_PROG, YPU_VERS, tcp)."); exit(1); } } if (transp == (SVCXPRT *)NULL) { _msgout("could not create a handle"); exit(1); } if (_rpcpmstart) { (void) signal(SIGALRM, (SIG_PF) closedown); (void) alarm(_RPCSVC_CLOSEDOWN/2); } (void) signal(SIGPIPE, SIG_IGN); (void) signal(SIGCHLD, (SIG_PF) reaper); (void) signal(SIGTERM, (SIG_PF) reaper); (void) signal(SIGINT, (SIG_PF) reaper); (void) signal(SIGHUP, (SIG_PF) reaper); ypupdated_svc_run(); _msgout("svc_run returned"); exit(1); /* NOTREACHED */ }
int main(int argc, char *argv[]) { register SVCXPRT *transp = NULL; int sock; int proto = 0; struct sockaddr_in saddr; int asize = sizeof (saddr); int ch; while ((ch = getopt(argc, argv, "p:h")) != -1) { switch (ch) { case 'p': yp_dir = optarg; break; default: usage(); break; } } load_securenets(); if (getsockname(0, (struct sockaddr *)&saddr, &asize) == 0) { int ssize = sizeof (int); if (saddr.sin_family != AF_INET) exit(1); if (getsockopt(0, SOL_SOCKET, SO_TYPE, (char *)&_rpcfdtype, &ssize) == -1) exit(1); sock = 0; _rpcpmstart = 1; proto = 0; openlog("rpc.ypxfrd", LOG_PID, LOG_DAEMON); } else { #ifndef RPC_SVC_FG int size; int pid, i; pid = fork(); if (pid < 0) err(1, "fork"); if (pid) exit(0); size = getdtablesize(); for (i = 0; i < size; i++) (void) close(i); i = open(_PATH_CONSOLE, 2); (void) dup2(i, 1); (void) dup2(i, 2); i = open(_PATH_TTY, 2); if (i >= 0) { (void) ioctl(i, TIOCNOTTY, (char *)NULL); (void) close(i); } openlog("rpc.ypxfrd", LOG_PID, LOG_DAEMON); #endif sock = RPC_ANYSOCK; (void) pmap_unset(YPXFRD_FREEBSD_PROG, YPXFRD_FREEBSD_VERS); } if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_DGRAM)) { transp = svcudp_create(sock); if (transp == NULL) { _msgout("cannot create udp service."); exit(1); } if (!_rpcpmstart) proto = IPPROTO_UDP; if (!svc_register(transp, YPXFRD_FREEBSD_PROG, YPXFRD_FREEBSD_VERS, ypxfrd_freebsd_prog_1, proto)) { _msgout("unable to register (YPXFRD_FREEBSD_PROG, YPXFRD_FREEBSD_VERS, udp)."); exit(1); } } if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_STREAM)) { transp = svctcp_create(sock, 0, 0); if (transp == NULL) { _msgout("cannot create tcp service."); exit(1); } if (!_rpcpmstart) proto = IPPROTO_TCP; if (!svc_register(transp, YPXFRD_FREEBSD_PROG, YPXFRD_FREEBSD_VERS, ypxfrd_freebsd_prog_1, proto)) { _msgout("unable to register (YPXFRD_FREEBSD_PROG, YPXFRD_FREEBSD_VERS, tcp)."); exit(1); } } if (transp == (SVCXPRT *)NULL) { _msgout("could not create a handle"); exit(1); } if (_rpcpmstart) { (void) signal(SIGALRM, (SIG_PF) closedown); (void) alarm(_RPCSVC_CLOSEDOWN/2); } (void) signal(SIGPIPE, SIG_IGN); (void) signal(SIGCHLD, (SIG_PF) reaper); (void) signal(SIGTERM, (SIG_PF) reaper); (void) signal(SIGINT, (SIG_PF) reaper); (void) signal(SIGHUP, (SIG_PF) reaper); ypxfrd_svc_run(); _msgout("svc_run returned"); exit(1); /* NOTREACHED */ }
void mount_program_3(struct svc_req *rqstp, SVCXPRT *transp) { union { dirpath mountproc3_mnt_3_arg; dirpath mountproc3_umnt_3_arg; } argument; char *result; xdrproc_t xdr_argument, xdr_result; char *(*local)(char *, struct svc_req *); _rpcsvcdirty = 1; switch (rqstp->rq_proc) { case MOUNTPROC3_NULL: xdr_argument = (xdrproc_t) xdr_void; xdr_result = (xdrproc_t) xdr_void; local = (char *(*)(char *, struct svc_req *)) _mountproc3_null_3; break; case MOUNTPROC3_MNT: xdr_argument = (xdrproc_t) xdr_dirpath; xdr_result = (xdrproc_t) xdr_mountres3; local = (char *(*)(char *, struct svc_req *)) _mountproc3_mnt_3; break; case MOUNTPROC3_DUMP: xdr_argument = (xdrproc_t) xdr_void; xdr_result = (xdrproc_t) xdr_mountlist; local = (char *(*)(char *, struct svc_req *)) _mountproc3_dump_3; break; case MOUNTPROC3_UMNT: xdr_argument = (xdrproc_t) xdr_dirpath; xdr_result = (xdrproc_t) xdr_void; local = (char *(*)(char *, struct svc_req *)) _mountproc3_umnt_3; break; case MOUNTPROC3_UMNTALL: xdr_argument = (xdrproc_t) xdr_void; xdr_result = (xdrproc_t) xdr_void; local = (char *(*)(char *, struct svc_req *)) _mountproc3_umntall_3; break; case MOUNTPROC3_EXPORT: xdr_argument = (xdrproc_t) xdr_void; xdr_result = (xdrproc_t) xdr_exports; local = (char *(*)(char *, struct svc_req *)) _mountproc3_export_3; break; default: svcerr_noproc(transp); _rpcsvcdirty = 0; return; } (void) memset((char *)&argument, 0, sizeof (argument)); if (!svc_getargs(transp, xdr_argument, (caddr_t) &argument)) { svcerr_decode(transp); _rpcsvcdirty = 0; return; } result = (*local)((char *)&argument, rqstp); if (result != NULL && !svc_sendreply(transp, (xdrproc_t) xdr_result, result)) { svcerr_systemerr(transp); } if (!svc_freeargs(transp, xdr_argument, (caddr_t) &argument)) { _msgout("unable to free arguments"); exit(1); } _rpcsvcdirty = 0; return; }
void nfs_program_3(struct svc_req *rqstp, SVCXPRT *transp) { union { GETATTR3args nfsproc3_getattr_3_arg; SETATTR3args nfsproc3_setattr_3_arg; LOOKUP3args nfsproc3_lookup_3_arg; ACCESS3args nfsproc3_access_3_arg; READLINK3args nfsproc3_readlink_3_arg; READ3args nfsproc3_read_3_arg; WRITE3args nfsproc3_write_3_arg; CREATE3args nfsproc3_create_3_arg; MKDIR3args nfsproc3_mkdir_3_arg; SYMLINK3args nfsproc3_symlink_3_arg; MKNOD3args nfsproc3_mknod_3_arg; REMOVE3args nfsproc3_remove_3_arg; RMDIR3args nfsproc3_rmdir_3_arg; RENAME3args nfsproc3_rename_3_arg; LINK3args nfsproc3_link_3_arg; READDIR3args nfsproc3_readdir_3_arg; READDIRPLUS3args nfsproc3_readdirplus_3_arg; FSSTAT3args nfsproc3_fsstat_3_arg; FSINFO3args nfsproc3_fsinfo_3_arg; PATHCONF3args nfsproc3_pathconf_3_arg; COMMIT3args nfsproc3_commit_3_arg; } argument; char *result; xdrproc_t xdr_argument, xdr_result; char *(*local)(char *, struct svc_req *); _rpcsvcdirty = 1; switch (rqstp->rq_proc) { case NFSPROC3_NULL: xdr_argument = (xdrproc_t) xdr_void; xdr_result = (xdrproc_t) xdr_void; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_null_3; break; case NFSPROC3_GETATTR: xdr_argument = (xdrproc_t) xdr_GETATTR3args; xdr_result = (xdrproc_t) xdr_GETATTR3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_getattr_3; break; case NFSPROC3_SETATTR: xdr_argument = (xdrproc_t) xdr_SETATTR3args; xdr_result = (xdrproc_t) xdr_SETATTR3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_setattr_3; break; case NFSPROC3_LOOKUP: xdr_argument = (xdrproc_t) xdr_LOOKUP3args; xdr_result = (xdrproc_t) xdr_LOOKUP3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_lookup_3; break; case NFSPROC3_ACCESS: xdr_argument = (xdrproc_t) xdr_ACCESS3args; xdr_result = (xdrproc_t) xdr_ACCESS3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_access_3; break; case NFSPROC3_READLINK: xdr_argument = (xdrproc_t) xdr_READLINK3args; xdr_result = (xdrproc_t) xdr_READLINK3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_readlink_3; break; case NFSPROC3_READ: xdr_argument = (xdrproc_t) xdr_READ3args; xdr_result = (xdrproc_t) xdr_READ3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_read_3; break; case NFSPROC3_WRITE: xdr_argument = (xdrproc_t) xdr_WRITE3args; xdr_result = (xdrproc_t) xdr_WRITE3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_write_3; break; case NFSPROC3_CREATE: xdr_argument = (xdrproc_t) xdr_CREATE3args; xdr_result = (xdrproc_t) xdr_CREATE3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_create_3; break; case NFSPROC3_MKDIR: xdr_argument = (xdrproc_t) xdr_MKDIR3args; xdr_result = (xdrproc_t) xdr_MKDIR3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_mkdir_3; break; case NFSPROC3_SYMLINK: xdr_argument = (xdrproc_t) xdr_SYMLINK3args; xdr_result = (xdrproc_t) xdr_SYMLINK3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_symlink_3; break; case NFSPROC3_MKNOD: xdr_argument = (xdrproc_t) xdr_MKNOD3args; xdr_result = (xdrproc_t) xdr_MKNOD3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_mknod_3; break; case NFSPROC3_REMOVE: xdr_argument = (xdrproc_t) xdr_REMOVE3args; xdr_result = (xdrproc_t) xdr_REMOVE3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_remove_3; break; case NFSPROC3_RMDIR: xdr_argument = (xdrproc_t) xdr_RMDIR3args; xdr_result = (xdrproc_t) xdr_RMDIR3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_rmdir_3; break; case NFSPROC3_RENAME: xdr_argument = (xdrproc_t) xdr_RENAME3args; xdr_result = (xdrproc_t) xdr_RENAME3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_rename_3; break; case NFSPROC3_LINK: xdr_argument = (xdrproc_t) xdr_LINK3args; xdr_result = (xdrproc_t) xdr_LINK3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_link_3; break; case NFSPROC3_READDIR: xdr_argument = (xdrproc_t) xdr_READDIR3args; xdr_result = (xdrproc_t) xdr_READDIR3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_readdir_3; break; case NFSPROC3_READDIRPLUS: xdr_argument = (xdrproc_t) xdr_READDIRPLUS3args; xdr_result = (xdrproc_t) xdr_READDIRPLUS3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_readdirplus_3; break; case NFSPROC3_FSSTAT: xdr_argument = (xdrproc_t) xdr_FSSTAT3args; xdr_result = (xdrproc_t) xdr_FSSTAT3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_fsstat_3; break; case NFSPROC3_FSINFO: xdr_argument = (xdrproc_t) xdr_FSINFO3args; xdr_result = (xdrproc_t) xdr_FSINFO3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_fsinfo_3; break; case NFSPROC3_PATHCONF: xdr_argument = (xdrproc_t) xdr_PATHCONF3args; xdr_result = (xdrproc_t) xdr_PATHCONF3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_pathconf_3; break; case NFSPROC3_COMMIT: xdr_argument = (xdrproc_t) xdr_COMMIT3args; xdr_result = (xdrproc_t) xdr_COMMIT3res; local = (char *(*)(char *, struct svc_req *)) _nfsproc3_commit_3; break; default: svcerr_noproc(transp); _rpcsvcdirty = 0; return; } (void) memset((char *)&argument, 0, sizeof (argument)); if (!svc_getargs(transp, xdr_argument, (caddr_t) &argument)) { svcerr_decode(transp); _rpcsvcdirty = 0; return; } result = (*local)((char *)&argument, rqstp); if (result != NULL && !svc_sendreply(transp, (xdrproc_t) xdr_result, result)) { svcerr_systemerr(transp); } if (!svc_freeargs(transp, xdr_argument, (caddr_t) &argument)) { _msgout("unable to free arguments"); exit(1); } _rpcsvcdirty = 0; return; }
int main( int argc, char* argv[] ) { SVCXPRT *transp = NULL; int sock; int proto = 0; struct sockaddr_in saddr; int asize = sizeof (saddr); if (getsockname(0, (struct sockaddr *)&saddr, &asize) == 0) { int ssize = sizeof (int); if (saddr.sin_family != AF_INET) exit(1); if (getsockopt(0, SOL_SOCKET, SO_TYPE, (char *)&_rpcfdtype, &ssize) == -1) exit(1); sock = 0; _rpcpmstart = 1; proto = 0; openlog("Smoking", LOG_PID, LOG_DAEMON); } else { #ifndef RPC_SVC_FG int size; int pid, i; pid = fork(); if (pid < 0) { perror("cannot fork"); exit(1); } if (pid) exit(0); size = getdtablesize(); for (i = 0; i < size; i++) (void) close(i); i = open("/dev/console", 2); (void) dup2(i, 1); (void) dup2(i, 2); i = open("/dev/tty", 2); if (i >= 0) { (void) ioctl(i, TIOCNOTTY, (char *)NULL); (void) close(i); } openlog("Smoking", LOG_PID, LOG_DAEMON); #endif sock = RPC_ANYSOCK; (void) pmap_unset(SMOKE, SMOKERS); } if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_DGRAM)) { transp = svcudp_create(sock); if (transp == NULL) { _msgout("cannot create udp service."); exit(1); } if (!_rpcpmstart) proto = IPPROTO_UDP; if (!svc_register(transp, SMOKE, SMOKERS, smoke_1, proto)) { _msgout("unable to register (SMOKE, SMOKERS, udp)."); exit(1); } } if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_STREAM)) { if (_rpcpmstart) transp = svcfd_create(sock, 0, 0); else transp = svctcp_create(sock, 0, 0); if (transp == NULL) { _msgout("cannot create tcp service."); exit(1); } if (!_rpcpmstart) proto = IPPROTO_TCP; if (!svc_register(transp, SMOKE, SMOKERS, smoke_1, proto)) { _msgout("unable to register (SMOKE, SMOKERS, tcp)."); exit(1); } } if (transp == (SVCXPRT *)NULL) { _msgout("could not create a handle"); exit(1); } if (_rpcpmstart) { (void) signal(SIGALRM, (SIG_PF) closedown); (void) alarm(_RPCSVC_CLOSEDOWN); } svc_run(); _msgout("svc_run returned"); exit(1); /* NOTREACHED */ }