NuSSL Library

This is a library used in NuFW to be independant from a specific TLS/SLL implementation. More...


Files

file  nussl_session.c
 nussl session handling
file  nussl_socket.c
 Socket and I/O handling functions.

Data Structures

struct  iofns
struct  nussl_socket_s
struct  nussl_sock_addr_s

Defines

#define NUSSL_INET_ADDR_DEFINED
#define nussl_close(s)   close(s)
#define nussl_errno   errno
#define ECONNABORTED   ECONNRESET
#define ENOTCONN   ECONNRESET
#define NUSSL_ISRESET(e)   ((e) == ECONNRESET || (e) == ECONNABORTED || (e) == ENOTCONN)
#define NUSSL_ISCLOSED(e)   ((e) == EPIPE)
#define NUSSL_ISINTR(e)   ((e) == EINTR)
#define NUSSL_ISINPROGRESS(e)   ((e) == EINPROGRESS)
#define set_error(s, str)   nussl_strnzcpy((s)->error, (str), sizeof (s)->error)
#define set_strerror(s, e)   nussl_strerror((e), (s)->error, sizeof (s)->error)
#define ipv6_disabled   (0)
#define SACAST(ty, ad)   ((struct sockaddr_##ty *)(ad))
#define MAP_ERR(e)
#define INADDR_NONE   ((in_addr_t) -1)
#define ia_family(a)   AF_INET
#define ia_proto(a)   0

Typedefs

typedef in_addr nussl_inet_addr

Functions

void nussl_session_destroy (nussl_session *sess)
void nussl_set_hostinfo (nussl_session *sess, const char *hostname, unsigned int port)
nussl_sessionnussl_session_create ()
nussl_sessionnussl_session_create_with_fd (int server_fd, int verify)
nussl_sessionnussl_session_accept (nussl_session *srv_sess)
int nussl_session_handshake (nussl_session *client_sess, nussl_session *srv_sess)
int nussl_session_get_fd (nussl_session *sess)
int nussl_session_set_dh_bits (nussl_session *sess, unsigned int dh_bits)
void nussl_set_addrlist (nussl_session *sess, const nussl_inet_addr **addrs, size_t n)
void nussl_set_error (nussl_session *sess, const char *format,...)
void nussl_set_session_flag (nussl_session *sess, nussl_session_flag flag, int value)
int nussl_get_session_flag (nussl_session *sess, nussl_session_flag flag)
void nussl_set_read_timeout (nussl_session *sess, int timeout)
void nussl_set_connect_timeout (nussl_session *sess, int timeout)
const char * nussl_get_error (nussl_session *sess)
void nussl_close_connection (nussl_session *sess)
void nussl_ssl_disable_certificate_check (nussl_session *sess, int is_disabled)
int nussl_ssl_trust_cert_file (nussl_session *sess, const char *cert_file)
void nussl_ssl_cert_validity (const nussl_ssl_certificate *cert, char *from, char *until)
void nussl__ssl_set_verify_err (nussl_session *sess, int failures)
int nussl_write (nussl_session *session, char *buffer, size_t count)
ssize_t nussl_read (nussl_session *session, char *buffer, size_t count)
int nussl_ssl_set_keypair (nussl_session *session, const char *cert_file, const char *key_file)
int nussl_ssl_set_pkcs12_keypair (nussl_session *session, const char *pkcs12_file, const char *password)
int nussl_session_getpeer (nussl_session *sess, struct sockaddr *addr, socklen_t *addrlen)
int nussl_init ()
int nussl_sock_init (void)
void nussl_sock_exit (void)
static int raw_poll (int fdno, int rdwr, int secs)
int nussl_sock_block (nussl_socket *sock, int n)
ssize_t nussl_sock_read (nussl_socket *sock, char *buffer, size_t buflen)
ssize_t nussl_sock_peek (nussl_socket *sock, char *buffer, size_t buflen)
static int readable_raw (nussl_socket *sock, int secs)
static ssize_t read_raw (nussl_socket *sock, char *buffer, size_t len)
static ssize_t write_raw (nussl_socket *sock, const char *data, size_t length)
int nussl_sock_fullwrite (nussl_socket *sock, const char *data, size_t len)
ssize_t nussl_sock_readline (nussl_socket *sock, char *buf, size_t buflen)
ssize_t nussl_sock_fullread (nussl_socket *sock, char *buffer, size_t buflen)
nussl_sock_addrnussl_addr_resolve (const char *hostname, int flags)
int nussl_addr_result (const nussl_sock_addr *addr)
const nussl_inet_addrnussl_addr_first (nussl_sock_addr *addr)
const nussl_inet_addrnussl_addr_next (nussl_sock_addr *addr)
char * nussl_addr_error (const nussl_sock_addr *addr, char *buf, size_t bufsiz)
char * nussl_iaddr_print (const nussl_inet_addr *ia, char *buf, size_t bufsiz)
int nussl_iaddr_reverse (const nussl_inet_addr *ia, char *buf, size_t bufsiz)
void nussl_addr_destroy (nussl_sock_addr *addr)
static int timed_connect (nussl_socket *sock, int fd, const struct sockaddr *sa, size_t salen)
static int connect_socket (nussl_socket *sock, int fd, const nussl_inet_addr *addr, unsigned int port)
nussl_socketnussl_sock_create (void)
nussl_socketnussl_sock_create_with_fd (int fd)
void nussl_sock_prebind (nussl_socket *sock, const nussl_inet_addr *addr, unsigned int port)
static int do_bind (int fd, int peer_family, const nussl_inet_addr *addr, unsigned int port)
int nussl_sock_connect (nussl_socket *sock, const nussl_inet_addr *addr, unsigned int port)
nussl_inet_addrnussl_sock_peer (nussl_socket *sock, unsigned int *port)
nussl_inet_addrnussl_iaddr_make (nussl_iaddr_type type, const unsigned char *raw)
nussl_iaddr_type nussl_iaddr_typeof (const nussl_inet_addr *ia)
int nussl_iaddr_cmp (const nussl_inet_addr *i1, const nussl_inet_addr *i2)
void nussl_iaddr_free (nussl_inet_addr *addr)
int nussl_sock_accept (nussl_socket *sock, int listener)
int nussl_sock_accept_full (nussl_socket *sock, int listener, struct sockaddr *addr, socklen_t *addrlen)
int nussl_sock_fd (const nussl_socket *sock)
void nussl_sock_read_timeout (nussl_socket *sock, int timeout)
void nussl_sock_connect_timeout (nussl_socket *sock, int timeout)
int nussl_sock_accept_ssl (nussl_socket *sock, nussl_ssl_context *ctx)
int nussl_sock_connect_ssl (nussl_socket *sock, nussl_ssl_context *ctx, void *userdata)
nussl_ssl_socket nussl__sock_sslsock (nussl_socket *sock)
char * nussl_sock_cipher (nussl_socket *sock)
const char * nussl_sock_error (const nussl_socket *sock)
int nussl_sock_close (nussl_socket *sock)

