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

Re: [PATCH v2] http: support sending custom HTTP headers

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 26, 2016, 17:03 UTC
Message-ID
<xmqq8u00i9pp.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<921e007f445476b27325c12a9e92fdd169a073b7.1461685158.git.johannes.schindelin@gmx.de>
Johannes Schindelin <johannes.schindelin@gmx.de> writes:
Show 15 quoted lines
> We introduce a way to send custom HTTP headers with all requests.
>
> This allows us, for example, to send an extra token from build agents
> for temporary access to private repositories. (This is the use case that
> triggered this patch.)
>
> This feature can be used like this:
>
> 	git -c http.extraheader='Secret: sssh!' fetch $URL $REF
>
> As `curl_easy_setopt(..., CURLOPT_HTTPHEADER, ...)` overrides previous
> calls' headers (instead of appending the headers, as this unsuspecting
> developer thought initially), we piggyback onto the `Pragma:` setting by
> default, and introduce the global helper `http_copy_default_headers()`
> to help functions that want to specify HTTP headers themselves.

My reading stuttered at "we piggyback onto the `Pragma:` setting by default", which made me stop and wonder if a description about a knob that changes this behaviour and makes us piggyback onto something else follows.

I guess "by default" you meant that the majority of codepaths set the headers using no_pragma_header or pragma_header variables, and by [no_]pragma_header to mean more than just about "Pragma:" by adding the extra headers to them, you did not have to touch them. Other codepaths that do not use these two variables but start from NULL you made them start from these extra headers.

Which makes sense.
Show 14 quoted lines
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 42d2b50..37b9af7 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -1655,6 +1655,12 @@ http.emptyAuth::
>  	a username in the URL, as libcurl normally requires a username for
>  	authentication.
>  
> +http.extraHeader::
> +	Pass an additional HTTP header when communicating with a server.  If
> +	more than one such entry exists, all of them are added as extra headers.
> +	This feature is useful e.g. to increase security, or to allow
> +	time-limited access based on expiring tokens.
> +

I think one-time/short-lived use case does not want to have this in a configuration file, and instead want to do the command line thing you illustrated in the proposed log message. I however wonder if there are other use cases where having this in $GIT_DIR/config for repeated use is useful. If there is, not being able to override a configured value per invocation would become a problem.

Peff, what do you think? I vaguely recollect that you did a hack to one variable that declares "an empty value means discard accumulated values so far" or something like that, and this variable deserves a mechanism like that, too.

