X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Fconnection.c;h=d69c2faf6c30874bb8f093ffeed0e260b2f7685a;hb=2baa95ccbe4631bafa59fb2200d5758f38943073;hp=aa42bfd2bffb60b9e8011b03a11c28bbbaf7013a;hpb=c51f4531e09a0fcf27aa9f3b5150fbadcf4f1a79;p=tlsproxy%2Ftlsproxy.git diff --git a/src/connection.c b/src/connection.c index aa42bfd..d69c2fa 100644 --- a/src/connection.c +++ b/src/connection.c @@ -59,7 +59,7 @@ static int initialize_tls_session_client(int peer_socket, static int initialize_tls_session_server(int peer_socket, gnutls_session_t *session, gnutls_certificate_credentials_t *x509_cred); -static int initialize_tls_session_both(int flags, +static int initialize_tls_session_both(unsigned int flags, int peer_socket, gnutls_session_t *session, gnutls_certificate_credentials_t *x509_cred); @@ -144,7 +144,7 @@ void handle_connection(int client_socket) { } if (parse_request(buffer, host, port, &version_minor) != 0) { - LOG(WARNING, "bad request: %s", buffer); + LOG(WARNING, "bad request: >%s<", buffer); send_bad_request(client_fd_write); goto out; } @@ -457,28 +457,27 @@ static int initialize_tls_session_server(int peer_socket, return initialize_tls_session_both(GNUTLS_CLIENT, peer_socket, session, x509_cred); } -static int initialize_tls_session_both(int flags, +static int initialize_tls_session_both(unsigned int flags, int peer_socket, gnutls_session_t *session, gnutls_certificate_credentials_t *x509_cred) { int result; + *session = NULL; + result = gnutls_init(session, flags); if (result != GNUTLS_E_SUCCESS) { LOG(ERROR, "initialize_tls_session_both(): gnutls_init(): %s", gnutls_strerror(result)); - gnutls_certificate_free_credentials(*x509_cred); - return -1; + goto err; } result = gnutls_priority_set(*session, global_tls_priority_cache); if (result != GNUTLS_E_SUCCESS) { LOG(ERROR, "initialize_tls_session_both(): gnutls_priority_set(): %s", gnutls_strerror(result)); - gnutls_deinit(*session); - gnutls_certificate_free_credentials(*x509_cred); - return -1; + goto err; } result = gnutls_credentials_set(*session, GNUTLS_CRD_CERTIFICATE, *x509_cred); @@ -486,9 +485,7 @@ static int initialize_tls_session_both(int flags, LOG(ERROR, "initialize_tls_session_both(): gnutls_credentials_set(): %s", gnutls_strerror(result)); - gnutls_deinit(*session); - gnutls_certificate_free_credentials(*x509_cred); - return -1; + goto err; } #ifdef HAVE_GNUTLS_TRANSPORT_SET_INT2 @@ -499,6 +496,13 @@ static int initialize_tls_session_both(int flags, #endif return 0; + +err: + if (*session) { + gnutls_deinit(*session); + } + gnutls_certificate_free_credentials(*x509_cred); + return -1; } @@ -542,14 +546,14 @@ static int read_http_request(FILE *client_fd, char *request, size_t length) { while (fgets(buffer, sizeof(buffer), client_fd) != NULL) { const char *authentication = "Proxy-Authorization: Basic "; - if (http_digest_authorization != NULL + if (global_http_digest_authorization != NULL && !strncmp(buffer, authentication, strlen(authentication))) { found_proxy_authorization = 1; /* Check if the passphrase matches. */ strtok(buffer, "\r\n"); if (strcmp(buffer + strlen(authentication), - http_digest_authorization)) { + global_http_digest_authorization)) { return -3; } } @@ -564,7 +568,7 @@ static int read_http_request(FILE *client_fd, char *request, size_t length) { return -1; } - if (http_digest_authorization != NULL && !found_proxy_authorization) { + if (global_http_digest_authorization != NULL && !found_proxy_authorization) { return -3; }