GNU Tools Cauldron 2022 - video recordings

2022-10-18 Thread Martin Liška
Hello,

Video recordings of the GNU Tools Cauldron 2022 are available now
at YouTube:

https://www.youtube.com/playlist?list=PL_GiHdX17WtzDK0OVhD_u_a3ti4shpXLl

Cheers,
Martin


[PATCH] debuginfod-client: Add DEBUGINFOD_HEADERS_FILE.

2022-10-18 Thread Daniel Thornburgh via Elfutils-devel
This DEBUGINFOD_HEADERS_FILE environment variable names a file to supply
HTTP headers to outgoing requests. Notably, this allows for
Authorization headers to be added from a file under OS access control.

Signed-off-by: Daniel Thornburgh 
---
 NEWS|  3 +++
 debuginfod/ChangeLog|  5 
 debuginfod/debuginfod-client.c  | 44 +
 debuginfod/debuginfod.h.in  |  1 +
 doc/ChangeLog   |  4 +++
 doc/debuginfod-client-config.7  |  7 ++
 doc/debuginfod_find_debuginfo.3 | 12 ++---
 7 files changed, 73 insertions(+), 3 deletions(-)

diff --git a/NEWS b/NEWS
index 6ebd172c..3df652e3 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@ Version 0.188 some time after 0.187
 
 readelf: Add -D, --use-dynamic option.
 
+debuginfod-client: Add $DEBUGINFOD_HEADERS_FILE setting to supply outgoing
+   HTTP headers.
+
 debuginfod: Add --disable-source-scan option.
 
 libdwfl: Add new function dwfl_get_debuginfod_client.
diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog
index 59d50df1..1df903fe 100644
--- a/debuginfod/ChangeLog
+++ b/debuginfod/ChangeLog
@@ -1,3 +1,8 @@
+2022-10-18  Daniel Thornburgh 
+
+  * debuginfod-client.c (debuginfod_query_server): Add DEBUGINFOD_HEADERS_FILE
+  setting to supply outgoing HTTP headers.
+
 2022-10-17  Frank Ch. Eigler  
 
* debuginfod.cxx (main): Report libmicrohttpd version.
diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c
index 2a14d9d9..549520c1 100644
--- a/debuginfod/debuginfod-client.c
+++ b/debuginfod/debuginfod-client.c
@@ -42,6 +42,7 @@
 #include "config.h"
 #include "debuginfod.h"
 #include "system.h"
+#include 
 #include 
 #include 
 
@@ -447,6 +448,44 @@ add_default_headers(debuginfod_client *client)
   free (utspart);
 }
 
+/* Add HTTP headers found in the given file, one per line. Blank lines or 
invalid
+ * headers are ignored.
+ */
+static void
+add_headers_from_file(debuginfod_client *client, const char* filename)
+{
+  int vds = client->verbose_fd;
+  FILE *f = fopen (filename, "r");
+  if (f == NULL)
+{
+  dprintf(vds, "header file %s: %s\n", filename, strerror(errno));
+  return;
+}
+
+  while (1)
+{
+  char buf[8192];
+  char *s = &buf[0];
+  if (feof(f))
+break;
+  if (fgets (s, sizeof(buf), f) == NULL)
+break;
+  for (char *c = s; *c != '\0'; ++c)
+if (!isspace(*c))
+  goto nonempty;
+  continue;
+nonempty:
+  ;
+  size_t last = strlen(s)-1;
+  if (s[last] == '\n')
+s[last] = '\0';
+  int rc = debuginfod_add_http_header(client, s);
+  if (rc < 0)
+dprintf(vds, "skipping bad header: %s\n", strerror(-rc));
+}
+  fclose (f);
+}
+
 
 #define xalloc_str(p, fmt, args...)\
   do   \
@@ -610,6 +649,11 @@ debuginfod_query_server (debuginfod_client *c,
   if (maxtime && vfd >= 0)
 dprintf(vfd, "using max time %lds\n", maxtime);
 
+  const char *headers_file_envvar;
+  headers_file_envvar = getenv(DEBUGINFOD_HEADERS_FILE_ENV_VAR);
+  if (headers_file_envvar != NULL)
+add_headers_from_file(c, headers_file_envvar);
+
   /* Maxsize is valid*/
   if (maxsize > 0)
 {
diff --git a/debuginfod/debuginfod.h.in b/debuginfod/debuginfod.h.in
index 40b1ea00..7d8e4972 100644
--- a/debuginfod/debuginfod.h.in
+++ b/debuginfod/debuginfod.h.in
@@ -38,6 +38,7 @@
 #define DEBUGINFOD_RETRY_LIMIT_ENV_VAR "DEBUGINFOD_RETRY_LIMIT"
 #define DEBUGINFOD_MAXSIZE_ENV_VAR "DEBUGINFOD_MAXSIZE"
 #define DEBUGINFOD_MAXTIME_ENV_VAR "DEBUGINFOD_MAXTIME"
+#define DEBUGINFOD_HEADERS_FILE_ENV_VAR "DEBUGINFOD_HEADERS_FILE"
 
 /* The libdebuginfod soname.  */
 #define DEBUGINFOD_SONAME "@LIBDEBUGINFOD_SONAME@"
diff --git a/doc/ChangeLog b/doc/ChangeLog
index b2bb4890..073023b4 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2022-10-18  Daniel Thornburgh  
+
+   * debuginfod_find_debuginfo.3: Document DEBUGINFOD_HEADERS_FILE.
+
 2022-09-02  Frank Ch. Eigler  
 
* debuginfod_find_debuginfo.3: Tweaked debuginfod_get_headers docs.
diff --git a/doc/debuginfod-client-config.7 b/doc/debuginfod-client-config.7
index fecc6038..53d82806 100644
--- a/doc/debuginfod-client-config.7
+++ b/doc/debuginfod-client-config.7
@@ -75,6 +75,13 @@ only small files are downloaded. A value of 0 causes no 
consideration
 for size, and the client may attempt to download a file of any size.
 The default is 0 (infinite size).
 
+.TP
+.B $DEBUGINFOD_HEADERS_FILE
+This environment variable points to a file that supplies headers to
+outbound HTTP requests, one per line. The header lines shouldn't end with
+CRLF, unless that's the system newline convention. Whitespace-only lines
+are skipped.
+
 .SH CACHE
 
 Before each query, the debuginfod client library checks for a need to
diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3
index aebbec3f..3dd83240 100644
--- a/doc/debuginf