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

[PATCH] http: add option to try authentication without username

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Feb 15, 2016, 18:44 UTC
Message-ID
<1455561886-42028-1-git-send-email-sandals@crustytoothpaste.net>
In-Reply-To
<CAHdYDCq+MiAJoCPFd3Qn9VjAzoii8QgTOOV7HXEV8OdzW-dgPQ@mail.gmail.com>

Performing GSS-Negotiate authentication using Kerberos does not require specifying a username or password, since that information is already included in the ticket itself. However, libcurl refuses to perform authentication if it has not been provided with a username and password. Add an option, http.emptyAuth, that provides libcurl with an empty username and password to make it attempt authentication anyway. --- I'm not super excited about this name, but I couldn't think of a better one. Suggestions welcome.

 Documentation/config.txt |  6 ++++++
 http.c                   | 13 +++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 27f02be3..f11de77e 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1648,6 +1648,12 @@ http.proxyAuthMethod::
 * `ntlm` - NTLM authentication (compare the --ntlm option of `curl(1)`)
 --
 
+http.emptyAuth::
+	Attempt authentication without seeking a username or password.  This
+	can be used to attempt GSS-Negotiate authentication without specifying
+	a username in the URL, as libcurl normally requires a username for
+	authentication.
+
 http.cookieFile::
 	File containing previously stored cookie lines which should be used
 	in the Git http session, if they match the server. The file format
diff --git a/http.c b/http.c
index dfc53c1e..a12a804b 100644
--- a/http.c
+++ b/http.c
@@ -87,6 +87,7 @@ static int curl_save_cookies;
 struct credential http_auth = CREDENTIAL_INIT;
 static int http_proactive_auth;
 static const char *user_agent;
+static int curl_empty_auth;
 
 #if LIBCURL_VERSION_NUM >= 0x071700
 /* Use CURLOPT_KEYPASSWD as is */
@@ -299,14 +300,22 @@ static int http_options(const char *var, const char *value, void *cb)
 	if (!strcmp("http.useragent", var))
 		return git_config_string(&user_agent, var, value);
 
+	if (!strcmp("http.emptyauth", var)) {
+		curl_empty_auth = git_config_bool(var, value);
+		return 0;
+	}
+
 	/* Fall back on the default ones */
 	return git_default_config(var, value, cb);
 }
 
 static void init_curl_http_auth(CURL *result)
 {
-	if (!http_auth.username)
+	if (!http_auth.username) {
+		if (curl_empty_auth)
+			curl_easy_setopt(result, CURLOPT_USERPWD, ":");
 		return;
+	}
 
 	credential_fill(&http_auth);
 
@@ -827,7 +836,7 @@ struct active_request_slot *get_active_slot(void)
 #ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
 	curl_easy_setopt(slot->curl, CURLOPT_HTTPAUTH, http_auth_methods);
 #endif
-	if (http_auth.password)
+	if (http_auth.password || curl_empty_auth)
 		init_curl_http_auth(slot->curl);
 
 	return slot;
Previous: Dmitry VilkovNext: Eric Sunshine
Message 13 of 25 in “remote-curl: don't fall back to Basic auth if we haven't tried Negotiate”
  1. remote-curl: don't fall back to Basic auth if we haven't tried NegotiateDmitry Vilkov, Feb 2, 2016
  2. Junio C HamanoFeb 2, 2016
  3. brian m. carlsonFeb 2, 2016
  4. Dmitry VilkovFeb 5, 2016
  5. Junio C HamanoFeb 5, 2016
  6. brian m. carlsonFeb 5, 2016
  7. Daniel StenbergFeb 6, 2016
  8. brian m. carlsonFeb 5, 2016
  9. Junio C HamanoFeb 5, 2016
  10. brian m. carlsonFeb 5, 2016
  11. Junio C HamanoFeb 5, 2016
  12. Dmitry VilkovFeb 8, 2016
  13. http: add option to try authentication without usernamebrian m. carlson, Feb 15, 2016
  14. Eric SunshineFeb 15, 2016
  15. brian m. carlsonFeb 15, 2016
  16. Jeff KingFeb 15, 2016
  17. brian m. carlsonFeb 15, 2016
  18. Junio C HamanoFeb 15, 2016
  19. brian m. carlsonFeb 15, 2016
  20. Eric SunshineFeb 15, 2016
  21. brian m. carlsonFeb 15, 2016
  22. Dmitry VilkovFeb 20, 2016
  23. brian m. carlsonFeb 20, 2016
  24. Junio C HamanoFeb 20, 2016
  25. Dmitry VilkovFeb 25, 2016

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.