1/*	$NetBSD: getrpcport.c,v 1.16 2000/01/22 22:19:18 mycroft Exp $	*/
2
3/*
4 * Copyright (c) 2010, Oracle America, Inc.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 *     * Redistributions of source code must retain the above copyright
11 *       notice, this list of conditions and the following disclaimer.
12 *     * Redistributions in binary form must reproduce the above
13 *       copyright notice, this list of conditions and the following
14 *       disclaimer in the documentation and/or other materials
15 *       provided with the distribution.
16 *     * Neither the name of the "Oracle America, Inc." nor the names of its
17 *       contributors may be used to endorse or promote products derived
18 *       from this software without specific prior written permission.
19 *
20 *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25 *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
27 *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30 *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#include <sys/cdefs.h>
35#if defined(LIBC_SCCS) && !defined(lint)
36#if 0
37static char *sccsid = "@(#)getrpcport.c 1.3 87/08/11 SMI";
38static char *sccsid = "@(#)getrpcport.c	2.1 88/07/29 4.0 RPCSRC";
39#else
40__RCSID("$NetBSD: getrpcport.c,v 1.16 2000/01/22 22:19:18 mycroft Exp $");
41#endif
42#endif
43
44/*
45 * Copyright (c) 1985 by Sun Microsystems, Inc.
46 */
47
48#include "namespace.h"
49
50#include <sys/types.h>
51#include <sys/socket.h>
52
53#include <assert.h>
54#include <netdb.h>
55#include <stdio.h>
56#include <string.h>
57
58#include <rpc/rpc.h>
59#include <rpc/pmap_clnt.h>
60
61#ifdef __weak_alias
62__weak_alias(getrpcport,_getrpcport)
63#endif
64
65int
66getrpcport(host, prognum, versnum, proto)
67	char *host;
68	int prognum, versnum, proto;
69{
70	struct sockaddr_in addr;
71	struct hostent *hp;
72
73	_DIAGASSERT(host != NULL);
74
75	if ((hp = gethostbyname(host)) == NULL)
76		return (0);
77	memset(&addr, 0, sizeof(addr));
78	addr.sin_len = sizeof(struct sockaddr_in);
79	addr.sin_family = AF_INET;
80	addr.sin_port =  0;
81	if (hp->h_length > addr.sin_len)
82		hp->h_length = addr.sin_len;
83	memcpy(&addr.sin_addr.s_addr, hp->h_addr, (size_t)hp->h_length);
84	/* Inconsistent interfaces need casts! :-( */
85	return (pmap_getport(&addr, (u_long)prognum, (u_long)versnum,
86	    (u_int)proto));
87}
88