Commit | Line | Data |
---|---|---|
984263bc MD |
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 | |
1de703da MD |
28 | * |
29 | * @(#)getrpcport.c 1.3 87/08/11 SMI | |
30 | * @(#)getrpcport.c 2.1 88/07/29 4.0 RPCSRC | |
ce0e08e2 PA |
31 | * $NetBSD: getrpcport.c,v 1.16 2000/01/22 22:19:18 mycroft Exp $ |
32 | * $FreeBSD: src/lib/libc/rpc/getrpcport.c,v 1.13 2004/10/16 06:11:34 obrien Exp $ | |
c9b6181e | 33 | * $DragonFly: src/lib/libc/rpc/getrpcport.c,v 1.3 2005/11/13 12:27:04 swildner Exp $ |
984263bc MD |
34 | */ |
35 | ||
984263bc MD |
36 | /* |
37 | * Copyright (c) 1985 by Sun Microsystems, Inc. | |
38 | */ | |
39 | ||
ce0e08e2 PA |
40 | #include "namespace.h" |
41 | #include <sys/types.h> | |
42 | #include <sys/socket.h> | |
43 | ||
44 | #include <assert.h> | |
45 | #include <netdb.h> | |
984263bc MD |
46 | #include <stdio.h> |
47 | #include <string.h> | |
ce0e08e2 | 48 | |
984263bc MD |
49 | #include <rpc/rpc.h> |
50 | #include <rpc/pmap_clnt.h> | |
ce0e08e2 | 51 | #include "un-namespace.h" |
984263bc MD |
52 | |
53 | int | |
c9b6181e | 54 | getrpcport(char *host, int prognum, int versnum, int proto) |
984263bc MD |
55 | { |
56 | struct sockaddr_in addr; | |
57 | struct hostent *hp; | |
58 | ||
ce0e08e2 PA |
59 | assert(host != NULL); |
60 | ||
984263bc MD |
61 | if ((hp = gethostbyname(host)) == NULL) |
62 | return (0); | |
63 | memset(&addr, 0, sizeof(addr)); | |
64 | addr.sin_len = sizeof(struct sockaddr_in); | |
65 | addr.sin_family = AF_INET; | |
66 | addr.sin_port = 0; | |
ce0e08e2 PA |
67 | if (hp->h_length > addr.sin_len) |
68 | hp->h_length = addr.sin_len; | |
69 | memcpy(&addr.sin_addr.s_addr, hp->h_addr, (size_t)hp->h_length); | |
70 | /* Inconsistent interfaces need casts! :-( */ | |
71 | return (pmap_getport(&addr, (u_long)prognum, (u_long)versnum, | |
72 | (u_int)proto)); | |
984263bc | 73 | } |