Esempio n. 1
0
/**
 * Garbage collection for a SSL server connection. 
 * @param ssl_server data for ssl server connection
 */
static void cleanup_ssl_server_socket(ssl_server_connection *ssl_server) {
  if (!ssl_server)
    return;

  FREE(ssl_server->pemfile);
  FREE(ssl_server->clientpemfile);

  while (ssl_server->ssl_conn_list) {
    ssl_connection *ssl = ssl_server->ssl_conn_list;
    ssl_server->ssl_conn_list = ssl_server->ssl_conn_list->next;
    close_accepted_ssl_socket(ssl_server, ssl);
  }
}
Esempio n. 2
0
/**
 * Do "accept" for a ssl server socket
 * @param ssl ssl connection
 * @return the ssl_connection of the socket, NULL in case of an error
 */
ssl_connection *accept_ssl_socket(ssl_server_connection *ssl_server) {

#ifdef HAVE_OPENSSL

    int no_crypt_socket;
    int len= sizeof(struct sockaddr_in);
    struct sockaddr_in in;

    ASSERT(ssl_server);

    no_crypt_socket= accept(ssl_server->server_socket, (struct sockaddr*)&in,
                            &len);

    if(no_crypt_socket >= 0) {

        ssl_connection *ssl = insert_accepted_ssl_socket(ssl_server);

        if(ssl == NULL) {

            return NULL;

        }

        if(embed_accepted_ssl_socket(ssl, no_crypt_socket)) {

            return ssl;

        } else {

            close_accepted_ssl_socket(ssl_server, ssl);
            return NULL;

        }

    } else {

        return NULL;

    }

#else

    return NULL;

#endif

}
Esempio n. 3
0
/**
 * Garbage collection for a SSL server connection.
 * @param ssl_server data for ssl server connection
 * @return TRUE, or FALSE if an error has occured.
 */
int cleanup_ssl_server_socket(ssl_server_connection *ssl_server) {

#ifdef HAVE_OPENSSL

    ssl_connection *ssl;

    if(ssl_server==NULL) {

        return FALSE;

    }

    if(ssl_server->pemfile!=NULL) {

        FREE(ssl_server->pemfile);
        ssl_server->pemfile= NULL;

    }

    if(ssl_server->clientpemfile!=NULL) {

        FREE(ssl_server->clientpemfile);
        ssl_server->clientpemfile= NULL;

    }

    while (ssl_server->ssl_conn_list!=NULL) {

        ssl = ssl_server->ssl_conn_list;

        ssl_server->ssl_conn_list=ssl_server->ssl_conn_list->next;

        close_accepted_ssl_socket(ssl_server, ssl);

    }

    return TRUE;

#else

    return TRUE;

#endif

}
Esempio n. 4
0
void socket_free(Socket_T *S) {
  
  ASSERT(S && *S);
  
#ifdef HAVE_OPENSSL
  if((*S)->ssl && (*S)->ssl->handler) {
    if((*S)->connection_type==TYPE_LOCAL) {
      close_ssl_socket((*S)->ssl);
      delete_ssl_socket((*S)->ssl);
    } else if((*S)->connection_type==TYPE_ACCEPT && (*S)->sslserver) {
      close_accepted_ssl_socket((*S)->sslserver, (*S)->ssl);
    }
  } else
#endif
  
  close_socket((*S)->socket);
  FREE((*S)->host);
  FREE(*S);
  
}