summaryrefslogtreecommitdiff
path: root/sunrpc/rpcinfo.c
diff options
context:
space:
mode:
Diffstat (limited to 'sunrpc/rpcinfo.c')
-rw-r--r--sunrpc/rpcinfo.c1130
1 files changed, 602 insertions, 528 deletions
diff --git a/sunrpc/rpcinfo.c b/sunrpc/rpcinfo.c
index 30932c83a6..23fb3c0d8e 100644
--- a/sunrpc/rpcinfo.c
+++ b/sunrpc/rpcinfo.c
@@ -1,6 +1,7 @@
-/* @(#)rpcinfo.c 2.2 88/08/11 4.0 RPCSRC */
-#ifndef lint
-static char sccsid[] = "@(#)rpcinfo.c 1.22 87/08/12 SMI";
+
+/* @(#)rpcinfo.c 2.2 88/08/11 4.0 RPCSRC */
+#if !defined(lint) && defined (SCCSID)
+static char sccsid[] = "@(#)rpcinfo.c 1.22 87/08/12 SMI";
#endif
/*
@@ -41,33 +42,38 @@ static char sccsid[] = "@(#)rpcinfo.c 1.22 87/08/12 SMI";
* Mountain View, California 94043
*/
+#include <getopt.h>
+#include <string.h>
+#include <unistd.h>
#include <rpc/rpc.h>
#include <stdio.h>
#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
#include <netdb.h>
#include <rpc/pmap_prot.h>
#include <rpc/pmap_clnt.h>
#include <signal.h>
#include <ctype.h>
+#include <locale.h>
+#include <libintl.h>
#define MAXHOSTLEN 256
#define MIN_VERS ((u_long) 0)
-#define MAX_VERS ((u_long) 4294967295L)
-
-static void udpping(/*u_short portflag, int argc, char **argv*/);
-static void tcpping(/*u_short portflag, int argc, char **argv*/);
-static int pstatus(/*CLIENT *client, u_long prognum, u_long vers*/);
-static void pmapdump(/*int argc, char **argv*/);
-static bool_t reply_proc(/*void *res, struct sockaddr_in *who*/);
-static void brdcst(/*int argc, char **argv*/);
-static void deletereg(/* int argc, char **argv */) ;
-static void usage(/*void*/);
-static u_long getprognum(/*char *arg*/);
-static u_long getvers(/*char *arg*/);
-static void get_inet_address(/*struct sockaddr_in *addr, char *host*/);
-extern u_long inet_addr(); /* in 4.2BSD, arpa/inet.h called that a in_addr */
-extern char *inet_ntoa();
+#define MAX_VERS ((u_long) 4294967295UL)
+
+static void udpping (u_short portflag, int argc, char **argv);
+static void tcpping (u_short portflag, int argc, char **argv);
+static int pstatus (CLIENT *client, u_long prognum, u_long vers);
+static void pmapdump (int argc, char **argv);
+static bool_t reply_proc (void *res, struct sockaddr_in *who);
+static void brdcst (int argc, char **argv);
+static void deletereg (int argc, char **argv);
+static void usage (void);
+static u_long getprognum (char *arg);
+static u_long getvers (char *arg);
+static void get_inet_address (struct sockaddr_in *addr, char *host);
/*
* Functions to be performed.
@@ -80,365 +86,408 @@ extern char *inet_ntoa();
#define DELETES 5 /* delete registration for the service */
int
-main(argc, argv)
- int argc;
- char **argv;
+main (int argc, char **argv)
{
- register int c;
- extern char *optarg;
- extern int optind;
- int errflg;
- int function;
- u_short portnum;
-
- function = NONE;
- portnum = 0;
- errflg = 0;
- while ((c = getopt(argc, argv, "ptubdn:")) != -1) {
- switch (c) {
-
- case 'p':
- if (function != NONE)
- errflg = 1;
- else
- function = PMAPDUMP;
- break;
-
- case 't':
- if (function != NONE)
- errflg = 1;
- else
- function = TCPPING;
- break;
-
- case 'u':
- if (function != NONE)
- errflg = 1;
- else
- function = UDPPING;
- break;
-
- case 'b':
- if (function != NONE)
- errflg = 1;
- else
- function = BRDCST;
- break;
-
- case 'n':
- portnum = (u_short) atoi(optarg); /* hope we don't get bogus # */
- break;
-
- case 'd':
- if (function != NONE)
- errflg = 1;
- else
- function = DELETES;
- break;
-
- case '?':
- errflg = 1;
- }
+ register int c;
+ int errflg;
+ int function;
+ u_short portnum;
+
+ setlocale (LC_ALL, "");
+ textdomain (_libc_intl_domainname);
+
+ function = NONE;
+ portnum = 0;
+ errflg = 0;
+ while ((c = getopt (argc, argv, "ptubdn:")) != -1)
+ {
+ switch (c)
+ {
+
+ case 'p':
+ if (function != NONE)
+ errflg = 1;
+ else
+ function = PMAPDUMP;
+ break;
+
+ case 't':
+ if (function != NONE)
+ errflg = 1;
+ else
+ function = TCPPING;
+ break;
+
+ case 'u':
+ if (function != NONE)
+ errflg = 1;
+ else
+ function = UDPPING;
+ break;
+
+ case 'b':
+ if (function != NONE)
+ errflg = 1;
+ else
+ function = BRDCST;
+ break;
+
+ case 'n':
+ portnum = (u_short) atoi (optarg); /* hope we don't get bogus # */
+ break;
+
+ case 'd':
+ if (function != NONE)
+ errflg = 1;
+ else
+ function = DELETES;
+ break;
+
+ case '?':
+ errflg = 1;
}
-
- if (errflg || function == NONE) {
- usage();
- return (1);
+ }
+
+ if (errflg || function == NONE)
+ {
+ usage ();
+ return (1);
+ }
+
+ switch (function)
+ {
+
+ case PMAPDUMP:
+ if (portnum != 0)
+ {
+ usage ();
+ return (1);
}
-
- switch (function) {
-
- case PMAPDUMP:
- if (portnum != 0) {
- usage();
- return (1);
- }
- pmapdump(argc - optind, argv + optind);
- break;
-
- case UDPPING:
- udpping(portnum, argc - optind, argv + optind);
- break;
-
- case TCPPING:
- tcpping(portnum, argc - optind, argv + optind);
- break;
-
- case BRDCST:
- if (portnum != 0) {
- usage();
- return (1);
- }
- brdcst(argc - optind, argv + optind);
- break;
-
- case DELETES:
- deletereg(argc - optind, argv + optind);
- break;
+ pmapdump (argc - optind, argv + optind);
+ break;
+
+ case UDPPING:
+ udpping (portnum, argc - optind, argv + optind);
+ break;
+
+ case TCPPING:
+ tcpping (portnum, argc - optind, argv + optind);
+ break;
+
+ case BRDCST:
+ if (portnum != 0)
+ {
+ usage ();
+ return (1);
}
+ brdcst (argc - optind, argv + optind);
+ break;
- return (0);
+ case DELETES:
+ deletereg (argc - optind, argv + optind);
+ break;
+ }
+
+ return (0);
}
static void
-udpping(portnum, argc, argv)
- u_short portnum;
- int argc;
- char **argv;
+udpping (portnum, argc, argv)
+ u_short portnum;
+ int argc;
+ char **argv;
{
- struct timeval to;
- struct sockaddr_in addr;
- enum clnt_stat rpc_stat;
- CLIENT *client;
- u_long prognum, vers, minvers, maxvers;
- int sock = RPC_ANYSOCK;
- struct rpc_err rpcerr;
- int failure;
-
- if (argc < 2 || argc > 3) {
- usage();
- exit(1);
+ struct timeval to;
+ struct sockaddr_in addr;
+ enum clnt_stat rpc_stat;
+ CLIENT *client;
+ u_long prognum, vers, minvers, maxvers;
+ int sock = RPC_ANYSOCK;
+ struct rpc_err rpcerr;
+ int failure;
+
+ if (argc < 2 || argc > 3)
+ {
+ usage ();
+ exit (1);
+ }
+ prognum = getprognum (argv[1]);
+ get_inet_address (&addr, argv[0]);
+ /* Open the socket here so it will survive calls to clnt_destroy */
+ sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ if (sock < 0)
+ {
+ perror ("rpcinfo: socket");
+ exit (1);
+ }
+ failure = 0;
+ if (argc == 2)
+ {
+ /*
+ * A call to version 0 should fail with a program/version
+ * mismatch, and give us the range of versions supported.
+ */
+ addr.sin_port = htons (portnum);
+ to.tv_sec = 5;
+ to.tv_usec = 0;
+ if ((client = clntudp_create (&addr, prognum, (u_long) 0,
+ to, &sock)) == NULL)
+ {
+ clnt_pcreateerror ("rpcinfo");
+ printf (_ ("program %lu is not available\n"),
+ prognum);
+ exit (1);
+ }
+ to.tv_sec = 10;
+ to.tv_usec = 0;
+ rpc_stat = clnt_call (client, NULLPROC, (xdrproc_t) xdr_void,
+ (char *) NULL, (xdrproc_t) xdr_void,
+ (char *) NULL, to);
+ if (rpc_stat == RPC_PROGVERSMISMATCH)
+ {
+ clnt_geterr (client, &rpcerr);
+ minvers = rpcerr.re_vers.low;
+ maxvers = rpcerr.re_vers.high;
+ }
+ else if (rpc_stat == RPC_SUCCESS)
+ {
+ /*
+ * Oh dear, it DOES support version 0.
+ * Let's try version MAX_VERS.
+ */
+ addr.sin_port = htons (portnum);
+ to.tv_sec = 5;
+ to.tv_usec = 0;
+ if ((client = clntudp_create (&addr, prognum, MAX_VERS,
+ to, &sock)) == NULL)
+ {
+ clnt_pcreateerror ("rpcinfo");
+ printf (_ ("program %lu version %lu is not available\n"),
+ prognum, MAX_VERS);
+ exit (1);
+ }
+ to.tv_sec = 10;
+ to.tv_usec = 0;
+ rpc_stat = clnt_call (client, NULLPROC, (xdrproc_t) xdr_void,
+ NULL, (xdrproc_t) xdr_void, NULL, to);
+ if (rpc_stat == RPC_PROGVERSMISMATCH)
+ {
+ clnt_geterr (client, &rpcerr);
+ minvers = rpcerr.re_vers.low;
+ maxvers = rpcerr.re_vers.high;
+ }
+ else if (rpc_stat == RPC_SUCCESS)
+ {
+ /*
+ * It also supports version MAX_VERS.
+ * Looks like we have a wise guy.
+ * OK, we give them information on all
+ * 4 billion versions they support...
+ */
+ minvers = 0;
+ maxvers = MAX_VERS;
+ }
+ else
+ {
+ (void) pstatus (client, prognum, MAX_VERS);
+ exit (1);
+ }
}
- prognum = getprognum(argv[1]);
- get_inet_address(&addr, argv[0]);
- /* Open the socket here so it will survive calls to clnt_destroy */
- sock = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if (sock < 0) {
- perror("rpcinfo: socket");
- exit(1);
+ else
+ {
+ (void) pstatus (client, prognum, (u_long) 0);
+ exit (1);
}
- failure = 0;
- if (argc == 2) {
- /*
- * A call to version 0 should fail with a program/version
- * mismatch, and give us the range of versions supported.
- */
- addr.sin_port = htons(portnum);
- to.tv_sec = 5;
- to.tv_usec = 0;
- if ((client = clntudp_create(&addr, prognum, (u_long)0,
- to, &sock)) == NULL) {
- clnt_pcreateerror("rpcinfo");
- printf(_("program %lu is not available\n"),
- prognum);
- exit(1);
- }
- to.tv_sec = 10;
- to.tv_usec = 0;
- rpc_stat = clnt_call(client, NULLPROC, xdr_void, (char *)NULL,
- xdr_void, (char *)NULL, to);
- if (rpc_stat == RPC_PROGVERSMISMATCH) {
- clnt_geterr(client, &rpcerr);
- minvers = rpcerr.re_vers.low;
- maxvers = rpcerr.re_vers.high;
- } else if (rpc_stat == RPC_SUCCESS) {
- /*
- * Oh dear, it DOES support version 0.
- * Let's try version MAX_VERS.
- */
- addr.sin_port = htons(portnum);
- to.tv_sec = 5;
- to.tv_usec = 0;
- if ((client = clntudp_create(&addr, prognum, MAX_VERS,
- to, &sock)) == NULL) {
- clnt_pcreateerror("rpcinfo");
- printf(_("program %lu version %lu is not available\n"),
- prognum, MAX_VERS);
- exit(1);
- }
- to.tv_sec = 10;
- to.tv_usec = 0;
- rpc_stat = clnt_call(client, NULLPROC, xdr_void,
- (char *)NULL, xdr_void, (char *)NULL, to);
- if (rpc_stat == RPC_PROGVERSMISMATCH) {
- clnt_geterr(client, &rpcerr);
- minvers = rpcerr.re_vers.low;
- maxvers = rpcerr.re_vers.high;
- } else if (rpc_stat == RPC_SUCCESS) {
- /*
- * It also supports version MAX_VERS.
- * Looks like we have a wise guy.
- * OK, we give them information on all
- * 4 billion versions they support...
- */
- minvers = 0;
- maxvers = MAX_VERS;
- } else {
- (void) pstatus(client, prognum, MAX_VERS);
- exit(1);
- }
- } else {
- (void) pstatus(client, prognum, (u_long)0);
- exit(1);
- }
- clnt_destroy(client);
- for (vers = minvers; vers <= maxvers; vers++) {
- addr.sin_port = htons(portnum);
- to.tv_sec = 5;
- to.tv_usec = 0;
- if ((client = clntudp_create(&addr, prognum, vers,
- to, &sock)) == NULL) {
- clnt_pcreateerror("rpcinfo");
- printf(_("program %lu version %lu is not available\n"),
- prognum, vers);
- exit(1);
- }
- to.tv_sec = 10;
- to.tv_usec = 0;
- rpc_stat = clnt_call(client, NULLPROC, xdr_void,
- (char *)NULL, xdr_void, (char *)NULL, to);
- if (pstatus(client, prognum, vers) < 0)
- failure = 1;
- clnt_destroy(client);
- }
+ clnt_destroy (client);
+ for (vers = minvers; vers <= maxvers; vers++)
+ {
+ addr.sin_port = htons (portnum);
+ to.tv_sec = 5;
+ to.tv_usec = 0;
+ if ((client = clntudp_create (&addr, prognum, vers,
+ to, &sock)) == NULL)
+ {
+ clnt_pcreateerror ("rpcinfo");
+ printf (_ ("program %lu version %lu is not available\n"),
+ prognum, vers);
+ exit (1);
+ }
+ to.tv_sec = 10;
+ to.tv_usec = 0;
+ rpc_stat = clnt_call (client, NULLPROC, (xdrproc_t) xdr_void,
+ NULL, (xdrproc_t) xdr_void, NULL, to);
+ if (pstatus (client, prognum, vers) < 0)
+ failure = 1;
+ clnt_destroy (client);
}
- else {
- vers = getvers(argv[2]);
- addr.sin_port = htons(portnum);
- to.tv_sec = 5;
- to.tv_usec = 0;
- if ((client = clntudp_create(&addr, prognum, vers,
- to, &sock)) == NULL) {
- clnt_pcreateerror("rpcinfo");
- printf("program %lu version %lu is not available\n",
- prognum, vers);
- exit(1);
- }
- to.tv_sec = 10;
- to.tv_usec = 0;
- rpc_stat = clnt_call(client, 0, xdr_void, (char *)NULL,
- xdr_void, (char *)NULL, to);
- if (pstatus(client, prognum, vers) < 0)
- failure = 1;
+ }
+ else
+ {
+ vers = getvers (argv[2]);
+ addr.sin_port = htons (portnum);
+ to.tv_sec = 5;
+ to.tv_usec = 0;
+ if ((client = clntudp_create (&addr, prognum, vers,
+ to, &sock)) == NULL)
+ {
+ clnt_pcreateerror ("rpcinfo");
+ printf ("program %lu version %lu is not available\n",
+ prognum, vers);
+ exit (1);
}
- (void) close(sock); /* Close it up again */
- if (failure)
- exit(1);
+ to.tv_sec = 10;
+ to.tv_usec = 0;
+ rpc_stat = clnt_call (client, 0, (xdrproc_t) xdr_void, NULL,
+ (xdrproc_t) xdr_void, NULL, to);
+ if (pstatus (client, prognum, vers) < 0)
+ failure = 1;
+ }
+ (void) close (sock); /* Close it up again */
+ if (failure)
+ exit (1);
}
static void
-tcpping(portnum, argc, argv)
- u_short portnum;
- int argc;
- char **argv;
+tcpping (portnum, argc, argv)
+ u_short portnum;
+ int argc;
+ char **argv;
{
- struct timeval to;
- struct sockaddr_in addr;
- enum clnt_stat rpc_stat;
- CLIENT *client;
- u_long prognum, vers, minvers, maxvers;
- int sock = RPC_ANYSOCK;
- struct rpc_err rpcerr;
- int failure;
-
- if (argc < 2 || argc > 3) {
- usage();
- exit(1);
+ struct timeval to;
+ struct sockaddr_in addr;
+ enum clnt_stat rpc_stat;
+ CLIENT *client;
+ u_long prognum, vers, minvers, maxvers;
+ int sock = RPC_ANYSOCK;
+ struct rpc_err rpcerr;
+ int failure;
+
+ if (argc < 2 || argc > 3)
+ {
+ usage ();
+ exit (1);
+ }
+ prognum = getprognum (argv[1]);
+ get_inet_address (&addr, argv[0]);
+ failure = 0;
+ if (argc == 2)
+ {
+ /*
+ * A call to version 0 should fail with a program/version
+ * mismatch, and give us the range of versions supported.
+ */
+ addr.sin_port = htons (portnum);
+ if ((client = clnttcp_create (&addr, prognum, MIN_VERS,
+ &sock, 0, 0)) == NULL)
+ {
+ clnt_pcreateerror ("rpcinfo");
+ printf (_ ("program %lu is not available\n"),
+ prognum);
+ exit (1);
}
- prognum = getprognum(argv[1]);
- get_inet_address(&addr, argv[0]);
- failure = 0;
- if (argc == 2) {
- /*
- * A call to version 0 should fail with a program/version
- * mismatch, and give us the range of versions supported.
- */
- addr.sin_port = htons(portnum);
- if ((client = clnttcp_create(&addr, prognum, MIN_VERS,
- &sock, 0, 0)) == NULL) {
- clnt_pcreateerror("rpcinfo");
- printf(_("program %lu is not available\n"),
- prognum);
- exit(1);
- }
- to.tv_sec = 10;
- to.tv_usec = 0;
- rpc_stat = clnt_call(client, NULLPROC, xdr_void, (char *)NULL,
- xdr_void, (char *)NULL, to);
- if (rpc_stat == RPC_PROGVERSMISMATCH) {
- clnt_geterr(client, &rpcerr);
- minvers = rpcerr.re_vers.low;
- maxvers = rpcerr.re_vers.high;
- } else if (rpc_stat == RPC_SUCCESS) {
- /*
- * Oh dear, it DOES support version 0.
- * Let's try version MAX_VERS.
- */
- addr.sin_port = htons(portnum);
- if ((client = clnttcp_create(&addr, prognum, MAX_VERS,
- &sock, 0, 0)) == NULL) {
- clnt_pcreateerror("rpcinfo");
- printf(_("program %lu version %lu is not available\n"),
- prognum, MAX_VERS);
- exit(1);
- }
- to.tv_sec = 10;
- to.tv_usec = 0;
- rpc_stat = clnt_call(client, NULLPROC, xdr_void,
- (char *)NULL, xdr_void, (char *)NULL, to);
- if (rpc_stat == RPC_PROGVERSMISMATCH) {
- clnt_geterr(client, &rpcerr);
- minvers = rpcerr.re_vers.low;
- maxvers = rpcerr.re_vers.high;
- } else if (rpc_stat == RPC_SUCCESS) {
- /*
- * It also supports version MAX_VERS.
- * Looks like we have a wise guy.
- * OK, we give them information on all
- * 4 billion versions they support...
- */
- minvers = 0;
- maxvers = MAX_VERS;
- } else {
- (void) pstatus(client, prognum, MAX_VERS);
- exit(1);
- }
- } else {
- (void) pstatus(client, prognum, MIN_VERS);
- exit(1);
- }
- clnt_destroy(client);
- (void) close(sock);
- sock = RPC_ANYSOCK; /* Re-initialize it for later */
- for (vers = minvers; vers <= maxvers; vers++) {
- addr.sin_port = htons(portnum);
- if ((client = clnttcp_create(&addr, prognum, vers,
- &sock, 0, 0)) == NULL) {
- clnt_pcreateerror("rpcinfo");
- printf(_("program %lu version %lu is not available\n"),
- prognum, vers);
- exit(1);
- }
- to.tv_usec = 0;
- to.tv_sec = 10;
- rpc_stat = clnt_call(client, 0, xdr_void, (char *)NULL,
- xdr_void, (char *)NULL, to);
- if (pstatus(client, prognum, vers) < 0)
- failure = 1;
- clnt_destroy(client);
- (void) close(sock);
- sock = RPC_ANYSOCK;
- }
+ to.tv_sec = 10;
+ to.tv_usec = 0;
+ rpc_stat = clnt_call (client, NULLPROC, (xdrproc_t) xdr_void, NULL,
+ (xdrproc_t) xdr_void, NULL, to);
+ if (rpc_stat == RPC_PROGVERSMISMATCH)
+ {
+ clnt_geterr (client, &rpcerr);
+ minvers = rpcerr.re_vers.low;
+ maxvers = rpcerr.re_vers.high;
}
- else {
- vers = getvers(argv[2]);
- addr.sin_port = htons(portnum);
- if ((client = clnttcp_create(&addr, prognum, vers, &sock,
- 0, 0)) == NULL) {
- clnt_pcreateerror("rpcinfo");
- printf(_("program %lu version %lu is not available\n"),
- prognum, vers);
- exit(1);
- }
- to.tv_usec = 0;
- to.tv_sec = 10;
- rpc_stat = clnt_call(client, 0, xdr_void, (char *)NULL,
- xdr_void, (char *)NULL, to);
- if (pstatus(client, prognum, vers) < 0)
- failure = 1;
+ else if (rpc_stat == RPC_SUCCESS)
+ {
+ /*
+ * Oh dear, it DOES support version 0.
+ * Let's try version MAX_VERS.
+ */
+ addr.sin_port = htons (portnum);
+ if ((client = clnttcp_create (&addr, prognum, MAX_VERS,
+ &sock, 0, 0)) == NULL)
+ {
+ clnt_pcreateerror ("rpcinfo");
+ printf (_ ("program %lu version %lu is not available\n"),
+ prognum, MAX_VERS);
+ exit (1);
+ }
+ to.tv_sec = 10;
+ to.tv_usec = 0;
+ rpc_stat = clnt_call (client, NULLPROC, (xdrproc_t) xdr_void,
+ NULL, (xdrproc_t) xdr_void, NULL, to);
+ if (rpc_stat == RPC_PROGVERSMISMATCH)
+ {
+ clnt_geterr (client, &rpcerr);
+ minvers = rpcerr.re_vers.low;
+ maxvers = rpcerr.re_vers.high;
+ }
+ else if (rpc_stat == RPC_SUCCESS)
+ {
+ /*
+ * It also supports version MAX_VERS.
+ * Looks like we have a wise guy.
+ * OK, we give them information on all
+ * 4 billion versions they support...
+ */
+ minvers = 0;
+ maxvers = MAX_VERS;
+ }
+ else
+ {
+ (void) pstatus (client, prognum, MAX_VERS);
+ exit (1);
+ }
}
- if (failure)
- exit(1);
+ else
+ {
+ (void) pstatus (client, prognum, MIN_VERS);
+ exit (1);
+ }
+ clnt_destroy (client);
+ (void) close (sock);
+ sock = RPC_ANYSOCK; /* Re-initialize it for later */
+ for (vers = minvers; vers <= maxvers; vers++)
+ {
+ addr.sin_port = htons (portnum);
+ if ((client = clnttcp_create (&addr, prognum, vers,
+ &sock, 0, 0)) == NULL)
+ {
+ clnt_pcreateerror ("rpcinfo");
+ printf (_ ("program %lu version %lu is not available\n"),
+ prognum, vers);
+ exit (1);
+ }
+ to.tv_usec = 0;
+ to.tv_sec = 10;
+ rpc_stat = clnt_call (client, 0, (xdrproc_t) xdr_void, NULL,
+ (xdrproc_t) xdr_void, NULL, to);
+ if (pstatus (client, prognum, vers) < 0)
+ failure = 1;
+ clnt_destroy (client);
+ (void) close (sock);
+ sock = RPC_ANYSOCK;
+ }
+ }
+ else
+ {
+ vers = getvers (argv[2]);
+ addr.sin_port = htons (portnum);
+ if ((client = clnttcp_create (&addr, prognum, vers, &sock,
+ 0, 0)) == NULL)
+ {
+ clnt_pcreateerror ("rpcinfo");
+ printf (_ ("program %lu version %lu is not available\n"),
+ prognum, vers);
+ exit (1);
+ }
+ to.tv_usec = 0;
+ to.tv_sec = 10;
+ rpc_stat = clnt_call (client, 0, (xdrproc_t) xdr_void, NULL,
+ (xdrproc_t) xdr_void, NULL, to);
+ if (pstatus (client, prognum, vers) < 0)
+ failure = 1;
+ }
+ if (failure)
+ exit (1);
}
/*
@@ -449,90 +498,102 @@ tcpping(portnum, argc, argv)
* a good error message.
*/
static int
-pstatus(client, prognum, vers)
- register CLIENT *client;
- u_long prognum;
- u_long vers;
+pstatus (client, prognum, vers)
+ register CLIENT *client;
+ u_long prognum;
+ u_long vers;
{
- struct rpc_err rpcerr;
-
- clnt_geterr(client, &rpcerr);
- if (rpcerr.re_status != RPC_SUCCESS) {
- clnt_perror(client, "rpcinfo");
- printf(_("program %lu version %lu is not available\n"),
- prognum, vers);
- return (-1);
- } else {
- printf(_("program %lu version %lu ready and waiting\n"),
- prognum, vers);
- return (0);
- }
+ struct rpc_err rpcerr;
+
+ clnt_geterr (client, &rpcerr);
+ if (rpcerr.re_status != RPC_SUCCESS)
+ {
+ clnt_perror (client, "rpcinfo");
+ printf (_ ("program %lu version %lu is not available\n"),
+ prognum, vers);
+ return (-1);
+ }
+ else
+ {
+ printf (_ ("program %lu version %lu ready and waiting\n"),
+ prognum, vers);
+ return (0);
+ }
}
static void
-pmapdump(argc, argv)
- int argc;
- char **argv;
+pmapdump (argc, argv)
+ int argc;
+ char **argv;
{
- struct sockaddr_in server_addr;
- register struct hostent *hp;
- struct pmaplist *head = NULL;
- int socket = RPC_ANYSOCK;
- struct timeval minutetimeout;
- register CLIENT *client;
- struct rpcent *rpc;
-
- if (argc > 1) {
- usage();
- exit(1);
- }
- if (argc == 1)
- get_inet_address(&server_addr, argv[0]);
- else {
- bzero((char *)&server_addr, sizeof server_addr);
- server_addr.sin_family = AF_INET;
- if ((hp = gethostbyname("localhost")) != NULL)
- bcopy(hp->h_addr, (caddr_t)&server_addr.sin_addr,
- hp->h_length);
- else
- server_addr.sin_addr.s_addr = inet_addr("0.0.0.0");
- }
- minutetimeout.tv_sec = 60;
- minutetimeout.tv_usec = 0;
- server_addr.sin_port = htons(PMAPPORT);
- if ((client = clnttcp_create(&server_addr, PMAPPROG,
- PMAPVERS, &socket, 50, 500)) == NULL) {
- clnt_pcreateerror(_("rpcinfo: can't contact portmapper"));
- exit(1);
- }
- if (clnt_call(client, PMAPPROC_DUMP, xdr_void, NULL,
- xdr_pmaplist, &head, minutetimeout) != RPC_SUCCESS) {
- fprintf(stderr, _("rpcinfo: can't contact portmapper: "));
- clnt_perror(client, "rpcinfo");
- exit(1);
- }
- if (head == NULL) {
- printf(_("No remote programs registered.\n"));
- } else {
- printf(_(" program vers proto port\n"));
- for (; head != NULL; head = head->pml_next) {
- printf("%10ld%5ld",
- head->pml_map.pm_prog,
- head->pml_map.pm_vers);
- if (head->pml_map.pm_prot == IPPROTO_UDP)
- printf("%6s", "udp");
- else if (head->pml_map.pm_prot == IPPROTO_TCP)
- printf("%6s", "tcp");
- else
- printf("%6ld", head->pml_map.pm_prot);
- printf("%7ld", head->pml_map.pm_port);
- rpc = getrpcbynumber(head->pml_map.pm_prog);
- if (rpc)
- printf(" %s\n", rpc->r_name);
- else
- printf("\n");
- }
+ struct sockaddr_in server_addr;
+ register struct hostent *hp;
+ struct pmaplist *head = NULL;
+ int socket = RPC_ANYSOCK;
+ struct timeval minutetimeout;
+ register CLIENT *client;
+ struct rpcent *rpc;
+
+ if (argc > 1)
+ {
+ usage ();
+ exit (1);
+ }
+ if (argc == 1)
+ get_inet_address (&server_addr, argv[0]);
+ else
+ {
+ bzero ((char *) &server_addr, sizeof server_addr);
+ server_addr.sin_family = AF_INET;
+ if ((hp = gethostbyname ("localhost")) != NULL)
+ bcopy (hp->h_addr, (caddr_t) & server_addr.sin_addr,
+ hp->h_length);
+ else
+ server_addr.sin_addr.s_addr = inet_addr ("0.0.0.0");
+ }
+ minutetimeout.tv_sec = 60;
+ minutetimeout.tv_usec = 0;
+ server_addr.sin_port = htons (PMAPPORT);
+ if ((client = clnttcp_create (&server_addr, PMAPPROG,
+ PMAPVERS, &socket, 50, 500)) == NULL)
+ {
+ clnt_pcreateerror (_ ("rpcinfo: can't contact portmapper"));
+ exit (1);
+ }
+ if (clnt_call (client, PMAPPROC_DUMP, (xdrproc_t) xdr_void, NULL,
+ (xdrproc_t) xdr_pmaplist, (caddr_t) &head,
+ minutetimeout) != RPC_SUCCESS)
+ {
+ fprintf (stderr, _ ("rpcinfo: can't contact portmapper: "));
+ clnt_perror (client, "rpcinfo");
+ exit (1);
+ }
+ if (head == NULL)
+ {
+ printf (_ ("No remote programs registered.\n"));
+ }
+ else
+ {
+ printf (_ (" program vers proto port\n"));
+ for (; head != NULL; head = head->pml_next)
+ {
+ printf ("%10ld%5ld",
+ head->pml_map.pm_prog,
+ head->pml_map.pm_vers);
+ if (head->pml_map.pm_prot == IPPROTO_UDP)
+ printf ("%6s", "udp");
+ else if (head->pml_map.pm_prot == IPPROTO_TCP)
+ printf ("%6s", "tcp");
+ else
+ printf ("%6ld", head->pml_map.pm_prot);
+ printf ("%7ld", head->pml_map.pm_port);
+ rpc = getrpcbynumber (head->pml_map.pm_prog);
+ if (rpc)
+ printf (" %s\n", rpc->r_name);
+ else
+ printf ("\n");
}
+ }
}
/*
@@ -541,126 +602,139 @@ pmapdump(argc, argv)
* be piped through sort(1) and then uniq(1).
*/
-/*ARGSUSED*/
+/*ARGSUSED */
static bool_t
-reply_proc(res, who)
- void *res; /* Nothing comes back */
- struct sockaddr_in *who; /* Who sent us the reply */
+reply_proc (res, who)
+ void *res; /* Nothing comes back */
+ struct sockaddr_in *who; /* Who sent us the reply */
{
- register struct hostent *hp;
+ register struct hostent *hp;
- hp = gethostbyaddr((char *) &who->sin_addr, sizeof who->sin_addr,
- AF_INET);
- printf("%s %s\n", inet_ntoa(who->sin_addr),
- (hp == NULL) ? _("(unknown)") : hp->h_name);
- return(FALSE);
+ hp = gethostbyaddr ((char *) &who->sin_addr, sizeof who->sin_addr,
+ AF_INET);
+ printf ("%s %s\n", inet_ntoa (who->sin_addr),
+ (hp == NULL) ? _ ("(unknown)") : hp->h_name);
+ return (FALSE);
}
static void
-brdcst(argc, argv)
- int argc;
- char **argv;
+brdcst (argc, argv)
+ int argc;
+ char **argv;
{
- enum clnt_stat rpc_stat;
- u_long prognum, vers;
-
- if (argc != 2) {
- usage();
- exit(1);
- }
- prognum = getprognum(argv[0]);
- vers = getvers(argv[1]);
- rpc_stat = clnt_broadcast(prognum, vers, NULLPROC, xdr_void,
- (char *)NULL, xdr_void, (char *)NULL, reply_proc);
- if ((rpc_stat != RPC_SUCCESS) && (rpc_stat != RPC_TIMEDOUT)) {
- fprintf(stderr, _("rpcinfo: broadcast failed: %s\n"),
- clnt_sperrno(rpc_stat));
- exit(1);
- }
- exit(0);
+ enum clnt_stat rpc_stat;
+ u_long prognum, vers;
+
+ if (argc != 2)
+ {
+ usage ();
+ exit (1);
+ }
+ prognum = getprognum (argv[0]);
+ vers = getvers (argv[1]);
+ rpc_stat = clnt_broadcast (prognum, vers, NULLPROC, (xdrproc_t) xdr_void,
+ NULL, (xdrproc_t) xdr_void, NULL,
+ (resultproc_t) reply_proc);
+ if ((rpc_stat != RPC_SUCCESS) && (rpc_stat != RPC_TIMEDOUT))
+ {
+ fprintf (stderr, _ ("rpcinfo: broadcast failed: %s\n"),
+ clnt_sperrno (rpc_stat));
+ exit (1);
+ }
+ exit (0);
}
static void
-deletereg(argc, argv)
- int argc;
- char **argv;
-{ u_long prog_num, version_num ;
-
- if (argc != 2) {
- usage() ;
- exit(1) ;
- }
- if (getuid()) { /* This command allowed only to root */
- fprintf(stderr, "Sorry. You are not root\n") ;
- exit(1) ;
- }
- prog_num = getprognum(argv[0]);
- version_num = getvers(argv[1]);
- if ((pmap_unset(prog_num, version_num)) == 0) {
- fprintf(stderr, _("rpcinfo: Could not delete registration for prog %s version %s\n"),
- argv[0], argv[1]) ;
- exit(1) ;
- }
+deletereg (argc, argv)
+ int argc;
+ char **argv;
+{
+ u_long prog_num, version_num;
+
+ if (argc != 2)
+ {
+ usage ();
+ exit (1);
+ }
+ if (getuid ())
+ { /* This command allowed only to root */
+ fprintf (stderr, "Sorry. You are not root\n");
+ exit (1);
+ }
+ prog_num = getprognum (argv[0]);
+ version_num = getvers (argv[1]);
+ if ((pmap_unset (prog_num, version_num)) == 0)
+ {
+ fprintf (stderr, _ ("rpcinfo: Could not delete registration for prog %s version %s\n"),
+ argv[0], argv[1]);
+ exit (1);
+ }
}
static void
-usage()
+usage ()
{
- fprintf(stderr, _("Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"));
- fprintf(stderr, _(" rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n"));
- fprintf(stderr, _(" rpcinfo -p [ host ]\n"));
- fprintf(stderr, _(" rpcinfo -b prognum versnum\n"));
- fprintf(stderr, _(" rpcinfo -d prognum versnum\n")) ;
+ fprintf (stderr, _ ("Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"));
+ fprintf (stderr, _ (" rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n"));
+ fprintf (stderr, _ (" rpcinfo -p [ host ]\n"));
+ fprintf (stderr, _ (" rpcinfo -b prognum versnum\n"));
+ fprintf (stderr, _ (" rpcinfo -d prognum versnum\n"));
}
static u_long
-getprognum(arg)
- char *arg;
+getprognum (arg)
+ char *arg;
{
- register struct rpcent *rpc;
- register u_long prognum;
-
- if (isalpha(*arg)) {
- rpc = getrpcbyname(arg);
- if (rpc == NULL) {
- fprintf(stderr, _("rpcinfo: %s is unknown service\n"),
- arg);
- exit(1);
- }
- prognum = rpc->r_number;
- } else {
- prognum = (u_long) atoi(arg);
+ register struct rpcent *rpc;
+ register u_long prognum;
+
+ if (isalpha (*arg))
+ {
+ rpc = getrpcbyname (arg);
+ if (rpc == NULL)
+ {
+ fprintf (stderr, _ ("rpcinfo: %s is unknown service\n"),
+ arg);
+ exit (1);
}
-
- return (prognum);
+ prognum = rpc->r_number;
+ }
+ else
+ {
+ prognum = (u_long) atoi (arg);
+ }
+
+ return (prognum);
}
static u_long
-getvers(arg)
- char *arg;
+getvers (arg)
+ char *arg;
{
- register u_long vers;
+ register u_long vers;
- vers = (int) atoi(arg);
- return (vers);
+ vers = (int) atoi (arg);
+ return (vers);
}
static void
-get_inet_address(addr, host)
- struct sockaddr_in *addr;
- char *host;
+get_inet_address (addr, host)
+ struct sockaddr_in *addr;
+ char *host;
{
- register struct hostent *hp;
-
- bzero((char *)addr, sizeof *addr);
- addr->sin_addr.s_addr = (u_long) inet_addr(host);
- if (addr->sin_addr.s_addr == -1 || addr->sin_addr.s_addr == 0) {
- if ((hp = gethostbyname(host)) == NULL) {
- fprintf(stderr, _("rpcinfo: %s is unknown host\n"),
- host);
- exit(1);
- }
- bcopy(hp->h_addr, (char *)&addr->sin_addr, hp->h_length);
+ register struct hostent *hp;
+
+ bzero ((char *) addr, sizeof *addr);
+ addr->sin_addr.s_addr = (u_long) inet_addr (host);
+ if (addr->sin_addr.s_addr == -1 || addr->sin_addr.s_addr == 0)
+ {
+ if ((hp = gethostbyname (host)) == NULL)
+ {
+ fprintf (stderr, _ ("rpcinfo: %s is unknown host\n"),
+ host);
+ exit (1);
}
- addr->sin_family = AF_INET;
+ bcopy (hp->h_addr, (char *) &addr->sin_addr, hp->h_length);
+ }
+ addr->sin_family = AF_INET;
}