Variables

static const nussl_inet_addr dummy_laddr
static int init_state = 0
static struct iofns iofns_raw = { read_raw, write_raw, readable_raw }
int h_errno

Detailed Description

This is a library used in NuFW to be independant from a specific TLS/SLL implementation.


Define Documentation

#define ECONNABORTED   ECONNRESET

Definition at line 193 of file nussl_socket.c.

#define ENOTCONN   ECONNRESET

Definition at line 196 of file nussl_socket.c.

#define ia_family (  )     AF_INET

Definition at line 1197 of file nussl_socket.c.

Referenced by nussl_sock_connect().

#define ia_proto (  )     0

Definition at line 1198 of file nussl_socket.c.

Referenced by nussl_sock_connect().

#define INADDR_NONE   ((in_addr_t) -1)

Definition at line 863 of file nussl_socket.c.

Referenced by nussl_addr_resolve().

#define ipv6_disabled   (0)

Definition at line 326 of file nussl_socket.c.

Referenced by nussl_addr_resolve().

#define MAP_ERR (  ) 

Value:

Definition at line 551 of file nussl_socket.c.

Referenced by write_raw().

#define nussl_close (  )     close(s)

Definition at line 179 of file nussl_socket.c.

Referenced by nussl_sock_close(), and nussl_sock_connect().

#define nussl_errno   errno

Definition at line 180 of file nussl_socket.c.

Referenced by nussl_sock_connect(), raw_poll(), read_raw(), readable_raw(), timed_connect(), and write_raw().

#define NUSSL_INET_ADDR_DEFINED

Definition at line 133 of file nussl_socket.c.

#define NUSSL_ISCLOSED (  )     ((e) == EPIPE)

Definition at line 199 of file nussl_socket.c.

#define NUSSL_ISINPROGRESS (  )     ((e) == EINPROGRESS)

Definition at line 201 of file nussl_socket.c.

