]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
debuginfod: DEBUGINFOD_URLS should accept scheme-free urls
authorAlice Zhang <alizhang@redhat.com>
Fri, 3 Jul 2020 17:37:34 +0000 (13:37 -0400)
committerMark Wielaard <mark@klomp.org>
Sun, 5 Jul 2020 15:00:33 +0000 (17:00 +0200)
Check scheme instead of effective url so that user may abbreviate
DEBUGINFOD_URL. Add one test for scheme free http url.

Notice that libcurl does not provide an almighty scheme free url
support, /path/to/something without FILE:// can not be recognized
in most circumstances, therefore for the neatness of our code
structure, DEBUGINFOD_ URL of scheme "FILE" must be input as URI.

Signed-off-by: Alice Zhang <alizhang@redhat.com>
debuginfod/ChangeLog
debuginfod/debuginfod-client.c
tests/ChangeLog
tests/run-debuginfod-find.sh

index 372173e784fbbe093e13c01792a1825a095672d5..db8a76a76de19adf731fa95478a07c590f20bd27 100644 (file)
@@ -1,3 +1,8 @@
+2020-07-03  Alice Zhang <alizhang@redhat.com>
+
+       * debuginfod-client.c (debuginfod_query_server): Use strncasecmp
+       to compare effective_url. Try CURLINFO_SCHEME as fallback.
+
 2020-06-19  Mark Wielaard  <mark@klomp.org>
 
        * Makefile.am (bin_PROGRAMS): Guard with DEBUGINFOD and
index c2e43f743ab64c0a16fb8cec132a7e51df89db6e..18e7b85f841c562f5db51eebfb85ca39f4dcecaf 100644 (file)
@@ -899,19 +899,44 @@ debuginfod_query_server (debuginfod_client *c,
                                                    &resp_code);
                   if(ok1 == CURLE_OK && ok2 == CURLE_OK && effective_url)
                     {
-                      if (strncmp (effective_url, "http", 4) == 0)
+                      if (strncasecmp (effective_url, "HTTP", 4) == 0)
                         if (resp_code == 200)
                           {
                             verified_handle = msg->easy_handle;
                             break;
                           }
-                      if (strncmp (effective_url, "file", 4) == 0)
+                      if (strncasecmp (effective_url, "FILE", 4) == 0)
                         if (resp_code == 0)
                           {
                             verified_handle = msg->easy_handle;
                             break;
                           }
                     }
+                  /* - libcurl since 7.52.0 version start to support
+                       CURLINFO_SCHEME;
+                     - before 7.61.0, effective_url would give us a
+                       url with upper case SCHEME added in the front;
+                     - effective_url between 7.61 and 7.69 can be lack
+                       of scheme if the original url doesn't include one;
+                     - since version 7.69 effective_url will be provide
+                       a scheme in lower case.  */
+                  #if LIBCURL_VERSION_NUM >= 0x073d00 /* 7.61.0 */
+                  #if LIBCURL_VERSION_NUM <= 0x074500 /* 7.69.0 */
+                  char *scheme = NULL;
+                  CURLcode ok3 = curl_easy_getinfo (target_handle,
+                                                    CURLINFO_SCHEME,
+                                                    &scheme);
+                  if(ok3 == CURLE_OK && scheme)
+                    {
+                      if (strncmp (scheme, "HTTP", 4) == 0)
+                        if (resp_code == 200)
+                          {
+                            verified_handle = msg->easy_handle;
+                            break;
+                          }
+                    }
+                  #endif
+                  #endif
                 }
             }
         }
index b27037eeec3b8b8babafedbee7f5c2dc32c653eb..7cb4123ae3dd977e4d76640cda5ba0e077f4fd48 100644 (file)
@@ -1,3 +1,7 @@
+2020-07-03  Alice Zhang  <alizhang@redhat.com>
+
+       * run-debuginfod-find.sh: Add scheme free url testcase.
+
 2020-06-19  Mark Wielaard  <mark@klomp.org>
 
        * Makefile.am (TESTS): Don't add run-debuginfod-find.sh when
index f0c77c517662c6440268e85d0052d805b9175616..730bb0e10b477e730a46d92096e86670c2ec4e1d 100755 (executable)
@@ -413,6 +413,12 @@ testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && fal
 export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2
 testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
 
+# test again with scheme free url
+export DEBUGINFOD_URLS=127.0.0.1:$PORT1
+rm -rf $DEBUGINFOD_CACHE_PATH
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true
+export DEBUGINFOD_URLS=127.0.0.1:$PORT2
+testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID
 
 # test parallel queries in client
 export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3