X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=tests%2Fclient.c;h=866afd13dd2a5f43e623019db6c0b5a613890b88;hb=a84000d1d2806c296bfc0fa4b505b5d5ef750715;hp=3f2dc4b66f7ccaddaaff185b23d59410e96ee5a7;hpb=c4343157f93bfeb4e6de858fdd61b8fb4eddafc2;p=tlsproxy%2Ftlsproxy.git diff --git a/tests/client.c b/tests/client.c index 3f2dc4b..866afd1 100644 --- a/tests/client.c +++ b/tests/client.c @@ -1,7 +1,7 @@ /* * Simple GnuTLS client used for testing. * - * Copyright (C) 2011 Simon Ruderich + * Copyright (C) 2011-2013 Simon Ruderich * * 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 @@ -19,22 +19,16 @@ #include -#include +#include +#include +#include #include +#include #include -/* socket(), connect() */ -#include #include -/* close() */ +#include #include -/* getaddrinfo() */ -#include -/* htons() */ -#include -/* errno */ -#include -/* GnuTLS */ #include #include @@ -59,9 +53,10 @@ int main (int argc, char *argv[]) { const gnutls_datum_t *cert_list; unsigned int cert_list_size; - if (5 != argc) { + if (argc != 5 && argc != 6) { fprintf(stderr, - "Usage: %s \n", + "Usage: %s " + "[]\n", argv[0]); return EXIT_FAILURE; } @@ -77,32 +72,35 @@ int main (int argc, char *argv[]) { gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); server = connect_to_host("localhost", "4711"); - if (-1 == server) { + if (server == -1) { return EXIT_FAILURE; } fd = fdopen(server, "a+"); - if (NULL == fd) { + if (fd == NULL) { perror("fdopen()"); return EXIT_FAILURE; } /* Talk to tlsproxy. */ fprintf(fd, "CONNECT %s:%s HTTP/1.0\r\n", argv[2], argv[3]); + if (argc == 6) { + fprintf(fd, "Proxy-Authorization: Basic %s\r\n", argv[5]); + } fprintf(fd, "\r\n"); fflush(fd); - if (-1 == read_http_request(fd, buffer, sizeof(buffer))) { + if (read_http_request(fd, buffer, sizeof(buffer)) == -1) { fprintf(stderr, "invalid proxy response\n"); return EXIT_FAILURE; } printf("response: %s\n", buffer); - if (1 != sscanf(buffer, "HTTP/1.0 %d", &response)) { + if (sscanf(buffer, "HTTP/1.0 %d", &response) != 1) { fprintf(stderr, "invalid proxy response: %s\n", buffer); return EXIT_FAILURE; } - if (200 != response) { + if (response != 200) { fprintf(stderr, "proxy failure\n"); return EXIT_FAILURE; } @@ -110,7 +108,7 @@ int main (int argc, char *argv[]) { gnutls_transport_set_ptr(session, (gnutls_transport_ptr_t)server); result = gnutls_handshake(session); - if (GNUTLS_E_SUCCESS != result) { + if (result != GNUTLS_E_SUCCESS) { fprintf(stderr, "gnutls_handshake() failed\n"); gnutls_perror(result); return EXIT_FAILURE; @@ -118,7 +116,7 @@ int main (int argc, char *argv[]) { /* Verify the proxy certificate. */ result = gnutls_certificate_verify_peers2(session, &status); - if (0 > result) { + if (result < 0) { fprintf(stderr, "gnutls_certificate_verify_peers2() failed\n"); gnutls_perror(result); return EXIT_FAILURE; @@ -129,20 +127,20 @@ int main (int argc, char *argv[]) { } /* Get proxy certificate. */ - if (0 > (result = gnutls_x509_crt_init(&cert))) { + if ((result = gnutls_x509_crt_init(&cert)) < 0) { fprintf(stderr, "gnutls_x509_crt_init() failed"); gnutls_perror(result); return EXIT_FAILURE; } cert_list = gnutls_certificate_get_peers(session, &cert_list_size); - if (NULL == cert_list) { + if (cert_list == NULL) { fprintf(stderr, "gnutls_certificate_get_peers() failed"); return EXIT_FAILURE; } - if (0 > (result = gnutls_x509_crt_import(cert, &cert_list[0], - GNUTLS_X509_FMT_DER))) { + if ((result = gnutls_x509_crt_import(cert, &cert_list[0], + GNUTLS_X509_FMT_DER)) < 0) { fprintf(stderr, "gnutls_x509_crt_import() failed"); gnutls_perror(result); return EXIT_FAILURE; @@ -151,6 +149,7 @@ int main (int argc, char *argv[]) { /* Check hostname. */ if (!gnutls_x509_crt_check_hostname(cert, argv[4])) { fprintf(stderr, "hostname didn't match '%s'\n", argv[4]); + return EXIT_FAILURE; } gnutls_x509_crt_deinit(cert); @@ -176,7 +175,7 @@ static int connect_to_host(const char *hostname, const char *port) { int server_socket; struct addrinfo *server; - if (NULL == hostname || NULL == port) { + if (hostname == NULL || port == NULL) { return -1; } @@ -189,24 +188,28 @@ static int connect_to_host(const char *hostname, const char *port) { | AI_ADDRCONFIG /* supported by this computer */ | AI_V4MAPPED; /* support IPv4 through IPv6 */ gai_return = getaddrinfo(hostname, port, &gai_hints, &gai_result); - if (0 != gai_return) { - perror("connect_to_host(): getaddrinfo()"); + if (gai_return != 0) { + if (gai_return == EAI_SYSTEM) { + perror("connect_to_host(): getaddrinfo()"); + } else { + fprintf(stderr, "connect_to_host(): getaddrinfo(): %s", + gai_strerror(gai_return)); + } return -1; } /* Now try to connect to each server returned by getaddrinfo(), use the * first successful connect. */ - for (server = gai_result; NULL != server; server = server->ai_next) { + for (server = gai_result; server != NULL; server = server->ai_next) { server_socket = socket(server->ai_family, server->ai_socktype, server->ai_protocol); - if (-1 == server_socket) { + if (server_socket == -1) { perror("connect_to_host(): socket(), trying next"); continue; } - if (-1 != connect(server_socket, server->ai_addr, - server->ai_addrlen)) { + if (connect(server_socket, server->ai_addr, server->ai_addrlen) != -1) { break; } perror("connect_to_host(): connect(), trying next"); @@ -216,7 +219,7 @@ static int connect_to_host(const char *hostname, const char *port) { /* Make sure we free the result from getaddrinfo(). */ freeaddrinfo(gai_result); - if (NULL == server) { + if (server == NULL) { perror("connect_to_host(): no server found, abort"); return -1; } @@ -227,18 +230,18 @@ static int connect_to_host(const char *hostname, const char *port) { static int read_http_request(FILE *client_fd, char *request, size_t length) { char buffer[MAX_REQUEST_LINE]; - if (NULL == fgets(request, (int)length, client_fd)) { + if (fgets(request, (int)length, client_fd) == NULL) { if (ferror(client_fd)) { perror("read_http_request(): fgets()"); return -1; } - + /* EOF */ return -2; } - while (NULL != fgets(buffer, MAX_REQUEST_LINE, client_fd)) { + while (fgets(buffer, sizeof(buffer), client_fd) != NULL) { /* End of header. */ - if (0 == strcmp(buffer, "\n") || 0 == strcmp(buffer, "\r\n")) { + if (!strcmp(buffer, "\n") || !strcmp(buffer, "\r\n")) { break; } }