@@ -52,6 +52,7 @@ using namespace std;
5252
5353static const std::string empty_payload_hash = " e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ;
5454
55+ extern int check_for_cos_format (void ); // implented in s3fs.cpp
5556// -------------------------------------------------------------------
5657// Utilities
5758// -------------------------------------------------------------------
@@ -297,7 +298,7 @@ string S3fsCurl::COSAccessKeyId;
297298string S3fsCurl::COSSecretAccessKey;
298299string S3fsCurl::COSAccessToken;
299300time_t S3fsCurl::COSAccessTokenExpire= 0 ;
300- string S3fsCurl::RAM_role ;
301+ string S3fsCurl::CAM_role ;
301302long S3fsCurl::ssl_verify_hostname = 1 ; // default(original code...)
302303curltime_t S3fsCurl::curl_times;
303304curlprogress_t S3fsCurl::curl_progress;
@@ -1039,6 +1040,30 @@ bool S3fsCurl::SetVerbose(bool flag)
10391040 return old;
10401041}
10411042
1043+ bool S3fsCurl::checkSTSCredentialUpdate (void ) {
1044+ if (S3fsCurl::CAM_role.empty ()) {
1045+ return true ;
1046+ }
1047+
1048+ if (time (NULL ) <= S3fsCurl::COSAccessTokenExpire) {
1049+ return true ;
1050+ }
1051+
1052+ // if return value is not equal 1, means wrong format key
1053+ if (check_for_cos_format () != 1 ) {
1054+ return false ;
1055+ }
1056+
1057+ return true ;
1058+ }
1059+
1060+
1061+ bool S3fsCurl::SetToken (const string& token, const string& token_expire) {
1062+ COSAccessToken = token;
1063+ COSAccessTokenExpire = cvtCAMExpireStringToTime (token_expire.c_str ());
1064+ return true ;
1065+ }
1066+
10421067bool S3fsCurl::SetAccessKey (const char * AccessKeyId, const char * SecretAccessKey)
10431068{
10441069 if (!AccessKeyId || ' \0 ' == AccessKeyId[0 ] || !SecretAccessKey || ' \0 ' == SecretAccessKey[0 ]){
@@ -1059,10 +1084,10 @@ long S3fsCurl::SetSslVerifyHostname(long value)
10591084 return old;
10601085}
10611086
1062- string S3fsCurl::SetRAMRole (const char * role)
1087+ string S3fsCurl::SetCAMRole (const char * role)
10631088{
1064- string old = S3fsCurl::RAM_role ;
1065- S3fsCurl::RAM_role = role ? role : " " ;
1089+ string old = S3fsCurl::CAM_role ;
1090+ S3fsCurl::CAM_role = role ? role : " " ;
10661091 return old;
10671092}
10681093
@@ -1377,14 +1402,14 @@ bool S3fsCurl::SetRAMCredentials(const char* response)
13771402 S3fsCurl::COSAccessKeyId = keyval[string (RAMCRED_ACCESSKEYID)];
13781403 S3fsCurl::COSSecretAccessKey = keyval[string (RAMCRED_SECRETACCESSKEY)];
13791404 S3fsCurl::COSAccessToken = keyval[string (RAMCRED_ACCESSTOKEN)];
1380- S3fsCurl::COSAccessTokenExpire = cvtRAMExpireStringToTime (keyval[string (RAMCRED_EXPIRATION)].c_str ());
1405+ S3fsCurl::COSAccessTokenExpire = cvtCAMExpireStringToTime (keyval[string (RAMCRED_EXPIRATION)].c_str ());
13811406
13821407 return true ;
13831408}
13841409
13851410bool S3fsCurl::CheckRAMCredentialUpdate (void )
13861411{
1387- if (0 == S3fsCurl::RAM_role .size ()){
1412+ if (0 == S3fsCurl::CAM_role .size ()){
13881413 return true ;
13891414 }
13901415 if (time (NULL ) + RAM_EXPIRE_MERGIN <= S3fsCurl::COSAccessTokenExpire){
@@ -1958,6 +1983,15 @@ int S3fsCurl::RequestPerform(void)
19581983string S3fsCurl::CalcSignature (string method, string strMD5, string content_type, string date, string resource)
19591984{
19601985 string Signature;
1986+
1987+ if (0 < S3fsCurl::CAM_role.size ()) {
1988+ if (!S3fsCurl::checkSTSCredentialUpdate ()) {
1989+ S3FS_PRN_ERR (" Something error occurred in checking CAM STS Credential" );
1990+ return Signature;
1991+ }
1992+ requestHeaders = curl_slist_sort_insert (requestHeaders, " x-cos-security-token" , S3fsCurl::COSAccessToken.c_str ());
1993+ }
1994+
19611995 const void * key = S3fsCurl::COSSecretAccessKey.data ();
19621996 int key_len = S3fsCurl::COSSecretAccessKey.size ();
19631997
@@ -2099,9 +2133,9 @@ int S3fsCurl::DeleteRequest(const char* tpath)
20992133//
21002134int S3fsCurl::GetRAMCredentials (void )
21012135{
2102- S3FS_PRN_INFO3 (" [RAM role=%s]" , S3fsCurl::RAM_role .c_str ());
2136+ S3FS_PRN_INFO3 (" [RAM role=%s]" , S3fsCurl::CAM_role .c_str ());
21032137
2104- if (0 == S3fsCurl::RAM_role .size ()){
2138+ if (0 == S3fsCurl::CAM_role .size ()){
21052139 S3FS_PRN_ERR (" RAM role name is empty." );
21062140 return -EIO;
21072141 }
@@ -2113,7 +2147,7 @@ int S3fsCurl::GetRAMCredentials(void)
21132147 }
21142148
21152149 // url
2116- url = string (RAM_CRED_URL) + S3fsCurl::RAM_role ;
2150+ url = string (RAM_CRED_URL) + S3fsCurl::CAM_role ;
21172151 requestHeaders = NULL ;
21182152 responseHeaders.clear ();
21192153 bodydata = new BodyData ();
0 commit comments