Show 9 quoted lines
> diff --git a/http.c b/http.c
> index 4304b80..3d662bb 100644
> --- a/http.c
> +++ b/http.c
> @@ -1163,6 +1175,16 @@ int run_one_slot(struct active_request_slot *slot,
>  	return handle_curl_result(results);
>  }
>  
> +struct curl_slist *http_copy_default_headers()
struct curl_slist *http_copy_default_headers(void)
Show 18 quoted lines
> +{
> +	struct curl_slist *headers = NULL, *h;
> +
> +	for (h = extra_http_headers; h; h = h->next)
> +		headers = curl_slist_append(headers, h->data);
> +
> +	return headers;
> +}
> +
> diff --git a/http.h b/http.h
> index 4ef4bbd..5f13695 100644
> --- a/http.h
> +++ b/http.h
> @@ -106,6 +106,7 @@ extern void step_active_slots(void);
>  extern void http_init(struct remote *remote, const char *url,
>  		      int proactive_auth);
>  extern void http_cleanup(void);
> +extern struct curl_slist *http_copy_default_headers();
extern struct curl_slist *http_copy_default_headers(void);
Previous: Johannes SchindelinNext: Jeff King
Message 14 of 119 in “http: Support sending custom HTTP headers”
  1. http: Support sending custom HTTP headersJohannes Schindelin, Apr 25, 2016
  2. Shawn PearceApr 25, 2016
  3. Jeff KingApr 25, 2016
  4. Johannes SchindelinApr 26, 2016
  5. Jeff KingApr 26, 2016
  6. Junio C HamanoApr 25, 2016
  7. Johannes SchindelinApr 26, 2016
  8. Junio C HamanoApr 26, 2016
  9. Jeff KingApr 26, 2016
  10. Johannes SchindelinApr 27, 2016
  11. Jeff KingApr 27, 2016
  12. Johannes SchindelinApr 27, 2016
  13. http: support sending custom HTTP headersJohannes Schindelin, Apr 26, 2016
  14. Junio C HamanoApr 26, 2016
  15. Jeff KingApr 26, 2016
  16. Junio C HamanoApr 26, 2016
  17. Jeff KingApr 26, 2016
  18. Johannes SchindelinApr 27, 2016
  19. Johannes SchindelinApr 27, 2016
  20. Junio C HamanoApr 26, 2016
  21. http: support sending custom HTTP headersJohannes Schindelin, Apr 27, 2016
  22. http: support sending custom HTTP headersJohannes Schindelin, Apr 27, 2016
  23. Jeff KingApr 27, 2016
  24. Junio C HamanoApr 27, 2016
  25. 0/2 Add support for sending additional HTTP headersJohannes Schindelin, Apr 28, 2016
  26. 1/2 http: support sending custom HTTP headersJohannes Schindelin, Apr 28, 2016
  27. 2/2 submodule: pass on http.extraheader config settingsJohannes Schindelin, Apr 28, 2016
  28. Jeff KingApr 28, 2016
  29. Johannes SchindelinApr 28, 2016
  30. Jeff KingApr 28, 2016
  31. Jacob KellerApr 28, 2016
  32. Jeff KingApr 28, 2016
  33. Stefan BellerApr 28, 2016
  34. Jeff KingApr 28, 2016
  35. Junio C HamanoApr 28, 2016
  36. Jeff KingApr 28, 2016
  37. Junio C HamanoApr 28, 2016
  38. Stefan BellerApr 28, 2016
  39. Junio C HamanoApr 28, 2016
  40. Junio C HamanoApr 28, 2016
  41. Stefan BellerApr 28, 2016
  42. Junio C HamanoApr 28, 2016
  43. Jeff KingApr 28, 2016
  44. Stefan BellerApr 28, 2016
  45. Junio C HamanoApr 28, 2016
  46. Jeff KingApr 29, 2016
  47. Jeff KingApr 28, 2016
  48. Stefan BellerApr 28, 2016
  49. Jeff KingApr 28, 2016
  50. Johannes SchindelinApr 29, 2016
  51. Jeff KingApr 29, 2016
  52. Jeff KingApr 28, 2016
  53. Junio C HamanoApr 28, 2016
  54. Johannes SchindelinApr 29, 2016
  55. Johannes SchindelinApr 29, 2016
  56. Jeff KingApr 29, 2016
  57. Johannes SchindelinApr 29, 2016
  58. 0/2 Add support for sending additional HTTP headersJohannes Schindelin, May 4, 2016
  59. 1/2 http: support sending custom HTTP headersJohannes Schindelin, May 4, 2016
  60. Lars SchneiderMay 5, 2016
  61. Junio C HamanoMay 5, 2016
  62. Jeff KingMay 5, 2016
  63. 2/2 submodule: pass on http.extraheader config settingsJohannes Schindelin, May 4, 2016
  64. Jeff KingMay 4, 2016
  65. Junio C HamanoMay 4, 2016
  66. Johannes SchindelinMay 4, 2016
  67. Junio C HamanoMay 4, 2016
  68. Jeff KingMay 4, 2016
  69. submodule: stop sanitizing config optionsJeff King, May 4, 2016
  70. Junio C HamanoMay 4, 2016
  71. Johannes SchindelinMay 4, 2016
  72. Stefan BellerMay 4, 2016
  73. Jeff KingMay 4, 2016
  74. Junio C HamanoMay 4, 2016
  75. Jeff KingMay 4, 2016
  76. Stefan BellerMay 4, 2016
  77. Jeff KingMay 5, 2016
  78. Junio C HamanoMay 5, 2016
  79. Jeff KingMay 5, 2016
  80. Junio C HamanoMay 5, 2016
  81. Stefan BellerMay 6, 2016
  82. Jeff KingMay 6, 2016
  83. Junio C HamanoMay 6, 2016
  84. 0/3 Add support for sending additional HTTP headers (part 2)Johannes Schindelin, May 9, 2016
  85. 1/3 tests: Adjust the configuration for Apache 2.2Johannes Schindelin, May 9, 2016
  86. Jeff KingMay 9, 2016
  87. Johannes SchindelinMay 9, 2016
  88. Jeff KingMay 9, 2016
  89. Johannes SchindelinMay 9, 2016
  90. Junio C HamanoMay 9, 2016
  91. Jeff KingMay 9, 2016
  92. Junio C HamanoMay 9, 2016
  93. Johannes SchindelinMay 10, 2016
  94. Junio C HamanoMay 10, 2016
  95. Junio C HamanoMay 9, 2016
  96. Lars SchneiderMay 10, 2016
  97. Junio C HamanoMay 10, 2016
  98. 2/3 t5551: make the test for extra HTTP headers more robustJohannes Schindelin, May 9, 2016
  99. Lars SchneiderMay 9, 2016
  100. Jeff KingMay 9, 2016
  101. Johannes SchindelinMay 9, 2016
  102. Jeff KingMay 9, 2016
  103. 3/3 submodule: pass on http.extraheader config settingsJohannes Schindelin, May 9, 2016
  104. 0/3 Add support for sending additional HTTP headers (part 2)Johannes Schindelin, May 10, 2016
  105. 1/3 tests: adjust the configuration for Apache 2.2Johannes Schindelin, May 10, 2016
  106. Junio C HamanoMay 10, 2016
  107. 2/3 t5551: make the test for extra HTTP headers more robustJohannes Schindelin, May 10, 2016
  108. Junio C HamanoMay 10, 2016
  109. t5551 hangs ?Torsten Bögershausen, May 11, 2016
  110. Jeff KingMay 11, 2016
  111. Torsten BögershausenMay 11, 2016
  112. Jeff KingMay 12, 2016
  113. Torsten BögershausenMay 12, 2016
  114. Jeff KingMay 12, 2016
  115. Jeff KingMay 12, 2016
  116. 3/3 submodule: ensure that -c http.extraheader is heededJohannes Schindelin, May 10, 2016
  117. Junio C HamanoMay 10, 2016
  118. Johannes SchindelinMay 11, 2016
  119. mail-patch-series.sh, was Re: [PATCH v7 0/3] Add support for sending additional HTTP headers (part 2)Johannes Schindelin, May 16, 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.