Referenced by timed_connect().

#define NUSSL_ISINTR (  )     ((e) == EINTR)

Definition at line 200 of file nussl_socket.c.

Referenced by raw_poll(), read_raw(), and write_raw().

#define NUSSL_ISRESET (  )     ((e) == ECONNRESET || (e) == ECONNABORTED || (e) == ENOTCONN)

Definition at line 198 of file nussl_socket.c.

Referenced by read_raw().

#define SACAST ( ty,
ad   )     ((struct sockaddr_##ty *)(ad))

Definition at line 444 of file nussl_socket.c.

Referenced by nussl_iaddr_cmp(), and nussl_iaddr_print().

#define set_error ( s,
str   )     nussl_strnzcpy((s)->error, (str), sizeof (s)->error)

Definition at line 256 of file nussl_socket.c.

Referenced by nussl_sock_accept_ssl(), nussl_sock_connect(), nussl_sock_connect_ssl(), nussl_sock_readline(), read_raw(), readable_raw(), and timed_connect().

#define set_strerror ( s,
 )     nussl_strerror((e), (s)->error, sizeof (s)->error)

Definition at line 272 of file nussl_socket.c.

Referenced by connect_socket(), nussl_sock_connect(), nussl_sock_peer(), read_raw(), readable_raw(), timed_connect(), and write_raw().


Typedef Documentation

typedef struct in_addr nussl_inet_addr

Definition at line 142 of file nussl_socket.c.


Function Documentation

static int connect_socket ( nussl_socket sock,
int  fd,
const nussl_inet_addr addr,
unsigned int  port 
) [static]

Definition at line 1138 of file nussl_socket.c.

References NUSSL_SOCK_ERROR, set_strerror, and timed_connect().

Referenced by nussl_sock_connect().

Here is the call graph for this function:

static int do_bind ( int  fd,
int  peer_family,
const nussl_inet_addr addr,
unsigned int  port 
) [static]

Definition at line 1210 of file nussl_socket.c.

References dummy_laddr.

Referenced by nussl_sock_connect().

nussl_ssl_socket nussl__sock_sslsock ( nussl_socket sock  ) 

Definition at line 1699 of file nussl_socket.c.

void nussl__ssl_set_verify_err ( nussl_session sess,
int  failures 
)

Definition at line 446 of file nussl_session.c.

References _, N_, NUSSL_SSL_EXPIRED, NUSSL_SSL_IDMISMATCH, NUSSL_SSL_INVALID, NUSSL_SSL_NOTYETVALID, NUSSL_SSL_REVOKED, NUSSL_SSL_SIGNER_NOT_CA, NUSSL_SSL_SIGNER_NOT_FOUND, and NUSSL_SSL_UNTRUSTED.

void nussl_addr_destroy ( nussl_sock_addr addr  ) 

Definition at line 1043 of file nussl_socket.c.

References nussl_sock_addr_s::addrs, and nussl_free.

Referenced by lookup_host(), and nussl_session_destroy().

char* nussl_addr_error ( const nussl_sock_addr addr,
char *  buf,
size_t  bufsiz 
)

Definition at line 973 of file nussl_socket.c.

References _, nussl_sock_addr_s::errnum, and nussl_strnzcpy.

Referenced by lookup_host().

const nussl_inet_addr* nussl_addr_first ( nussl_sock_addr addr  ) 

Definition at line 946 of file nussl_socket.c.

References nussl_sock_addr_s::addrs, and nussl_sock_addr_s::cursor.

Referenced by resolve_first().

const nussl_inet_addr* nussl_addr_next ( nussl_sock_addr addr  ) 

Definition at line 957 of file nussl_socket.c.

References nussl_sock_addr_s::addrs, nussl_sock_addr_s::count, and nussl_sock_addr_s::cursor.

Referenced by resolve_next().

nussl_sock_addr* nussl_addr_resolve ( const char *  hostname,
int  flags 
)

Definition at line 873 of file nussl_socket.c.

References INADDR_NONE, ipv6_disabled, nussl_calloc(), nussl_free, nussl_malloc(), and nussl_strdup().

Referenced by lookup_host().

Here is the call graph for this function:

int nussl_addr_result ( const nussl_sock_addr addr  ) 

Definition at line 941 of file nussl_socket.c.

References nussl_sock_addr_s::errnum.

Referenced by lookup_host().

void nussl_close_connection ( nussl_session sess  ) 

Definition at line 344 of file nussl_session.c.

