source: rtems/cpukit/librpc/src/rpc/pmap_clnt.c @ f6e7123d

4.104.114.84.9
Last change on this file since f6e7123d was f6e7123d, checked in by Joel Sherrill <joel.sherrill@…>, on Jul 23, 2002 at 9:06:24 PM

2002-07-23 Joel Sherrill <joel@…>

  • src/rpc/pmap_clnt.c (pmap_set): Changed prototype to match .h.
  • Property mode set to 100644
File size: 4.4 KB
Line 
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#if defined(LIBC_SCCS) && !defined(lint)
31/*static char *sccsid = "from: @(#)pmap_clnt.c 1.37 87/08/11 Copyr 1984 Sun Micro";*/
32/*static char *sccsid = "from: @(#)pmap_clnt.c  2.2 88/08/01 4.0 RPCSRC";*/
33static char *rcsid = "$FreeBSD: src/lib/libc/rpc/pmap_clnt.c,v 1.11 2000/01/27 23:06:39 jasone Exp $";
34#endif
35
36/*
37 * pmap_clnt.c
38 * Client interface to pmap rpc service.
39 *
40 * Copyright (C) 1984, Sun Microsystems, Inc.
41 */
42
43#include <sys/types.h>
44#include <sys/stat.h>
45#include <unistd.h>
46#include <rpc/rpc.h>
47#include <rpc/pmap_prot.h>
48#include <rpc/pmap_clnt.h>
49#include <netinet/in.h>
50
51static struct timeval timeout = { 5, 0 };
52static struct timeval tottimeout = { 60, 0 };
53
54void clnt_perror();
55
56#ifndef PORTMAPSOCK
57#define PORTMAPSOCK "/var/run/portmapsock"
58#endif
59
60/*
61 * Set a mapping between program,version and port.
62 * Calls the pmap service remotely to do the mapping.
63 */
64bool_t
65pmap_set(program, version, protocol, port)
66        u_long program;
67        u_long version;
68        int protocol;
69        int port;    /* was u_short but changed to match prototype */
70{
71        struct sockaddr_in myaddress;
72        int socket = -1;
73        register CLIENT *client;
74        struct pmap parms;
75        bool_t rslt;
76        struct stat st;
77
78        /*
79         * Temporary hack for backwards compatibility. Eventually
80         * this test will go away and we'll use only the "unix" transport.
81         */
82        if (stat(PORTMAPSOCK, &st) == 0 && st.st_mode & S_IFSOCK)
83                client = clnt_create(PORTMAPSOCK, PMAPPROG, PMAPVERS, "unix");
84        else  {
85                if (get_myaddress(&myaddress) != 0)
86                        return (FALSE);
87                myaddress.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
88                client = clntudp_bufcreate(&myaddress, PMAPPROG, PMAPVERS,
89                        timeout, &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
90        }
91
92        if (client == (CLIENT *)NULL)
93                return (FALSE);
94        parms.pm_prog = program;
95        parms.pm_vers = version;
96        parms.pm_prot = protocol;
97        parms.pm_port = port;
98        if (CLNT_CALL(client, PMAPPROC_SET, xdr_pmap, &parms, xdr_bool, &rslt,
99            tottimeout) != RPC_SUCCESS) {
100                clnt_perror(client, "Cannot register service");
101                return (FALSE);
102        }
103        CLNT_DESTROY(client);
104        if (socket != -1)
105                (void)_RPC_close(socket);
106        return (rslt);
107}
108
109/*
110 * Remove the mapping between program,version and port.
111 * Calls the pmap service remotely to do the un-mapping.
112 */
113bool_t
114pmap_unset(program, version)
115        u_long program;
116        u_long version;
117{
118        struct sockaddr_in myaddress;
119        int socket = -1;
120        register CLIENT *client;
121        struct pmap parms;
122        bool_t rslt;
123        struct stat st;
124
125        /*
126         * Temporary hack for backwards compatibility. Eventually
127         * this test will go away and we'll use only the "unix" transport.
128         */
129        if (stat(PORTMAPSOCK, &st) == 0 && st.st_mode & S_IFSOCK)
130                client = clnt_create(PORTMAPSOCK, PMAPPROG, PMAPVERS, "unix");
131        else {
132                if (get_myaddress(&myaddress) != 0)
133                        return (FALSE);
134                myaddress.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
135                client = clntudp_bufcreate(&myaddress, PMAPPROG, PMAPVERS,
136                        timeout, &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE);
137        }
138        if (client == (CLIENT *)NULL)
139                return (FALSE);
140        parms.pm_prog = program;
141        parms.pm_vers = version;
142        parms.pm_port = parms.pm_prot = 0;
143        CLNT_CALL(client, PMAPPROC_UNSET, xdr_pmap, &parms, xdr_bool, &rslt,
144            tottimeout);
145        CLNT_DESTROY(client);
146        if (socket != -1)
147                (void)_RPC_close(socket);
148        return (rslt);
149}
Note: See TracBrowser for help on using the repository browser.