Merge up from branch.
[shibboleth/cpp-sp.git] / oncrpc / pmap_cln.c
1 /*********************************************************************
2  * RPC for the Windows NT Operating System
3  * 1993 by Martin F. Gergeleit
4  * Users may use, copy or modify Sun RPC for the Windows NT Operating 
5  * System according to the Sun copyright below.
6  *
7  * RPC for the Windows NT Operating System COMES WITH ABSOLUTELY NO 
8  * WARRANTY, NOR WILL I BE LIABLE FOR ANY DAMAGES INCURRED FROM THE 
9  * USE OF. USE ENTIRELY AT YOUR OWN RISK!!!
10  *********************************************************************/
11
12 /* @(#)pmap_clnt.c      2.2 88/08/01 4.0 RPCSRC */
13 /*
14  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
15  * unrestricted use provided that this legend is included on all tape
16  * media and as a part of the software program in whole or part.  Users
17  * may copy or modify Sun RPC without charge, but are not authorized
18  * to license or distribute it to anyone else except as part of a product or
19  * program developed by the user.
20  * 
21  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
22  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
24  * 
25  * Sun RPC is provided with no support and without any obligation on the
26  * part of Sun Microsystems, Inc. to assist in its use, correction,
27  * modification or enhancement.
28  * 
29  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
30  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
31  * OR ANY PART THEREOF.
32  * 
33  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
34  * or profits or other special, indirect and consequential damages, even if
35  * Sun has been advised of the possibility of such damages.
36  * 
37  * Sun Microsystems, Inc.
38  * 2550 Garcia Avenue
39  * Mountain View, California  94043
40  */
41 #if !defined(lint) && defined(SCCSIDS)
42 static char sccsid[] = "@(#)pmap_clnt.c 1.37 87/08/11 Copyr 1984 Sun Micro";
43 #endif
44
45 /*
46  * pmap_clnt.c
47  * Client interface to pmap rpc service.
48  *
49  * Copyright (C) 1984, Sun Microsystems, Inc.
50  */
51
52 #include <rpc/rpc.h>
53 #ifdef WIN32
54 #include <rpc/pmap_prot.h>
55 #include <rpc/pmap_clnt.h>
56 #else
57 #include <rpc/pmap_prot.h>
58 #include <rpc/pmap_clnt.h>
59 #endif
60
61 static struct timeval timeout = { 5, 0 };
62 static struct timeval tottimeout = { 60, 0 };
63
64 void clnt_perror();
65
66
67 /*
68  * Set a mapping between program,version and port.
69  * Calls the pmap service remotely to do the mapping.
70  */
71 bool_t
72 pmap_set(program, version, protocol, port)
73         u_long program;
74         u_long version;
75         int protocol;
76         u_short port;
77 {
78         struct sockaddr_in myaddress;
79         int socket = -1;
80         register CLIENT *client;
81         struct pmap parms;
82         bool_t rslt;
83
84         get_myaddress(&myaddress);
85         client = clntudp_bufcreate(&myaddress, PMAPPROG, PMAPVERS,
86             timeout, &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
87         if (client == (CLIENT *)NULL)
88                 return (FALSE);
89         parms.pm_prog = program;
90         parms.pm_vers = version;
91         parms.pm_prot = protocol;
92         parms.pm_port = port;
93         if (CLNT_CALL(client, PMAPPROC_SET, xdr_pmap, &parms, xdr_bool, &rslt,
94             tottimeout) != RPC_SUCCESS) {
95                 clnt_perror(client, "Cannot register service");
96                 return (FALSE);
97         }
98         CLNT_DESTROY(client);
99 #ifdef WIN32
100         (void)closesocket(socket);
101 #else
102         (void)close(socket);
103 #endif
104         return (rslt);
105 }
106
107 /*
108  * Remove the mapping between program,version and port.
109  * Calls the pmap service remotely to do the un-mapping.
110  */
111 bool_t
112 pmap_unset(program, version)
113         u_long program;
114         u_long version;
115 {
116         struct sockaddr_in myaddress;
117         int socket = -1;
118         register CLIENT *client;
119         struct pmap parms;
120         bool_t rslt;
121
122         get_myaddress(&myaddress);
123         client = clntudp_bufcreate(&myaddress, PMAPPROG, PMAPVERS,
124             timeout, &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
125         if (client == (CLIENT *)NULL)
126                 return (FALSE);
127         parms.pm_prog = program;
128         parms.pm_vers = version;
129         parms.pm_port = parms.pm_prot = 0;
130         CLNT_CALL(client, PMAPPROC_UNSET, xdr_pmap, &parms, xdr_bool, &rslt,
131             tottimeout);
132         CLNT_DESTROY(client);
133 #ifdef WIN32
134         (void)closesocket(socket);
135 #else
136         (void)close(socket);
137 #endif
138         return (rslt);
139 }