References NUSSL_DBG_SOCKET, NUSSL_DEBUG, and nussl_sock_close().

Here is the call graph for this function:

const char* nussl_get_error ( nussl_session sess  ) 

Definition at line 332 of file nussl_session.c.

References nussl_strclean().

Here is the call graph for this function:

int nussl_get_session_flag ( nussl_session sess,
nussl_session_flag  flag 
)

Definition at line 277 of file nussl_session.c.

References NUSSL_SESSFLAG_LAST.

int nussl_iaddr_cmp ( const nussl_inet_addr i1,
const nussl_inet_addr i2 
)

Definition at line 1407 of file nussl_socket.c.

References SACAST.

void nussl_iaddr_free ( nussl_inet_addr addr  ) 

Definition at line 1430 of file nussl_socket.c.

References nussl_free.

nussl_inet_addr* nussl_iaddr_make ( nussl_iaddr_type  type,
const unsigned char *  raw 
)

Definition at line 1358 of file nussl_socket.c.

References nussl_calloc(), nussl_iaddr_ipv4, and nussl_iaddr_ipv6.

Here is the call graph for this function:

char* nussl_iaddr_print ( const nussl_inet_addr ia,
char *  buf,
size_t  bufsiz 
)

Definition at line 996 of file nussl_socket.c.

References nussl_strnzcpy, and SACAST.

Referenced by do_connect().

int nussl_iaddr_reverse ( const nussl_inet_addr ia,
char *  buf,
size_t  bufsiz 
)

Definition at line 1025 of file nussl_socket.c.

References nussl_strnzcpy.

nussl_iaddr_type nussl_iaddr_typeof ( const nussl_inet_addr ia  ) 

Definition at line 1397 of file nussl_socket.c.

References nussl_iaddr_ipv4, and nussl_iaddr_ipv6.

int nussl_init (  ) 

Definition at line 746 of file nussl_session.c.

References nussl_sock_init().

Here is the call graph for this function:

ssize_t nussl_read ( nussl_session session,
char *  buffer,
size_t  count 
)

Definition at line 613 of file nussl_session.c.

References NUSSL_ERROR, nussl_set_error(), nussl_sock_error(), and nussl_sock_read().

Here is the call graph for this function:

nussl_session* nussl_session_accept ( nussl_session srv_sess  ) 

Definition at line 173 of file nussl_session.c.

References _, nussl_session_create(), nussl_session_destroy(), nussl_set_error(), nussl_sock_accept(), nussl_sock_create(), and nussl_sock_fd().

Referenced by tls_nufw_accept(), and tls_user_accept().

Here is the call graph for this function:

nussl_session* nussl_session_create (  ) 

Definition at line 127 of file nussl_session.c.

References nussl_calloc(), NUSSL_SESSFLAG_PERSIST, NUSSL_SESSFLAG_SSLv2, NUSSL_SESSFLAG_TLS_SNI, nussl_ssl_context_create(), and SOCKET_READ_TIMEOUT.

Here is the call graph for this function:

nussl_session* nussl_session_create_with_fd ( int  server_fd,
int  verify 
)

Definition at line 157 of file nussl_session.c.

References nussl_session_create(), and nussl_sock_create_with_fd().

Referenced by tls_nufw_init(), and tls_user_init().

Here is the call graph for this function:

void nussl_session_destroy ( nussl_session sess  ) 

Definition at line 82 of file nussl_session.c.

References nussl_addr_destroy(), nussl_close_connection(), NUSSL_DBG_HTTP, NUSSL_DEBUG, nussl_free, nussl_ssl_cert_free(), nussl_ssl_clicert_free(), and nussl_ssl_context_destroy().

Here is the call graph for this function:

int nussl_session_get_fd ( nussl_session sess  ) 

Definition at line 222 of file nussl_session.c.

References nussl_sock_fd().

Referenced by encode_nufw(), nu_client_check(), nussl_session_getpeer(), suppress_nufw_session(), tls_nufw_accept(), and tls_user_accept().

Here is the call graph for this function:

int nussl_session_getpeer ( nussl_session sess,
struct sockaddr *  addr,
socklen_t *  addrlen 
)

Definition at line 725 of file nussl_session.c.

References NUSSL_ERROR, NUSSL_OK, nussl_session_get_fd(), and nussl_set_error().

Referenced by tls_nufw_accept(), and tls_user_accept().

Here is the call graph for this function:

int nussl_session_handshake ( nussl_session client_sess,
nussl_session srv_sess 
)

Definition at line 203 of file nussl_session.c.

