Annotation of 43BSD/contrib/sunrpc/rpcinfo.c, revision 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.