Annotation of 43BSD/contrib/sunrpc/rpcinfo.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
                      3:  * unrestricted use provided that this legend is included on all tape
                      4:  * media and as a part of the software program in whole or part.  Users
                      5:  * may copy or modify Sun RPC without charge, but are not authorized
                      6:  * to license or distribute it to anyone else except as part of a product or
                      7:  * program developed by the user.
                      8:  *
                      9:  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
                     10:  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
                     11:  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
                     12:  *
                     13:  * Sun RPC is provided with no support and without any obligation on the
                     14:  * part of Sun Microsystems, Inc. to assist in its use, correction,
                     15:  * modification or enhancement.
                     16:  *
                     17:  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
                     18:  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
                     19:  * OR ANY PART THEREOF.
                     20:  *
                     21:  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
                     22:  * or profits or other special, indirect and consequential damages, even if
                     23:  * Sun has been advised of the possibility of such damages.
                     24:  *
                     25:  * Sun Microsystems, Inc.
                     26:  * 2550 Garcia Avenue
                     27:  * Mountain View, California  94043
                     28:  */
                     29: 
                     30: /*
                     31:  * Copyright (C) 1984, Sun Microsystems, Inc.
                     32:  */
                     33: 
                     34: /*
                     35:  * rpcinfo: ping a particular rpc program
                     36:  *     or dump the portmapper
                     37:  */
                     38: 
                     39: #include <rpc/rpc.h>
                     40: #include <stdio.h>
                     41: #include <sys/socket.h>
                     42: #include <sys/time.h>
                     43: #include <netdb.h>
                     44: #include <rpc/pmap_prot.h>
                     45: #include <rpc/pmap_clnt.h>
                     46: 
                     47: #define MAXHOSTLEN 256
                     48: 
                     49: main(argc, argv)
                     50:        char **argv;
                     51: {
                     52:        int ans;
                     53:        
                     54:        if (argc < 2) {
                     55:                usage();
                     56:                exit(1);
                     57:        }
                     58:        if (argv[1][0] == '-') {
                     59:                switch(argv[1][1]) {
                     60:                        case 't':
                     61:                                tcpping(argc-1, argv+1);
                     62:                                break;
                     63:                        case 'p':
                     64:                                pmapdump(argc-1, argv+1);
                     65:                                break;
                     66:                        case 'u':
                     67:                                udpping(argc-1, argv+1);
                     68:                                break;
                     69:                        default:
                     70:                                usage();
                     71:                                exit(1);
                     72:                                break;
                     73:                }
                     74:        }
                     75:        else
                     76:                usage();
                     77: }
                     78:                
                     79: udpping(argc, argv)
                     80:        char **argv;
                     81: {
                     82:        int ans;
                     83:     
                     84:        if (argc != 4) {
                     85:                usage();
                     86:                exit(1);
                     87:        }
                     88:        ans = callrpc(argv[1], atoi(argv[2]), atoi(argv[3]), NULLPROC,
                     89:            xdr_void, 0, xdr_void, 0);
                     90:        if (ans != 0) {
                     91:                clnt_perrno(ans);
                     92:                fprintf(stderr, "\n");
                     93:                printf("proc %d vers %d is not available\n", atoi(argv[2]),
                     94:                    atoi(argv[3]));
                     95:        }
                     96:        else
                     97:                printf("proc %d vers %d ready and waiting\n", atoi(argv[2]),
                     98:                    atoi(argv[3]));
                     99: }
                    100: 
                    101: tcpping(argc, argv)
                    102:        int argc;
                    103:        char **argv;
                    104: {
                    105:        struct timeval to;
                    106:        struct sockaddr_in addr;
                    107:        enum clnt_stat rpc_stat;
                    108:        CLIENT *client;
                    109:        int sock = -1;
                    110:        struct hostent *hp;
                    111: 
                    112:        if (argc != 4) {
                    113:                usage();
                    114:                exit(1);
                    115:        }
                    116:        if ((hp = gethostbyname(argv[1])) == NULL) {
                    117:            fprintf(stderr, "can't find %s\n", argv[1]);
                    118:            exit(1);
                    119:        }
                    120:        addr.sin_family = AF_INET;
                    121:        addr.sin_port = 0;
                    122:        addr.sin_addr.s_addr = *(int *)hp->h_addr;
                    123:        if ((client = clnttcp_create(&addr, atoi(argv[2]),
                    124:                atoi(argv[3]), &sock, 0, 0)) == NULL) {
                    125:                        clnt_pcreateerror("");
                    126:                        printf("proc %d vers %d is not available\n",
                    127:                            atoi(argv[2]), atoi(argv[3]));
                    128:                        exit(1);
                    129:                }
                    130:        to.tv_usec = 0;
                    131:        to.tv_sec = 10;
                    132:        rpc_stat = clnt_call(client, 0, xdr_void, NULL, xdr_void, NULL, to);
                    133:        if (rpc_stat != RPC_SUCCESS) {
                    134:                clnt_perrno(rpc_stat);
                    135:                fprintf(stderr, "\n");
                    136:                printf("proc %d vers %d is not available\n", atoi(argv[2]),
                    137:                    atoi(argv[3]));
                    138:        }
                    139:        else
                    140:                printf("proc %d vers %d ready and waiting\n", atoi(argv[2]),
                    141:                    atoi(argv[3]));
                    142: }
                    143: 
                    144: pmapdump(argc, argv)
                    145:        int argc;
                    146:        char **argv;
                    147: {
                    148:        struct sockaddr_in server_addr;
                    149:        struct hostent *hp;
                    150:        struct pmaplist *head;
                    151:        char hoststr[MAXHOSTLEN];
                    152:        int socket = -1;
                    153:        struct timeval minutetimeout;
                    154:        char *hostnm;
                    155:        register CLIENT *client;
                    156:        enum clnt_stat rpc_stat;
                    157:        
                    158:        if (argc > 2) {
                    159:                usage();
                    160:                exit(1);
                    161:        }
                    162:        if (argc == 2) {
                    163:                hostnm = argv[1];
                    164:        } else {
                    165:                gethostname(hoststr, sizeof(hoststr));
                    166:                hostnm = hoststr;
                    167:        }
                    168:        if ((hp = gethostbyname(hostnm)) == NULL) {
                    169:                fprintf(stderr, "cannot get addr for '%s'\n", hostnm);
                    170:                exit(0);
                    171:        }
                    172:        bcopy(hp->h_addr, (caddr_t)&server_addr.sin_addr, hp->h_length);
                    173:        server_addr.sin_family = AF_INET;
                    174:        minutetimeout.tv_sec = 60;
                    175:        minutetimeout.tv_usec = 0;
                    176:        server_addr.sin_port = htons(PMAPPORT);
                    177:        if ((client = clnttcp_create(&server_addr, PMAPPROG,
                    178:            PMAPVERS, &socket, 50, 500)) == NULL) {
                    179:                clnt_pcreateerror("rpcinfo: can't contact portmapper");
                    180:                exit(1);
                    181:        }
                    182:        if (clnt_call(client, PMAPPROC_DUMP, xdr_void, NULL,
                    183:            xdr_pmaplist, &head, minutetimeout) != RPC_SUCCESS) {
                    184:                fprintf(stderr, "rpcinfo: can't contact portmapper");
                    185:                clnt_perrno(rpc_stat);
                    186:                fprintf(stderr, "\n");
                    187:                exit(1);
                    188:        }
                    189:        if (head == NULL) {
                    190:                printf("No remote programs registered.\n");
                    191:        } else {
                    192:                printf("[program, version, protocol, port]:\n\n");
                    193:                for (; head != (struct pmaplist *)NULL; head = head->pml_next) {
                    194:                        printf("[%ld, %ld, %ld, %ld]\n",
                    195:                            head->pml_map.pm_prog,
                    196:                            head->pml_map.pm_vers,
                    197:                            head->pml_map.pm_prot,
                    198:                            head->pml_map.pm_port);
                    199:                }
                    200:        }
                    201: }
                    202: 
                    203: usage()
                    204: {
                    205:        fprintf(stderr, "Usage: rpcinfo -u host prognum versnum\n");
                    206:        fprintf(stderr, "       rpcinfo -t host prognum versnum\n");
                    207:        fprintf(stderr, "       rpcinfo -p [host]\n");
                    208: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.