Skip to content

Commit

Permalink
Use config file settings for http
Browse files Browse the repository at this point in the history
Use "http." config file settings if they exist.  Environment variables
still work, and they will override config file settings.

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Nick Hengeveld authored and Junio C Hamano committed Oct 15, 2005
1 parent bc8f265 commit d402d55
Showing 1 changed file with 88 additions and 21 deletions.
109 changes: 88 additions & 21 deletions http-fetch.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ static int active_requests = 0;
static int data_received;

#ifdef USE_CURL_MULTI
static int max_requests = DEFAULT_MAX_REQUESTS;
static int max_requests = -1;
static CURLM *curlm;
#endif
static CURL *curl_default;
Expand Down Expand Up @@ -85,11 +85,11 @@ struct active_request_slot
static struct transfer_request *request_queue_head = NULL;
static struct active_request_slot *active_queue_head = NULL;

static int curl_ssl_verify;
static char *ssl_cert;
static char *ssl_key;
static char *ssl_capath;
static char *ssl_cainfo;
static int curl_ssl_verify = -1;
static char *ssl_cert = NULL;
static char *ssl_key = NULL;
static char *ssl_capath = NULL;
static char *ssl_cainfo = NULL;

struct buffer
{
Expand All @@ -98,6 +98,60 @@ struct buffer
void *buffer;
};

static int http_options(const char *var, const char *value)
{
if (!strcmp("http.sslverify", var)) {
if (curl_ssl_verify == -1) {
curl_ssl_verify = git_config_bool(var, value);
}
return 0;
}

if (!strcmp("http.sslcert", var)) {
if (ssl_cert == NULL) {
ssl_cert = xmalloc(strlen(value)+1);
strcpy(ssl_cert, value);
}
return 0;
}
#if LIBCURL_VERSION_NUM >= 0x070902
if (!strcmp("http.sslkey", var)) {
if (ssl_key == NULL) {
ssl_key = xmalloc(strlen(value)+1);
strcpy(ssl_key, value);
}
return 0;
}
#endif
#if LIBCURL_VERSION_NUM >= 0x070908
if (!strcmp("http.sslcapath", var)) {
if (ssl_capath == NULL) {
ssl_capath = xmalloc(strlen(value)+1);
strcpy(ssl_capath, value);
}
return 0;
}
#endif
if (!strcmp("http.sslcainfo", var)) {
if (ssl_cainfo == NULL) {
ssl_cainfo = xmalloc(strlen(value)+1);
strcpy(ssl_cainfo, value);
}
return 0;
}

#ifdef USE_CURL_MULTI
if (!strcmp("http.maxrequests", var)) {
if (max_requests == -1)
max_requests = git_config_int(var, value);
return 0;
}
#endif

/* Fall back on the default ones */
return git_default_config(var, value);
}

static size_t fwrite_buffer(void *ptr, size_t eltsize, size_t nmemb,
struct buffer *buffer)
{
Expand Down Expand Up @@ -1114,43 +1168,56 @@ int main(int argc, char **argv)
char *http_max_requests = getenv("GIT_HTTP_MAX_REQUESTS");
if (http_max_requests != NULL)
max_requests = atoi(http_max_requests);
if (max_requests < 1)
max_requests = DEFAULT_MAX_REQUESTS;

curlm = curl_multi_init();
if (curlm == NULL) {
fprintf(stderr, "Error creating curl multi handle.\n");
return 1;
}
#endif

if (getenv("GIT_SSL_NO_VERIFY"))
curl_ssl_verify = 0;

ssl_cert = getenv("GIT_SSL_CERT");
#if LIBCURL_VERSION_NUM >= 0x070902
ssl_key = getenv("GIT_SSL_KEY");
#endif
#if LIBCURL_VERSION_NUM >= 0x070908
ssl_capath = getenv("GIT_SSL_CAPATH");
#endif
ssl_cainfo = getenv("GIT_SSL_CAINFO");

git_config(http_options);

if (curl_ssl_verify == -1)
curl_ssl_verify = 1;

#ifdef USE_CURL_MULTI
if (max_requests < 1)
max_requests = DEFAULT_MAX_REQUESTS;
#endif

pragma_header = curl_slist_append(pragma_header, "Pragma: no-cache");
no_pragma_header = curl_slist_append(no_pragma_header, "Pragma:");
no_range_header = curl_slist_append(no_range_header, "Range:");

curl_default = curl_easy_init();

curl_ssl_verify = getenv("GIT_SSL_NO_VERIFY") ? 0 : 1;
curl_easy_setopt(curl_default, CURLOPT_SSL_VERIFYPEER, curl_ssl_verify);
#if LIBCURL_VERSION_NUM >= 0x070907
curl_easy_setopt(curl_default, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
#endif

if ((ssl_cert = getenv("GIT_SSL_CERT")) != NULL) {
if (ssl_cert != NULL)
curl_easy_setopt(curl_default, CURLOPT_SSLCERT, ssl_cert);
}
#if LIBCURL_VERSION_NUM >= 0x070902
if ((ssl_key = getenv("GIT_SSL_KEY")) != NULL) {
if (ssl_key != NULL)
curl_easy_setopt(curl_default, CURLOPT_SSLKEY, ssl_key);
}
#endif
#if LIBCURL_VERSION_NUM >= 0x070908
if ((ssl_capath = getenv("GIT_SSL_CAPATH")) != NULL) {
if (ssl_capath != NULL)
curl_easy_setopt(curl_default, CURLOPT_CAPATH, ssl_capath);
}
#endif
if ((ssl_cainfo = getenv("GIT_SSL_CAINFO")) != NULL) {
if (ssl_cainfo != NULL)
curl_easy_setopt(curl_default, CURLOPT_CAINFO, ssl_cainfo);
}

curl_easy_setopt(curl_default, CURLOPT_FAILONERROR, 1);

alt = xmalloc(sizeof(*alt));
Expand Down

0 comments on commit d402d55

Please sign in to comment.