const gnutls_datum_t *cert_list;
unsigned int cert_list_size;
- if (argc != 5) {
+ if (argc != 5 && argc != 6) {
fprintf(stderr,
- "Usage: %s <ca-file> <hostname> <port> <hostname-verify>\n",
+ "Usage: %s <ca-file> <hostname> <port> <hostname-verify> "
+ "[<digest-authentication>]\n",
argv[0]);
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 (read_http_request(fd, buffer, sizeof(buffer)) == -1) {
| AI_V4MAPPED; /* support IPv4 through IPv6 */
gai_return = getaddrinfo(hostname, port, &gai_hints, &gai_result);
if (gai_return != 0) {
- perror("connect_to_host(): getaddrinfo()");
+ if (gai_return == EAI_SYSTEM) {
+ perror("connect_to_host(): getaddrinfo()");
+ } else {
+ fprintf(stderr, "connect_to_host(): getaddrinfo(): %s",
+ gai_strerror(gai_return));
+ }
return -1;
}
server_socket = socket(server->ai_family,
server->ai_socktype,
server->ai_protocol);
- if (server_socket == -1) {
+ if (server_socket < 0) {
perror("connect_to_host(): socket(), trying next");
continue;
}
- if (connect(server_socket, server->ai_addr, server->ai_addrlen) != -1) {
+ if (connect(server_socket, server->ai_addr, server->ai_addrlen) == 0) {
break;
}
perror("connect_to_host(): connect(), trying next");
perror("read_http_request(): fgets()");
return -1;
}
-
+ /* EOF */
return -2;
}
- while (fgets(buffer, MAX_REQUEST_LINE, client_fd) != NULL) {
+ while (fgets(buffer, sizeof(buffer), client_fd) != NULL) {
/* End of header. */
if (!strcmp(buffer, "\n") || !strcmp(buffer, "\r\n")) {
break;