References nussl__ssl_post_handshake(), nussl_get_error(), NUSSL_OK, nussl_set_error(), nussl_sock_accept_ssl(), and nussl_sock_error().

Referenced by tls_nufw_accept(), and tls_user_accept().

Here is the call graph for this function:

int nussl_session_set_dh_bits ( nussl_session sess,
unsigned int  dh_bits 
)

Definition at line 230 of file nussl_session.c.

References NUSSL_ERROR, and nussl_ssl_context_set_dh_bits().

Referenced by tls_nufw_init(), and tls_user_init().

Here is the call graph for this function:

void nussl_set_addrlist ( nussl_session sess,
const nussl_inet_addr **  addrs,
size_t  n 
)

Definition at line 238 of file nussl_session.c.

void nussl_set_connect_timeout ( nussl_session sess,
int  timeout 
)

Definition at line 323 of file nussl_session.c.

void nussl_set_error ( nussl_session sess,
const char *  format,
  ... 
)

Definition at line 249 of file nussl_session.c.

References nussl_vsnprintf().

Referenced by do_connect(), lookup_host(), nussl_get_server_cert_dn(), nussl_read(), nussl_session_accept(), nussl_session_getpeer(), nussl_session_handshake(), nussl_ssl_set_keypair(), nussl_ssl_set_pkcs12_keypair(), nussl_ssl_trust_cert_file(), and nussl_write().

Here is the call graph for this function:

void nussl_set_hostinfo ( nussl_session sess,
const char *  hostname,
unsigned int  port 
)

Definition at line 113 of file nussl_session.c.

References nussl_free, and nussl_strdup().

Here is the call graph for this function:

void nussl_set_read_timeout ( nussl_session sess,
int  timeout 
)

Definition at line 314 of file nussl_session.c.

void nussl_set_session_flag ( nussl_session sess,
nussl_session_flag  flag,
int  value 
)

Definition at line 261 of file nussl_session.c.

References NUSSL_SESSFLAG_LAST, NUSSL_SESSFLAG_SSLv2, nussl_ssl_context_set_flag(), and NUSSL_SSL_CTX_SSLv2.

Here is the call graph for this function:

int nussl_sock_accept ( nussl_socket sock,
int  listener 
)

Definition at line 1438 of file nussl_socket.c.

Referenced by nussl_session_accept().

int nussl_sock_accept_full ( nussl_socket sock,
int  listener,
struct sockaddr *  addr,
socklen_t *  addrlen 
)

Definition at line 1449 of file nussl_socket.c.

int nussl_sock_accept_ssl ( nussl_socket sock,
nussl_ssl_context ctx 
)

Definition at line 1532 of file nussl_socket.c.

References _, NUSSL_SOCK_ERROR, and set_error.

Referenced by nussl_session_handshake().

int nussl_sock_block ( nussl_socket sock,
int  n 
)

Definition at line 436 of file nussl_socket.c.

char* nussl_sock_cipher ( nussl_socket sock  ) 

Definition at line 1739 of file nussl_socket.c.

References nussl_strdup().

Here is the call graph for this function:

int nussl_sock_close ( nussl_socket sock  ) 

Definition at line 1761 of file nussl_socket.c.

References nussl_close, and nussl_free.

Referenced by nussl_close_connection().

int nussl_sock_connect ( nussl_socket sock,
const nussl_inet_addr addr,
unsigned int  port 
)

Definition at line 1261 of file nussl_socket.c.

References _, connect_socket(), do_bind(), dummy_laddr, ia_family, ia_proto, nussl_close, nussl_errno, NUSSL_SOCK_ERROR, set_error, and set_strerror.

Referenced by do_connect().

Here is the call graph for this function:

int nussl_sock_connect_ssl ( nussl_socket sock,
nussl_ssl_context ctx,
void *  userdata 
)

Definition at line 1580 of file nussl_socket.c.

References _, nussl_malloc(), NUSSL_SOCK_ERROR, and set_error.

Here is the call graph for this function:

void nussl_sock_connect_timeout ( nussl_socket sock,
int  timeout 
)

Definition at line 1471 of file nussl_socket.c.

Referenced by do_connect().

nussl_socket* nussl_sock_create ( void   ) 

Definition at line 1173 of file nussl_socket.c.

References iofns_raw, nussl_calloc(), and SOCKET_READ_TIMEOUT.

Referenced by do_connect(), nussl_session_accept(), and nussl_sock_create_with_fd().

Here is the call graph for this function: