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