diff options
Diffstat (limited to 'imap-send.c')
| -rw-r--r-- | imap-send.c | 38 | 
1 files changed, 19 insertions, 19 deletions
diff --git a/imap-send.c b/imap-send.c index 4d3b7737a9..50377c5b88 100644 --- a/imap-send.c +++ b/imap-send.c @@ -287,17 +287,20 @@ static int ssl_socket_connect(struct imap_socket *sock, int use_tls_only, int ve  	SSL_library_init();  	SSL_load_error_strings(); -	if (use_tls_only) -		meth = TLSv1_method(); -	else -		meth = SSLv23_method(); - +	meth = SSLv23_method();  	if (!meth) {  		ssl_socket_perror("SSLv23_method");  		return -1;  	}  	ctx = SSL_CTX_new(meth); +	if (!ctx) { +		ssl_socket_perror("SSL_CTX_new"); +		return -1; +	} + +	if (use_tls_only) +		SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);  	if (verify)  		SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); @@ -862,7 +865,6 @@ static char hexchar(unsigned int b)  static char *cram(const char *challenge_64, const char *user, const char *pass)  {  	int i, resp_len, encoded_len, decoded_len; -	HMAC_CTX hmac;  	unsigned char hash[16];  	char hex[33];  	char *response, *response_64, *challenge; @@ -877,10 +879,8 @@ static char *cram(const char *challenge_64, const char *user, const char *pass)  				      (unsigned char *)challenge_64, encoded_len);  	if (decoded_len < 0)  		die("invalid challenge %s", challenge_64); -	HMAC_Init(&hmac, (unsigned char *)pass, strlen(pass), EVP_md5()); -	HMAC_Update(&hmac, (unsigned char *)challenge, decoded_len); -	HMAC_Final(&hmac, hash, NULL); -	HMAC_CTX_cleanup(&hmac); +	if (!HMAC(EVP_md5(), pass, strlen(pass), (unsigned char *)challenge, decoded_len, hash, NULL)) +		die("HMAC error");  	hex[32] = 0;  	for (i = 0; i < 16; i++) { @@ -890,14 +890,13 @@ static char *cram(const char *challenge_64, const char *user, const char *pass)  	/* response: "<user> <digest in hex>" */  	response = xstrfmt("%s %s", user, hex); -	resp_len = strlen(response) + 1; +	resp_len = strlen(response); -	response_64 = xmalloc(ENCODED_SIZE(resp_len) + 1); +	response_64 = xmallocz(ENCODED_SIZE(resp_len));  	encoded_len = EVP_EncodeBlock((unsigned char *)response_64,  				      (unsigned char *)response, resp_len);  	if (encoded_len < 0)  		die("EVP_EncodeBlock error"); -	response_64[encoded_len] = '\0';  	return (char *)response_64;  } @@ -1096,11 +1095,6 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc, char *f  				srvc->pass = xstrdup(cred.password);  		} -		if (CAP(NOLOGIN)) { -			fprintf(stderr, "Skipping account %s@%s, server forbids LOGIN\n", srvc->user, srvc->host); -			goto bail; -		} -  		if (srvc->auth_method) {  			struct imap_cmd_cb cb; @@ -1124,6 +1118,11 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc, char *f  				goto bail;  			}  		} else { +			if (CAP(NOLOGIN)) { +				fprintf(stderr, "Skipping account %s@%s, server forbids LOGIN\n", +					srvc->user, srvc->host); +				goto bail; +			}  			if (!imap->buf.sock.ssl)  				imap_warn("*** IMAP Warning *** Password is being "  					  "sent in the clear\n"); @@ -1188,7 +1187,7 @@ static void lf_to_crlf(struct strbuf *msg)  		j++;  	} -	new = xmalloc(j + 1); +	new = xmallocz(j);  	/*  	 * Second pass: write the new string.  Note that this loop is @@ -1444,6 +1443,7 @@ static CURL *setup_curl(struct imap_server_conf *srvc)  	if (0 < verbosity || getenv("GIT_CURL_VERBOSE"))  		curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); +	setup_curl_trace(curl);  	return curl;  }  | 
