static int do_handshake (socket_st * socket) { int ret; gnutls_transport_set_ptr (socket->session, (gnutls_transport_ptr_t) gl_fd_to_handle (socket->fd)); do { ret = gnutls_handshake (socket->session); if (ret < 0) { handle_error (socket, ret); } } while (ret < 0 && gnutls_error_is_fatal (ret) == 0); if (ret == 0) { /* print some information */ print_info (socket->session, socket->hostname, info.insecure); socket->secure = 1; } else { gnutls_alert_send_appropriate (socket->session, ret); shutdown (socket->fd, SHUT_RDWR); } return ret; }
static int do_handshake (socket_st * socket) { int ret; gnutls_transport_set_ptr (socket->session, (gnutls_transport_ptr_t) gl_fd_to_handle (socket->fd)); do { gnutls_handshake_set_timeout( socket->session, GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT); ret = gnutls_handshake (socket->session); if (ret < 0) { handle_error (socket, ret); } } while (ret < 0 && gnutls_error_is_fatal (ret) == 0); if (ret == 0) { /* print some information */ print_info (socket->session, verbose, 0); socket->secure = 1; } else { gnutls_alert_send_appropriate (socket->session, ret); shutdown (socket->fd, SHUT_RDWR); } return ret; }
int main (void) { int err; err = gl_sockets_startup (SOCKETS_1_1); if (err != 0) { printf ("wsastartup failed %d\n", err); return 1; } err = gl_sockets_cleanup (); if (err != 0) { printf ("wsacleanup failed %d\n", err); return 1; } (void) gl_fd_to_handle (0); return 0; }
int main(int argc, char **argv) { int ret; int i; gnutls_session_t state; char portname[6]; socket_st hd; char app_proto[32] = ""; cmd_parser(argc, argv); #ifndef _WIN32 signal(SIGPIPE, SIG_IGN); #endif sockets_init(); if (gnutls_global_init() < 0) { fprintf(stderr, "global state initialization error\n"); exit(1); } gnutls_global_set_log_function(tls_log_func); gnutls_global_set_log_level(debug); /* get server name */ snprintf(portname, sizeof(portname), "%d", port); /* X509 stuff */ if (gnutls_certificate_allocate_credentials(&xcred) < 0) { /* space for 2 certificates */ fprintf(stderr, "memory error\n"); exit(1); } /* SRP stuff */ #ifdef ENABLE_SRP if (gnutls_srp_allocate_client_credentials(&srp_cred) < 0) { fprintf(stderr, "memory error\n"); exit(1); } #endif #ifdef ENABLE_ANON /* ANON stuff */ if (gnutls_anon_allocate_client_credentials(&anon_cred) < 0) { fprintf(stderr, "memory error\n"); exit(1); } #endif if (HAVE_OPT(STARTTLS_PROTO)) { snprintf(app_proto, sizeof(app_proto), "%s", OPT_ARG(STARTTLS_PROTO)); } if (app_proto[0] == 0) { snprintf(app_proto, sizeof(app_proto), "%s", port_to_service(portname, "tcp")); } sockets_init(); i = 0; printf("GnuTLS debug client %s\n", gnutls_check_version(NULL)); printf("Checking %s:%s\n", hostname, portname); do { if (tls_tests[i].test_name == NULL) break; /* finished */ /* if neither of SSL3 and TLSv1 are supported, exit */ if (i > 6 && tls1_2_ok == 0 && tls1_1_ok == 0 && tls1_ok == 0 && ssl3_ok == 0) { fprintf(stderr, "\nServer does not support any of SSL 3.0, TLS 1.0 and TLS 1.1 and TLS 1.2\n"); break; } socket_open(&hd, hostname, portname, 0, NULL); hd.verbose = verbose; socket_starttls(&hd, app_proto); gnutls_init(&state, GNUTLS_CLIENT | GNUTLS_NO_EXTENSIONS); gnutls_transport_set_ptr(state, (gnutls_transport_ptr_t) gl_fd_to_handle(hd.fd)); set_read_funcs(state); if (hostname && is_ip(hostname) == 0) gnutls_server_name_set(state, GNUTLS_NAME_DNS, hostname, strlen(hostname)); do { if (strcmp(app_proto, "https") != 0 && tls_tests[i].https_only != 0) { i++; break; } ret = tls_tests[i].func(state); if (ret != TEST_IGNORE) { printf("%58s...", tls_tests[i].test_name); fflush(stdout); } if (ret == TEST_SUCCEED) { if (tls_tests[i].suc_str == NULL) printf(" %s\n", ext_text); else printf(" %s\n", tls_tests[i].suc_str); } else if (ret == TEST_FAILED) printf(" %s\n", tls_tests[i].fail_str); else if (ret == TEST_UNSURE) printf(" %s\n", tls_tests[i].unsure_str); else if (ret == TEST_IGNORE) { if (tls_tests[i+1].test_name) i++; else break; } } while (ret == TEST_IGNORE && tls_tests[i].test_name != NULL); gnutls_deinit(state); socket_bye(&hd); i++; } while (1); #ifdef ENABLE_SRP gnutls_srp_free_client_credentials(srp_cred); #endif gnutls_certificate_free_credentials(xcred); #ifdef ENABLE_ANON gnutls_anon_free_client_credentials(anon_cred); #endif gnutls_global_deinit(); return 0; }
int main (int argc, char **argv) { int err, ret; int sd, i; gnutls_session_t state; char buffer[MAX_BUF + 1]; char portname[6]; struct addrinfo hints, *res, *ptr; cmd_parser(argc, argv); #ifndef _WIN32 signal (SIGPIPE, SIG_IGN); #endif sockets_init (); if (gnutls_global_init () < 0) { fprintf (stderr, "global state initialization error\n"); exit (1); } gnutls_global_set_log_function (tls_log_func); gnutls_global_set_log_level (debug); printf ("Resolving '%s'...\n", hostname); /* get server name */ memset (&hints, 0, sizeof (hints)); hints.ai_socktype = SOCK_STREAM; hints.ai_flags = 0; snprintf (portname, sizeof (portname), "%d", port); if ((err = getaddrinfo (hostname, portname, &hints, &res)) != 0) { fprintf (stderr, "Cannot resolve %s: %s\n", hostname, gai_strerror (err)); exit (1); } /* X509 stuff */ if (gnutls_certificate_allocate_credentials (&xcred) < 0) { /* space for 2 certificates */ fprintf (stderr, "memory error\n"); exit (1); } /* SRP stuff */ #ifdef ENABLE_SRP if (gnutls_srp_allocate_client_credentials (&srp_cred) < 0) { fprintf (stderr, "memory error\n"); exit (1); } #endif #ifdef ENABLE_ANON /* ANON stuff */ if (gnutls_anon_allocate_client_credentials (&anon_cred) < 0) { fprintf (stderr, "memory error\n"); exit (1); } #endif i = 0; do { if (tls_tests[i].test_name == NULL) break; /* finished */ /* if neither of SSL3 and TLSv1 are supported, exit */ if (i > 6 && tls1_1_ok == 0 && tls1_ok == 0 && ssl3_ok == 0) { fprintf (stderr, "\nServer does not support any of SSL 3.0, TLS 1.0 and TLS 1.1\n"); break; } sd = -1; for (ptr = res; ptr != NULL; ptr = ptr->ai_next) { sd = socket (ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); if (sd == -1) { continue; } getnameinfo (ptr->ai_addr, ptr->ai_addrlen, buffer, MAX_BUF, NULL, 0, NI_NUMERICHOST); if (tt == 0) { printf ("Connecting to '%s:%d'...\n", buffer, port); tt = 1; } if ((err = connect (sd, ptr->ai_addr, ptr->ai_addrlen)) != 0) { close (sd); sd = -1; continue; } else break; } ERR (err, "connect"); gnutls_init (&state, GNUTLS_CLIENT|GNUTLS_NO_EXTENSIONS); gnutls_transport_set_ptr (state, (gnutls_transport_ptr_t) gl_fd_to_handle (sd)); if (hostname && !isdigit(hostname[0]) && strchr(hostname, ':') == 0) gnutls_server_name_set (state, GNUTLS_NAME_DNS, hostname, strlen (hostname)); do { printf ("Checking %s...", tls_tests[i].test_name); fflush(stdout); ret = tls_tests[i].func (state); if (ret == TEST_SUCCEED) printf (" %s\n", tls_tests[i].suc_str); else if (ret == TEST_FAILED) printf (" %s\n", tls_tests[i].fail_str); else if (ret == TEST_UNSURE) printf (" %s\n", tls_tests[i].unsure_str); else if (ret == TEST_IGNORE) { printf (" N/A\n"); i++; } } while (ret == TEST_IGNORE && tls_tests[i].test_name != NULL); gnutls_deinit (state); shutdown (sd, SHUT_RDWR); /* no more receptions */ close (sd); i++; } while (1); freeaddrinfo (res); #ifdef ENABLE_SRP gnutls_srp_free_client_credentials (srp_cred); #endif gnutls_certificate_free_credentials (xcred); #ifdef ENABLE_ANON gnutls_anon_free_client_credentials (anon_cred); #endif gnutls_global_deinit (); return 0; }