[PATCH] Complete PR25797 by modifying * debuginfod-client.c : check scheme instead of effective url so that user may abbreviate DEBUGINFOD_URL * tests/run-debuginfod-find.sh : 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 strucuture, DEBUGINFOD_ URL of scheme "FILE" must be input as URI.
Alice Zhang
alizhang@redhat.com
Mon Jun 29 13:47:00 GMT 2020
Signed-off-by: Alice Zhang <alizhang@redhat.com>
---
debuginfod/debuginfod-client.c | 17 ++++++++---------
tests/run-debuginfod-find.sh | 6 ++++++
2 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c
index c2aa4e10..3764b5f2 100644
--- a/debuginfod/debuginfod-client.c
+++ b/debuginfod/debuginfod-client.c
@@ -722,7 +722,6 @@ debuginfod_query_server (debuginfod_client *c,
else
snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s", server_url,
slashbuildid, build_id_bytes, type);
-
curl_easy_setopt(data[i].handle, CURLOPT_URL, data[i].url);
curl_easy_setopt(data[i].handle,
CURLOPT_WRITEFUNCTION,
@@ -867,29 +866,29 @@ debuginfod_query_server (debuginfod_client *c,
if (msg->easy_handle != NULL)
{
- char *effective_url = NULL;
long resp_code = 500;
+ char *scheme = NULL;
CURLcode ok1 = curl_easy_getinfo (target_handle,
- CURLINFO_EFFECTIVE_URL,
- &effective_url);
- CURLcode ok2 = curl_easy_getinfo (target_handle,
CURLINFO_RESPONSE_CODE,
&resp_code);
- if(ok1 == CURLE_OK && ok2 == CURLE_OK && effective_url)
+ CURLcode ok2 = curl_easy_getinfo (target_handle,
+ CURLINFO_SCHEME,
+ &scheme);
+ if(ok1 == CURLE_OK && ok2 == CURLE_OK && scheme)
{
- if (strncmp (effective_url, "http", 4) == 0)
+ if (strncmp (scheme, "HTTP", 4) == 0)
if (resp_code == 200)
{
verified_handle = msg->easy_handle;
break;
}
- if (strncmp (effective_url, "file", 4) == 0)
+ if (strncmp (scheme, "FILE", 4) == 0)
if (resp_code == 0)
{
verified_handle = msg->easy_handle;
break;
}
- }
+ }
}
}
}
diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
index f0c77c51..730bb0e1 100755
--- a/tests/run-debuginfod-find.sh
+++ b/tests/run-debuginfod-find.sh
@@ -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
--
2.25.4
More information about the Elfutils-devel
mailing list