2005-06-19 08:20:27 +04:00
/*
Unix SMB / CIFS implementation .
transport layer security handling code
Copyright ( C ) Andrew Tridgell 2005
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2005-06-19 08:20:27 +04:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2005-06-19 08:20:27 +04:00
*/
2005-11-09 11:13:41 +03:00
# ifndef _TLS_H_
# define _TLS_H_
2006-05-23 08:41:09 +04:00
# include "lib/socket/socket.h"
2007-12-03 02:28:22 +03:00
struct loadparm_context ;
2005-06-19 08:20:27 +04:00
/*
call tls_initialise ( ) once per task to startup the tls subsystem
*/
2007-12-03 02:28:22 +03:00
struct tls_params * tls_initialise ( TALLOC_CTX * mem_ctx , struct loadparm_context * lp_ctx ) ;
2005-06-19 08:20:27 +04:00
/*
call tls_init_server ( ) on each new server connection
the ' plain_chars ' parameter is a list of chars that when they occur
as the first character from the client on the connection tell the
tls code that this is a non - tls connection . This can be used to have
tls and non - tls servers on the same port . If this is NULL then only
tls connections will be allowed
*/
2006-05-03 00:15:47 +04:00
struct socket_context * tls_init_server ( struct tls_params * parms ,
2005-06-19 08:20:27 +04:00
struct socket_context * sock ,
2008-12-29 22:24:57 +03:00
struct tevent_fd * fde ,
2006-05-03 00:15:47 +04:00
const char * plain_chars ) ;
2005-06-19 08:20:27 +04:00
2015-03-18 23:42:19 +03:00
void tls_cert_generate ( TALLOC_CTX * mem_ctx ,
const char * hostname ,
const char * keyfile , const char * certfile ,
const char * cafile ) ;
2005-06-19 08:20:27 +04:00
/*
return True if a connection used tls
*/
2007-08-27 22:10:19 +04:00
bool tls_enabled ( struct socket_context * tls ) ;
2005-06-19 08:20:27 +04:00
2006-05-03 00:15:47 +04:00
const struct socket_ops * socket_tls_ops ( enum socket_type type ) ;
2005-06-19 13:31:34 +04:00
2010-02-03 16:36:10 +03:00
struct tstream_context ;
struct tstream_tls_params ;
NTSTATUS tstream_tls_params_client ( TALLOC_CTX * mem_ctx ,
const char * ca_file ,
const char * crl_file ,
2015-07-20 02:22:46 +03:00
const char * tls_priority ,
2010-02-03 16:36:10 +03:00
struct tstream_tls_params * * _tlsp ) ;
NTSTATUS tstream_tls_params_server ( TALLOC_CTX * mem_ctx ,
const char * dns_host_name ,
2010-10-07 13:16:48 +04:00
bool enabled ,
2010-02-03 16:36:10 +03:00
const char * key_file ,
const char * cert_file ,
const char * ca_file ,
const char * crl_file ,
const char * dhp_file ,
2015-07-20 02:22:46 +03:00
const char * tls_priority ,
2010-02-03 16:36:10 +03:00
struct tstream_tls_params * * _params ) ;
bool tstream_tls_params_enabled ( struct tstream_tls_params * params ) ;
struct tevent_req * _tstream_tls_connect_send ( TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct tstream_context * plain_stream ,
struct tstream_tls_params * tls_params ,
const char * location ) ;
2015-06-19 13:26:55 +03:00
# define tstream_tls_connect_send(mem_ctx, ev, plain_stream, tls_params) \
2010-02-03 16:36:10 +03:00
_tstream_tls_connect_send ( mem_ctx , ev , plain_stream , tls_params , __location__ )
int tstream_tls_connect_recv ( struct tevent_req * req ,
int * perrno ,
TALLOC_CTX * mem_ctx ,
struct tstream_context * * tls_stream ) ;
struct tevent_req * _tstream_tls_accept_send ( TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct tstream_context * plain_stream ,
struct tstream_tls_params * tls_params ,
const char * location ) ;
# define tstream_tls_accept_send(mem_ctx, ev, plain_stream, tls_params) \
_tstream_tls_accept_send ( mem_ctx , ev , plain_stream , tls_params , __location__ )
int tstream_tls_accept_recv ( struct tevent_req * req ,
int * perrno ,
TALLOC_CTX * mem_ctx ,
struct tstream_context * * tls_stream ) ;
# endif /* _TLS_H_ */