From: Antonio Huete Jimenez Date: Thu, 27 Nov 2014 23:02:36 +0000 (+0100) Subject: rpc - Convert some daemons to TI-RPC X-Git-Url: https://gitweb.dragonflybsd.org/~nant/dragonfly.git/commitdiff_plain/d37f73b6391aefe5c2d10f0664242f4ee7f1c7bd rpc - Convert some daemons to TI-RPC - This follows up commit ce0e08e21d42c06c0014fae6b9d27144aa5109b0 --- diff --git a/libexec/rpc.rquotad/rquotad.c b/libexec/rpc.rquotad/rquotad.c index 268a2f8324..8b87484c18 100644 --- a/libexec/rpc.rquotad/rquotad.c +++ b/libexec/rpc.rquotad/rquotad.c @@ -29,9 +29,9 @@ #include #include -#include #include #include +#include static void cleanup(int); static void rquota_service(struct svc_req *request, SVCXPRT *transp); @@ -57,7 +57,7 @@ int from_inetd = 1; void cleanup(int signo __unused) { - (void) pmap_unset(RQUOTAPROG, RQUOTAVERS); + (void) rpcb_unset(RQUOTAPROG, RQUOTAVERS, NULL); exit(0); } @@ -65,22 +65,19 @@ int main(void) { SVCXPRT *transp; - int sock = 0; - int proto = 0; - struct sockaddr_in from; + int ok; + struct sockaddr_storage from; int fromlen; fromlen = sizeof(from); if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) { from_inetd = 0; - sock = RPC_ANYSOCK; - proto = IPPROTO_UDP; } if (!from_inetd) { daemon(0, 0); - (void) pmap_unset(RQUOTAPROG, RQUOTAVERS); + (void) rpcb_unset(RQUOTAPROG, RQUOTAVERS, NULL); (void) signal(SIGINT, cleanup); (void) signal(SIGTERM, cleanup); @@ -90,13 +87,19 @@ main(void) openlog("rpc.rquotad", LOG_CONS|LOG_PID, LOG_DAEMON); /* create and register the service */ - transp = svcudp_create(sock); - if (transp == NULL) { - syslog(LOG_ERR, "couldn't create udp service"); - exit(1); - } - if (!svc_register(transp, RQUOTAPROG, RQUOTAVERS, rquota_service, proto)) { - syslog(LOG_ERR, "unable to register (RQUOTAPROG, RQUOTAVERS, %s)", proto?"udp":"(inetd)"); + if (from_inetd) { + transp = svc_tli_create(0, NULL, NULL, 0, 0); + if (transp == NULL) { + syslog(LOG_ERR, "couldn't create udp service."); + exit(1); + } + ok = svc_reg(transp, RQUOTAPROG, RQUOTAVERS, + rquota_service, NULL); + } else + ok = svc_create(rquota_service, + RQUOTAPROG, RQUOTAVERS, "udp"); + if (!ok) { + syslog(LOG_ERR, "unable to register (RQUOTAPROG, RQUOTAVERS, %s)", (!from_inetd)?"udp":"(inetd)"); exit(1); } diff --git a/libexec/rpc.rstatd/rstatd.c b/libexec/rpc.rstatd/rstatd.c index d6d2ee6b90..1a154f209a 100644 --- a/libexec/rpc.rstatd/rstatd.c +++ b/libexec/rpc.rstatd/rstatd.c @@ -33,7 +33,6 @@ #include #include #include -#include #include extern void rstat_service(); @@ -44,9 +43,9 @@ int closedown = 20; /* how long to wait before going dormant */ void cleanup(int sig) { - (void) pmap_unset(RSTATPROG, RSTATVERS_TIME); - (void) pmap_unset(RSTATPROG, RSTATVERS_SWTCH); - (void) pmap_unset(RSTATPROG, RSTATVERS_ORIG); + (void) rpcb_unset(RSTATPROG, RSTATVERS_TIME, NULL); + (void) rpcb_unset(RSTATPROG, RSTATVERS_SWTCH, NULL); + (void) rpcb_unset(RSTATPROG, RSTATVERS_ORIG, NULL); exit(0); } @@ -54,9 +53,8 @@ int main(int argc, char *argv[]) { SVCXPRT *transp; - int sock = 0; - int proto = 0; - struct sockaddr_in from; + int ok; + struct sockaddr_storage from; int fromlen; if (argc == 2) @@ -70,16 +68,14 @@ main(int argc, char *argv[]) fromlen = sizeof(from); if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) { from_inetd = 0; - sock = RPC_ANYSOCK; - proto = IPPROTO_UDP; } if (!from_inetd) { daemon(0, 0); - (void)pmap_unset(RSTATPROG, RSTATVERS_TIME); - (void)pmap_unset(RSTATPROG, RSTATVERS_SWTCH); - (void)pmap_unset(RSTATPROG, RSTATVERS_ORIG); + (void)rpcb_unset(RSTATPROG, RSTATVERS_TIME, NULL); + (void)rpcb_unset(RSTATPROG, RSTATVERS_SWTCH, NULL); + (void)rpcb_unset(RSTATPROG, RSTATVERS_ORIG, NULL); (void) signal(SIGINT, cleanup); (void) signal(SIGTERM, cleanup); @@ -88,22 +84,40 @@ main(int argc, char *argv[]) openlog("rpc.rstatd", LOG_CONS|LOG_PID, LOG_DAEMON); - transp = svcudp_create(sock); - if (transp == NULL) { - syslog(LOG_ERR, "cannot create udp service"); - exit(1); + if (from_inetd) { + transp = svc_tli_create(0, NULL, NULL, 0, 0); + if (transp == NULL) { + syslog(LOG_ERR, "cannot create udp service."); + exit(1); + } + ok = svc_reg(transp, RSTATPROG, RSTATVERS_TIME, + rstat_service, NULL); + } else + ok = svc_create(rstat_service, + RSTATPROG, RSTATVERS_TIME, "udp"); + if (!ok) { + syslog(LOG_ERR, "unable to register (RSTATPROG, RSTATVERS_TIME, %s)", (!from_inetd)?"udp":"(inetd)"); + exit(1); } - if (!svc_register(transp, RSTATPROG, RSTATVERS_TIME, rstat_service, proto)) { - syslog(LOG_ERR, "unable to register (RSTATPROG, RSTATVERS_TIME, %s)", proto?"udp":"(inetd)"); - exit(1); + if (from_inetd) + ok = svc_reg(transp, RSTATPROG, RSTATVERS_SWTCH, + rstat_service, NULL); + else + ok = svc_create(rstat_service, + RSTATPROG, RSTATVERS_SWTCH, "udp"); + if (!ok) { + syslog(LOG_ERR, "unable to register (RSTATPROG, RSTATVERS_SWTCH, %s)", (!from_inetd)?"udp":"(inetd)"); + exit(1); } - if (!svc_register(transp, RSTATPROG, RSTATVERS_SWTCH, rstat_service, proto)) { - syslog(LOG_ERR, "unable to register (RSTATPROG, RSTATVERS_SWTCH, %s)", proto?"udp":"(inetd)"); - exit(1); - } - if (!svc_register(transp, RSTATPROG, RSTATVERS_ORIG, rstat_service, proto)) { - syslog(LOG_ERR, "unable to register (RSTATPROG, RSTATVERS_ORIG, %s)", proto?"udp":"(inetd)"); - exit(1); + if (from_inetd) + ok = svc_reg(transp, RSTATPROG, RSTATVERS_ORIG, + rstat_service, NULL); + else + ok = svc_create(rstat_service, + RSTATPROG, RSTATVERS_ORIG, "udp"); + if (!ok) { + syslog(LOG_ERR, "unable to register (RSTATPROG, RSTATVERS_ORIG, %s)", (!from_inetd)?"udp":"(inetd)"); + exit(1); } svc_run(); diff --git a/libexec/rpc.rusersd/rusersd.c b/libexec/rpc.rusersd/rusersd.c index 053b14a32c..a96e97b8ba 100644 --- a/libexec/rpc.rusersd/rusersd.c +++ b/libexec/rpc.rusersd/rusersd.c @@ -31,7 +31,7 @@ #include #include -#include +#include #include #include #define utmp rutmp @@ -45,8 +45,8 @@ int from_inetd = 1; void cleanup(int sig) { - (void) pmap_unset(RUSERSPROG, RUSERSVERS_IDLE); - (void) pmap_unset(RUSERSPROG, RUSERSVERS_ORIG); + (void) rpcb_unset(RUSERSPROG, RUSERSVERS_IDLE, NULL); + (void) rpcb_unset(RUSERSPROG, RUSERSVERS_ORIG, NULL); exit(0); } @@ -54,9 +54,8 @@ int main(int argc, char *argv[]) { SVCXPRT *transp; - int sock = 0; - int proto = 0; - struct sockaddr_in from; + int ok; + struct sockaddr_storage from; int fromlen; /* @@ -65,8 +64,6 @@ main(int argc, char *argv[]) fromlen = sizeof(from); if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) { from_inetd = 0; - sock = RPC_ANYSOCK; - proto = IPPROTO_UDP; } if (!from_inetd) { @@ -82,21 +79,32 @@ main(int argc, char *argv[]) openlog("rpc.rusersd", LOG_CONS|LOG_PID, LOG_DAEMON); - transp = svcudp_create(sock); - if (transp == NULL) { - syslog(LOG_ERR, "cannot create udp service"); - exit(1); - } - if (!svc_register(transp, RUSERSPROG, RUSERSVERS_IDLE, rusers_service, proto)) { - syslog(LOG_ERR, "unable to register (RUSERSPROG, RUSERSVERS_IDLE, %s)", proto?"udp":"(inetd)"); + if (from_inetd) { + transp = svc_tli_create(0, NULL, NULL, 0, 0); + if (transp == NULL) { + syslog(LOG_ERR, "cannot create udp service."); + exit(1); + } + ok = svc_reg(transp, RUSERSPROG, RUSERSVERS_IDLE, + rusers_service, NULL); + } else + ok = svc_create(rusers_service, + RUSERSPROG, RUSERSVERS_IDLE, "udp"); + if (!ok) { + syslog(LOG_ERR, "unable to register (RUSERSPROG, RUSERSVERS_IDLE, %s)", (!from_inetd)?"udp":"(inetd)"); exit(1); } - if (!svc_register(transp, RUSERSPROG, RUSERSVERS_ORIG, rusers_service, proto)) { - syslog(LOG_ERR, "unable to register (RUSERSPROG, RUSERSVERS_ORIG, %s)", proto?"udp":"(inetd)"); + if (from_inetd) + ok = svc_reg(transp, RUSERSPROG, RUSERSVERS_ORIG, + rusers_service, NULL); + else + ok = svc_create(rusers_service, + RUSERSPROG, RUSERSVERS_ORIG, "udp"); + if (!ok) { + syslog(LOG_ERR, "unable to register (RUSERSPROG, RUSERSVERS_ORIG, %s)", (!from_inetd)?"udp":"(inetd)"); exit(1); } - svc_run(); syslog(LOG_ERR, "svc_run returned"); exit(1); diff --git a/libexec/rpc.rwalld/rwalld.c b/libexec/rpc.rwalld/rwalld.c index 50c94f840b..8929a7cf4d 100644 --- a/libexec/rpc.rwalld/rwalld.c +++ b/libexec/rpc.rwalld/rwalld.c @@ -37,7 +37,6 @@ #include #include #include -#include #include #include #include @@ -62,10 +61,8 @@ int main(int argc, char *argv[]) { SVCXPRT *transp; - int s, salen; - struct sockaddr_in sa; - int sock = 0; - int proto = 0; + int ok, salen; + struct sockaddr_storage sa; if (argc == 2 && !strcmp(argv[1], "-n")) nodaemon = 1; @@ -86,42 +83,33 @@ main(int argc, char *argv[]) salen = sizeof(sa); if (getsockname(0, (struct sockaddr *)&sa, &salen) < 0) { from_inetd = 0; - sock = RPC_ANYSOCK; - proto = IPPROTO_UDP; } if (!from_inetd) { if (!nodaemon) possess(); - (void)pmap_unset(WALLPROG, WALLVERS); - if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) - err(1, "socket"); - bzero((char *)&sa, sizeof sa); - if (bind(s, (struct sockaddr *)&sa, sizeof sa) < 0) - err(1, "bind"); - - salen = sizeof sa; - if (getsockname(s, (struct sockaddr *)&sa, &salen)) - err(1, "getsockname"); - - pmap_set(WALLPROG, WALLVERS, IPPROTO_UDP, ntohs(sa.sin_port)); - if (dup2(s, 0) < 0) - err(1, "dup2"); - (void)pmap_unset(WALLPROG, WALLVERS); + (void)rpcb_unset(WALLPROG, WALLVERS, NULL); } (void)signal(SIGCHLD, killkids); openlog("rpc.rwalld", LOG_CONS|LOG_PID, LOG_DAEMON); - transp = svcudp_create(sock); - if (transp == NULL) { - syslog(LOG_ERR, "cannot create udp service"); - exit(1); - } - if (!svc_register(transp, WALLPROG, WALLVERS, wallprog_1, proto)) { - syslog(LOG_ERR, "unable to register (WALLPROG, WALLVERS, %s)", proto?"udp":"(inetd)"); + /* create and register the service */ + if (from_inetd) { + transp = svc_tli_create(0, NULL, NULL, 0, 0); + if (transp == NULL) { + syslog(LOG_ERR, "couldn't create udp service."); + exit(1); + } + ok = svc_reg(transp, WALLPROG, WALLVERS, + wallprog_1, NULL); + } else + ok = svc_create(wallprog_1, + WALLPROG, WALLVERS, "udp"); + if (!ok) { + syslog(LOG_ERR, "unable to register (WALLPROG, WALLVERS, %s)", (!from_inetd)?"udp":"(inetd)"); exit(1); } svc_run(); diff --git a/libexec/rpc.sprayd/sprayd.c b/libexec/rpc.sprayd/sprayd.c index d74618b148..d52b61f988 100644 --- a/libexec/rpc.sprayd/sprayd.c +++ b/libexec/rpc.sprayd/sprayd.c @@ -31,7 +31,6 @@ */ #include -#include #include #include #include @@ -60,7 +59,7 @@ static int from_inetd = 1; void cleanup(int sig) { - (void) pmap_unset(SPRAYPROG, SPRAYVERS); + (void)rpcb_unset(SPRAYPROG, SPRAYVERS, NULL); exit(0); } @@ -74,8 +73,7 @@ int main(int argc, char *argv[]) { SVCXPRT *transp; - int sock = 0; - int proto = 0; + int ok; struct sockaddr_in from; int fromlen; @@ -85,14 +83,12 @@ main(int argc, char *argv[]) fromlen = sizeof(from); if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) { from_inetd = 0; - sock = RPC_ANYSOCK; - proto = IPPROTO_UDP; } if (!from_inetd) { daemon(0, 0); - (void) pmap_unset(SPRAYPROG, SPRAYVERS); + (void) rpcb_unset(SPRAYPROG, SPRAYVERS, NULL); (void) signal(SIGINT, cleanup); (void) signal(SIGTERM, cleanup); @@ -104,15 +100,22 @@ main(int argc, char *argv[]) openlog("rpc.sprayd", LOG_CONS|LOG_PID, LOG_DAEMON); - transp = svcudp_create(sock); - if (transp == NULL) { - syslog(LOG_ERR, "cannot create udp service"); - return 1; - } - if (!svc_register(transp, SPRAYPROG, SPRAYVERS, spray_service, proto)) { + if (from_inetd) { + transp = svc_tli_create(0, NULL, NULL, 0, 0); + if (transp == NULL) { + syslog(LOG_ERR, "cannot create udp service."); + exit(1); + } + ok = svc_reg(transp, SPRAYPROG, SPRAYVERS, + spray_service, NULL); + } else + ok = svc_create(spray_service, + SPRAYPROG, SPRAYVERS, "udp"); + + if (!ok) { syslog(LOG_ERR, "unable to register (SPRAYPROG, SPRAYVERS, %s)", - proto ? "udp" : "(inetd)"); + (!from_inetd)?"udp":"(inetd)"); return 1; } diff --git a/usr.sbin/rpc.statd/statd.c b/usr.sbin/rpc.statd/statd.c index 0049a6281a..7bd119d952 100644 --- a/usr.sbin/rpc.statd/statd.c +++ b/usr.sbin/rpc.statd/statd.c @@ -39,9 +39,8 @@ #include #include #include -#include #include -#include +#include #include #include #include @@ -56,7 +55,6 @@ static void usage(void); int main(int argc, char **argv) { - SVCXPRT *transp; struct sigaction sa; if (argc > 1) @@ -66,19 +64,12 @@ main(int argc, char **argv) debug = 1; } - pmap_unset(SM_PROG, SM_VERS); - - transp = svcudp_create(RPC_ANYSOCK); - if (transp == NULL) - errx(1, "cannot create udp service"); - if (!svc_register(transp, SM_PROG, SM_VERS, sm_prog_1, IPPROTO_UDP)) - errx(1, "unable to register (SM_PROG, SM_VERS, udp)"); + rpcb_unset(SM_PROG, SM_VERS, NULL); - transp = svctcp_create(RPC_ANYSOCK, 0, 0); - if (transp == NULL) + if (!svc_create(sm_prog_1, SM_PROG, SM_VERS, "udp")) + errx(1, "cannot create udp service"); + if (!svc_create(sm_prog_1, SM_PROG, SM_VERS, "tcp")) errx(1, "cannot create tcp service"); - if (!svc_register(transp, SM_PROG, SM_VERS, sm_prog_1, IPPROTO_TCP)) - errx(1, "unable to register (SM_PROG, SM_VERS, tcp)"); init_file("/var/db/statd.status"); /* Note that it is NOT sensible to run this program from inetd - the */