xref: /freebsd/usr.sbin/rpcbind/rpcbind.h (revision 1d386b48)
1 /*	$NetBSD: rpcbind.h,v 1.1 2000/06/03 00:47:21 fvdl Exp $	*/
2 
3 /*-
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  * Copyright (c) 2009, Sun Microsystems, Inc.
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions are met:
11  * - Redistributions of source code must retain the above copyright notice,
12  *   this list of conditions and the following disclaimer.
13  * - Redistributions in binary form must reproduce the above copyright notice,
14  *   this list of conditions and the following disclaimer in the documentation
15  *   and/or other materials provided with the distribution.
16  * - Neither the name of Sun Microsystems, 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 "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
24  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
32 /*
33  * Copyright (c) 1986 - 1991 by Sun Microsystems, Inc.
34  */
35 
36 /* #ident	"@(#)rpcbind.h 1.4 90/04/12 SMI" */
37 
38 /*
39  * rpcbind.h
40  * The common header declarations
41  */
42 
43 #ifndef rpcbind_h
44 #define	rpcbind_h
45 
46 #include <signal.h>
47 
48 #ifdef PORTMAP
49 #include <rpc/pmap_prot.h>
50 #endif
51 #include <rpc/rpcb_prot.h>
52 
53 /*
54  * Stuff for the rmtcall service
55  */
56 struct encap_parms {
57 	u_int32_t arglen;
58 	char *args;
59 };
60 
61 struct r_rmtcall_args {
62 	u_int32_t  rmt_prog;
63 	u_int32_t  rmt_vers;
64 	u_int32_t  rmt_proc;
65 	int     rmt_localvers;  /* whether to send port # or uaddr */
66 	char    *rmt_uaddr;
67 	struct encap_parms rmt_args;
68 };
69 
70 extern int debugging;
71 extern int doabort;
72 extern int terminate_rfd;
73 extern volatile sig_atomic_t doterminate;
74 #ifdef LIBWRAP
75 extern int libwrap;
76 #endif
77 extern int verboselog;
78 extern int insecure;
79 extern int oldstyle_local;
80 extern rpcblist_ptr list_rbl;	/* A list of version 3 & 4 rpcbind services */
81 extern int rpcbindlockfd;
82 
83 #ifdef PORTMAP
84 extern struct pmaplist *list_pml; /* A list of version 2 rpcbind services */
85 extern char *udptrans;		/* Name of UDP transport */
86 extern char *tcptrans;		/* Name of TCP transport */
87 extern char *udp_uaddr;		/* Universal UDP address */
88 extern char *tcp_uaddr;		/* Universal TCP address */
89 #endif
90 
91 int add_bndlist(struct netconfig *, struct netbuf *);
92 bool_t is_bound(char *, char *);
93 char *mergeaddr(SVCXPRT *, char *, char *, char *);
94 struct netconfig *rpcbind_get_conf(const char *);
95 
96 void rpcbs_init(void);
97 void rpcbs_procinfo(rpcvers_t, rpcproc_t);
98 void rpcbs_set(rpcvers_t, bool_t);
99 void rpcbs_unset(rpcvers_t, bool_t);
100 void rpcbs_getaddr(rpcvers_t, rpcprog_t, rpcvers_t, char *, char *);
101 void rpcbs_rmtcall(rpcvers_t, rpcproc_t, rpcprog_t, rpcvers_t, rpcproc_t,
102 			char *, rpcblist_ptr);
103 void *rpcbproc_getstat(void *, struct svc_req *, SVCXPRT *, rpcvers_t);
104 
105 void rpcb_service_3(struct svc_req *, SVCXPRT *);
106 void rpcb_service_4(struct svc_req *, SVCXPRT *);
107 
108 /* Common functions shared between versions */
109 void *rpcbproc_set_com(void *, struct svc_req *, SVCXPRT *, rpcvers_t);
110 void *rpcbproc_unset_com(void *, struct svc_req *, SVCXPRT *, rpcvers_t);
111 bool_t map_set(RPCB *, char *);
112 bool_t map_unset(RPCB *, char *);
113 void delete_prog(unsigned int);
114 void *rpcbproc_getaddr_com(RPCB *, struct svc_req *, SVCXPRT *, rpcvers_t,
115 				 rpcvers_t);
116 void *rpcbproc_gettime_com(void *, struct svc_req *, SVCXPRT *,
117 				rpcvers_t);
118 void *rpcbproc_uaddr2taddr_com(void *, struct svc_req *,
119 					     SVCXPRT *, rpcvers_t);
120 void *rpcbproc_taddr2uaddr_com(void *, struct svc_req *, SVCXPRT *,
121 				    rpcvers_t);
122 int create_rmtcall_fd(struct netconfig *);
123 void rpcbproc_callit_com(struct svc_req *, SVCXPRT *, rpcvers_t,
124 			      rpcvers_t);
125 void my_svc_run(void);
126 
127 void rpcbind_abort(void);
128 void reap(int);
129 void toggle_verboselog(int);
130 
131 int check_access(SVCXPRT *, rpcproc_t, void *, unsigned int);
132 int check_callit(SVCXPRT *, struct r_rmtcall_args *, int);
133 void logit(int, struct sockaddr *, rpcproc_t, rpcprog_t, const char *);
134 int is_loopback(struct netbuf *);
135 
136 #ifdef PORTMAP
137 extern void pmap_service(struct svc_req *, SVCXPRT *);
138 #endif
139 
140 void write_warmstart(void);
141 void read_warmstart(void);
142 
143 char *addrmerge(struct netbuf *caller, const char *serv_uaddr,
144 		const char *clnt_uaddr, char const *netid);
145 int listen_addr(const struct sockaddr *sa);
146 void network_init(void);
147 struct sockaddr *local_sa(int);
148 
149 /* For different getaddr semantics */
150 #define	RPCB_ALLVERS 0
151 #define	RPCB_ONEVERS 1
152 
153 /* To convert a struct sockaddr to IPv4 or IPv6 address */
154 #define	SA2SIN(sa)	((struct sockaddr_in *)(sa))
155 #define	SA2SINADDR(sa)	(SA2SIN(sa)->sin_addr)
156 #ifdef INET6
157 #define	SA2SIN6(sa)	((struct sockaddr_in6 *)(sa))
158 #define	SA2SIN6ADDR(sa)	(SA2SIN6(sa)->sin6_addr)
159 #endif
160 
161 #endif /* rpcbind_h */
162