From 4e26728cbf881594ae134682f7d4280d7478c66f Mon Sep 17 00:00:00 2001 From: rallister Date: Fri, 31 Jan 2020 07:48:37 +0000 Subject: [PATCH] break recursion when calling GetIAMCredentials (#1233) break recursion when calling GetIAMCredentials --- src/curl.cpp | 11 +++++++---- src/curl.h | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/curl.cpp b/src/curl.cpp index 7ef1dce..3522fa1 100644 --- a/src/curl.cpp +++ b/src/curl.cpp @@ -2372,7 +2372,7 @@ bool S3fsCurl::RemakeHandle() // // returns curl return code // -int S3fsCurl::RequestPerform() +int S3fsCurl::RequestPerform(bool dontAddAuthHeaders /*=false*/) { if(IS_S3FS_LOG_DBG()){ char* ptr_url = NULL; @@ -2384,7 +2384,10 @@ int S3fsCurl::RequestPerform() long responseCode; int result = S3FSCURL_PERFORM_RESULT_NOTSET; - insertAuthHeaders(); + if(!dontAddAuthHeaders) { + insertAuthHeaders(); + } + curl_easy_setopt(hCurl, CURLOPT_HTTPHEADER, requestHeaders); // 1 attempt + retries... @@ -2907,7 +2910,7 @@ int S3fsCurl::GetIAMCredentials() curl_easy_setopt(hCurl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); S3fsCurl::AddUserAgent(hCurl); // put User-Agent - int result = RequestPerform(); + int result = RequestPerform(true); // analyzing response if(0 == result && !S3fsCurl::SetIAMCredentials(bodydata.str())){ @@ -2944,7 +2947,7 @@ bool S3fsCurl::LoadIAMRoleFromMetaData() curl_easy_setopt(hCurl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); S3fsCurl::AddUserAgent(hCurl); // put User-Agent - int result = RequestPerform(); + int result = RequestPerform(true); // analyzing response if(0 == result && !S3fsCurl::SetIAMRoleFromMetaData(bodydata.str())){ diff --git a/src/curl.h b/src/curl.h index fbb8b85..02c1019 100644 --- a/src/curl.h +++ b/src/curl.h @@ -489,7 +489,7 @@ class S3fsCurl bool LoadIAMRoleFromMetaData(void); bool AddSseRequestHead(sse_type_t ssetype, std::string& ssevalue, bool is_only_c, bool is_copy); bool GetResponseCode(long& responseCode, bool from_curl_handle = true); - int RequestPerform(void); + int RequestPerform(bool dontAddAuthHeaders=false); int DeleteRequest(const char* tpath); bool PreHeadRequest(const char* tpath, const char* bpath = NULL, const char* savedpath = NULL, int ssekey_pos = -1); bool PreHeadRequest(std::string& tpath, std::string& bpath, std::string& savedpath, int ssekey_pos = -1) {