git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4] Allow HTTP user agent string to be modified.

From
Spencer E. Olson <olsonse@umich.edu>
Date
Aug 11, 2010, 20:32 UTC
Message-ID
<1281558725-29938-1-git-send-email-olsonse@umich.edu>
In-Reply-To
<7v62zgyks6.fsf@alter.siamese.dyndns.org>

Some firewalls restrict HTTP connections based on the clients user agent. This commit provides the user the ability to modify the user agent string via either a new config option (http.useragent) or by an environment variable (GIT_USER_AGENT). Relevant documentation is added to Documentation/config.txt.

Signed-off-by: Spencer E. Olson <olsonse@umich.edu>
---
All,

This includes the changes suggested by Ray Chuan and by Junio Hamano, with one minor additional change: This changes the internal -DGIT_USER_AGENT to -DGIT_HTTP_USER_AGENT.

Since GIT_HTTP_* seems to follow what several of the other HTTP related environement variables, I agree that using GIT_HTTP_USER_AGENT is better for the user interface (via env variables) than GIT_USER_AGENT. I would like to additionally change the internal token also to GIT_HTTP_USER_AGENT just because it is clearer for other developers.

 Documentation/config.txt |    9 +++++++++
 Makefile                 |    2 +-
 http.c                   |    9 ++++++++-
 3 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index f81fb91..7253b71 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1243,6 +1243,15 @@ http.noEPSV::
 	support EPSV mode. Can be overridden by the 'GIT_CURL_FTP_NO_EPSV'
 	environment variable. Default is false (curl will use EPSV).
 
+http.useragent::
+	The HTTP USER_AGENT string presented to an HTTP server.  The default
+	value represents the version of the client git such as git/1.7.1.
+	This option allows you to override this value to a more common value
+	such as Mozilla/4.0.  This may be necessary, for instance, if
+	connecting through a firewall that restricts HTTP connections to a set
+	of common USER_AGENT strings (but not including those like git/1.7.1).
+	Can be overridden by the 'GIT_HTTP_USER_AGENT' environment variable.
+
 i18n.commitEncoding::
 	Character encoding the commit messages are stored in; git itself
 	does not care per se, but this information is necessary e.g. when
diff --git a/Makefile b/Makefile
index e151516..f84f4a1 100644
--- a/Makefile
+++ b/Makefile
@@ -1873,7 +1873,7 @@ builtin/init-db.s builtin/init-db.o: EXTRA_CPPFLAGS = \
 
 config.s config.o: EXTRA_CPPFLAGS = -DETC_GITCONFIG='"$(ETC_GITCONFIG_SQ)"'
 
-http.s http.o: EXTRA_CPPFLAGS = -DGIT_USER_AGENT='"git/$(GIT_VERSION)"'
+http.s http.o: EXTRA_CPPFLAGS = -DGIT_HTTP_USER_AGENT='"git/$(GIT_VERSION)"'
 
 ifdef NO_EXPAT
 http-walker.s http-walker.o: EXTRA_CPPFLAGS = -DNO_EXPAT
diff --git a/http.c b/http.c
index 1320c50..0a5011f 100644
--- a/http.c
+++ b/http.c
@@ -41,6 +41,7 @@ static long curl_low_speed_time = -1;
 static int curl_ftp_no_epsv;
 static const char *curl_http_proxy;
 static char *user_name, *user_pass;
+static const char *user_agent;
 
 #if LIBCURL_VERSION_NUM >= 0x071700
 /* Use CURLOPT_KEYPASSWD as is */
@@ -196,6 +197,9 @@ static int http_options(const char *var, const char *value, void *cb)
 		return 0;
 	}
 
+	if (!strcmp("http.useragent", var))
+		return git_config_string(&user_agent, var, value);
+
 	/* Fall back on the default ones */
 	return git_default_config(var, value, cb);
 }
@@ -279,7 +283,8 @@ static CURL *get_curl_handle(void)
 	if (getenv("GIT_CURL_VERBOSE"))
 		curl_easy_setopt(result, CURLOPT_VERBOSE, 1);
 
-	curl_easy_setopt(result, CURLOPT_USERAGENT, GIT_USER_AGENT);
+	curl_easy_setopt(result, CURLOPT_USERAGENT,
+		user_agent ? user_agent : GIT_HTTP_USER_AGENT);
 
 	if (curl_ftp_no_epsv)
 		curl_easy_setopt(result, CURLOPT_FTP_USE_EPSV, 0);
@@ -380,6 +385,8 @@ void http_init(struct remote *remote)
 #endif
 	set_from_env(&ssl_cainfo, "GIT_SSL_CAINFO");
 
+	set_from_env(&user_agent, "GIT_HTTP_USER_AGENT");
+
 	low_speed_limit = getenv("GIT_HTTP_LOW_SPEED_LIMIT");
 	if (low_speed_limit != NULL)
 		curl_low_speed_limit = strtol(low_speed_limit, NULL, 10);
-- 
1.7.0.4
Previous: Junio C HamanoNext: Jacob Helwig
Message 11 of 14 in “Allow HTTP user agent string to be modified.”
  1. Allow HTTP user agent string to be modified.Spencer E. Olson, Aug 7, 2010
  2. Ævar Arnfjörð BjarmasonAug 7, 2010
  3. Spencer E. OlsonAug 7, 2010
  4. Ævar Arnfjörð BjarmasonAug 7, 2010
  5. Tay Ray ChuanAug 8, 2010
  6. Tay Ray ChuanAug 8, 2010
  7. Spencer E. OlsonAug 8, 2010
  8. Allow HTTP user agent string to be modified.Spencer E. Olson, Aug 11, 2010
  9. Tay Ray ChuanAug 11, 2010
  10. Junio C HamanoAug 11, 2010
  11. Allow HTTP user agent string to be modified.Spencer E. Olson, Aug 11, 2010
  12. Jacob HelwigAug 11, 2010
  13. Allow HTTP user agent string to be modified.Spencer E. Olson, Aug 11, 2010
  14. Junio C HamanoAug 12, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.