xref: /freebsd/sys/rpc/rpcsec_tls.h (revision 665b1365fe8e24d618d63b0d57b0b4ad39e97824)
1c19cba61SRick Macklem /*-
2c19cba61SRick Macklem  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3c19cba61SRick Macklem  *
4c19cba61SRick Macklem  * Copyright (c) 2020 Rick Macklem
5c19cba61SRick Macklem  *
6c19cba61SRick Macklem  * Redistribution and use in source and binary forms, with or without
7c19cba61SRick Macklem  * modification, are permitted provided that the following conditions
8c19cba61SRick Macklem  * are met:
9c19cba61SRick Macklem  * 1. Redistributions of source code must retain the above copyright
10c19cba61SRick Macklem  *    notice, this list of conditions and the following disclaimer.
11c19cba61SRick Macklem  * 2. Redistributions in binary form must reproduce the above copyright
12c19cba61SRick Macklem  *    notice, this list of conditions and the following disclaimer in the
13c19cba61SRick Macklem  *    documentation and/or other materials provided with the distribution.
14c19cba61SRick Macklem  *
15c19cba61SRick Macklem  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16c19cba61SRick Macklem  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17c19cba61SRick Macklem  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18c19cba61SRick Macklem  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19c19cba61SRick Macklem  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20c19cba61SRick Macklem  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21c19cba61SRick Macklem  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22c19cba61SRick Macklem  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23c19cba61SRick Macklem  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24c19cba61SRick Macklem  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25c19cba61SRick Macklem  * SUCH DAMAGE.
26c19cba61SRick Macklem  *
27c19cba61SRick Macklem  * $FreeBSD$
28c19cba61SRick Macklem  */
29c19cba61SRick Macklem 
30c19cba61SRick Macklem #ifndef	_RPC_RPCSEC_TLS_H_
31c19cba61SRick Macklem #define	_RPC_RPCSEC_TLS_H_
32c19cba61SRick Macklem 
33c19cba61SRick Macklem /* Operation values for rpctls syscall. */
34c19cba61SRick Macklem #define	RPCTLS_SYSC_CLSETPATH	1
35c19cba61SRick Macklem #define	RPCTLS_SYSC_CLSOCKET	2
36c19cba61SRick Macklem #define	RPCTLS_SYSC_CLSHUTDOWN	3
37c19cba61SRick Macklem #define	RPCTLS_SYSC_SRVSETPATH	4
38c19cba61SRick Macklem #define	RPCTLS_SYSC_SRVSOCKET	5
39c19cba61SRick Macklem #define	RPCTLS_SYSC_SRVSHUTDOWN	6
40c19cba61SRick Macklem 
41c19cba61SRick Macklem /* System call used by the rpctlscd, rpctlssd daemons. */
42c19cba61SRick Macklem int	rpctls_syscall(int, const char *);
43c19cba61SRick Macklem 
44c19cba61SRick Macklem /* Flag bits to indicate certificate results. */
45c19cba61SRick Macklem #define	RPCTLS_FLAGS_HANDSHAKE	0x01
46c19cba61SRick Macklem #define	RPCTLS_FLAGS_GOTCERT	0x02
47c19cba61SRick Macklem #define	RPCTLS_FLAGS_SELFSIGNED	0x04
48c19cba61SRick Macklem #define	RPCTLS_FLAGS_VERIFIED	0x08
49c19cba61SRick Macklem #define	RPCTLS_FLAGS_DISABLED	0x10
50c19cba61SRick Macklem #define	RPCTLS_FLAGS_CERTUSER	0x20
51ab0c29afSRick Macklem #define	RPCTLS_FLAGS_HANDSHFAIL	0x40
52c19cba61SRick Macklem 
53c19cba61SRick Macklem /* Error return values for upcall rpcs. */
54c19cba61SRick Macklem #define	RPCTLSERR_OK		0
55c19cba61SRick Macklem #define	RPCTLSERR_NOCLOSE	1
56c19cba61SRick Macklem #define	RPCTLSERR_NOSSL		2
57c19cba61SRick Macklem #define	RPCTLSERR_NOSOCKET	3
58c19cba61SRick Macklem 
59c19cba61SRick Macklem #ifdef _KERNEL
60c19cba61SRick Macklem /* Functions that perform upcalls to the rpctlsd daemon. */
61*665b1365SRick Macklem enum clnt_stat	rpctls_connect(CLIENT *newclient, char *certname,
62*665b1365SRick Macklem 		    struct socket *so, uint64_t *sslp, uint32_t *reterr);
63c19cba61SRick Macklem enum clnt_stat	rpctls_cl_handlerecord(uint64_t sec, uint64_t usec,
64c19cba61SRick Macklem 		    uint64_t ssl, uint32_t *reterr);
65c19cba61SRick Macklem enum clnt_stat	rpctls_srv_handlerecord(uint64_t sec, uint64_t usec,
66c19cba61SRick Macklem 		    uint64_t ssl, uint32_t *reterr);
67c19cba61SRick Macklem enum clnt_stat	rpctls_cl_disconnect(uint64_t sec, uint64_t usec,
68c19cba61SRick Macklem 		    uint64_t ssl, uint32_t *reterr);
69c19cba61SRick Macklem enum clnt_stat	rpctls_srv_disconnect(uint64_t sec, uint64_t usec,
70c19cba61SRick Macklem 		    uint64_t ssl, uint32_t *reterr);
71c19cba61SRick Macklem 
72c19cba61SRick Macklem /* Initialization function for rpcsec_tls. */
73c19cba61SRick Macklem int		rpctls_init(void);
74c19cba61SRick Macklem 
75c19cba61SRick Macklem /* Get TLS information function. */
76ab0c29afSRick Macklem bool		rpctls_getinfo(u_int *maxlen, bool rpctlscd_run,
77ab0c29afSRick Macklem 		    bool rpctlssd_run);
78c19cba61SRick Macklem 
79c19cba61SRick Macklem /* String for AUTH_TLS reply verifier. */
80c19cba61SRick Macklem #define	RPCTLS_START_STRING	"STARTTLS"
81c19cba61SRick Macklem 
82ab0c29afSRick Macklem /* ssl refno value to indicate TLS handshake being done. */
83ab0c29afSRick Macklem #define	RPCTLS_REFNO_HANDSHAKE	0xFFFFFFFFFFFFFFFFULL
84ab0c29afSRick Macklem 
85c19cba61SRick Macklem #endif	/* _KERNEL */
86c19cba61SRick Macklem 
87c19cba61SRick Macklem #endif	/* _RPC_RPCSEC_TLS_H_ */
88