aboutsummaryrefslogtreecommitdiff
path: root/libexec/rpc.rwalld
diff options
context:
space:
mode:
authorAlfred Perlstein <alfred@FreeBSD.org>2002-07-15 18:51:57 +0000
committerAlfred Perlstein <alfred@FreeBSD.org>2002-07-15 18:51:57 +0000
commitaf37179b5f735b7f12285fb1dcf700016751c0f6 (patch)
treea7c706e5ad9f636ce740a033b0fa75319465add7 /libexec/rpc.rwalld
parent122b088a2a124a438b76843e3c7850471644ad09 (diff)
downloadsrc-af37179b5f735b7f12285fb1dcf700016751c0f6.tar.gz
src-af37179b5f735b7f12285fb1dcf700016751c0f6.zip
Port to TI/RPC and/or IPV6.
Submitted by: Jean-Luc Richier <Jean-Luc.Richier@imag.fr>
Notes
Notes: svn path=/head/; revision=100120
Diffstat (limited to 'libexec/rpc.rwalld')
-rw-r--r--libexec/rpc.rwalld/rwalld.c46
1 files changed, 17 insertions, 29 deletions
diff --git a/libexec/rpc.rwalld/rwalld.c b/libexec/rpc.rwalld/rwalld.c
index c186a4748b2b..2984717e0e68 100644
--- a/libexec/rpc.rwalld/rwalld.c
+++ b/libexec/rpc.rwalld/rwalld.c
@@ -41,7 +41,6 @@ static const char rcsid[] =
#include <syslog.h>
#include <arpa/inet.h>
#include <rpc/rpc.h>
-#include <rpc/pmap_clnt.h>
#include <rpcsvc/rwall.h>
#include <sys/socket.h>
#include <sys/types.h>
@@ -66,10 +65,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;
@@ -90,42 +87,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(&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();