From 2e8b5e2d4f30854cce93d149fc7d24b9d9cfd02c Mon Sep 17 00:00:00 2001 From: Pavel Moravec Date: Fri, 19 Nov 2021 16:16:07 +0100 Subject: [PATCH 1/3] [policies] strip path from SFTP upload filename When case_id is not supplied, we ask SFTP server to store the uploaded file under name /var/tmp/, which is confusing. Let remove the path from it also in case_id not supplied. Related to: #2764 Signed-off-by: Pavel Moravec --- sos/policies/distros/redhat.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sos/policies/distros/redhat.py b/sos/policies/distros/redhat.py index 3476e21fb..8817fc785 100644 --- a/sos/policies/distros/redhat.py +++ b/sos/policies/distros/redhat.py @@ -269,10 +269,10 @@ def _get_sftp_upload_name(self): """The RH SFTP server will only automatically connect file uploads to cases if the filename _starts_ with the case number """ + fname = self.upload_archive_name.split('/')[-1] if self.case_id: - return "%s_%s" % (self.case_id, - self.upload_archive_name.split('/')[-1]) - return self.upload_archive_name + return "%s_%s" % (self.case_id, fname) + return fname def upload_sftp(self): """Override the base upload_sftp to allow for setting an on-demand From 61023b29a656dd7afaa4a0643368b0a53f1a3779 Mon Sep 17 00:00:00 2001 From: Pavel Moravec Date: Fri, 19 Nov 2021 17:31:31 +0100 Subject: [PATCH 2/3] [redhat] update SFTP API version to v2 Change API version from v1 to v2, which includes: - change of URL - different URI - POST method for token generation instead of GET Resolves: #2764 Signed-off-by: Pavel Moravec --- sos/policies/distros/redhat.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sos/policies/distros/redhat.py b/sos/policies/distros/redhat.py index 8817fc785..e4e2b8835 100644 --- a/sos/policies/distros/redhat.py +++ b/sos/policies/distros/redhat.py @@ -175,7 +175,7 @@ def get_tmp_dir(self, opt_tmp_dir): No changes will be made to system configuration. """ -RH_API_HOST = "https://access.redhat.com" +RH_API_HOST = "https://api.access.redhat.com" RH_SFTP_HOST = "sftp://sftp.access.redhat.com" @@ -287,12 +287,12 @@ def upload_sftp(self): " for obtaining SFTP auth token.") _token = None _user = None + url = RH_API_HOST + '/support/v2/sftp/token' # we have a username and password, but we need to reset the password # to be the token returned from the auth endpoint if self.get_upload_user() and self.get_upload_password(): - url = RH_API_HOST + '/hydra/rest/v1/sftp/token' auth = self.get_upload_https_auth() - ret = requests.get(url, auth=auth, timeout=10) + ret = requests.post(url, auth=auth, timeout=10) if ret.status_code == 200: # credentials are valid _user = self.get_upload_user() @@ -302,8 +302,8 @@ def upload_sftp(self): "credentials. Will try anonymous.") # we either do not have a username or password/token, or both if not _token: - aurl = RH_API_HOST + '/hydra/rest/v1/sftp/token?isAnonymous=true' - anon = requests.get(aurl, timeout=10) + adata = {"isAnonymous": True} + anon = requests.post(url, data=json.dumps(adata), timeout=10) if anon.status_code == 200: resp = json.loads(anon.text) _user = resp['username'] From 267da2156ec61f526dd28e760ff6528408a76c3f Mon Sep 17 00:00:00 2001 From: Pavel Moravec Date: Mon, 22 Nov 2021 15:22:32 +0100 Subject: [PATCH 3/3] [policies] Deal 200 return code as success Return code 200 of POST method request must be dealt as success. Newly required due to the SFTP API change using POST. Related to: #2764 Signed-off-by: Pavel Moravec --- sos/policies/distros/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sos/policies/distros/__init__.py b/sos/policies/distros/__init__.py index 0906fa779..6f257fdce 100644 --- a/sos/policies/distros/__init__.py +++ b/sos/policies/distros/__init__.py @@ -551,7 +551,7 @@ def upload_https(self): r = self._upload_https_put(arc, verify) else: r = self._upload_https_post(arc, verify) - if r.status_code != 201: + if r.status_code != 200 and r.status_code != 201: if r.status_code == 401: raise Exception( "Authentication failed: invalid user credentials" From 8da1b14246226792c160dd04e5c7c75dd4e8d44b Mon Sep 17 00:00:00 2001 From: Pavel Moravec Date: Mon, 22 Nov 2021 10:44:09 +0100 Subject: [PATCH] [collect] fix moved get_upload_url under Policy class SoSCollector does not further declare get_upload_url method as that was moved under Policy class(es). Resolves: #2766 Signed-off-by: Pavel Moravec --- sos/collector/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sos/collector/__init__.py b/sos/collector/__init__.py index 50183e873..42a7731d6 100644 --- a/sos/collector/__init__.py +++ b/sos/collector/__init__.py @@ -1219,7 +1219,7 @@ this utility or remote systems that it c msg = 'No sosreports were collected, nothing to archive...' self.exit(msg, 1) - if self.opts.upload and self.get_upload_url(): + if self.opts.upload and self.policy.get_upload_url(): try: self.policy.upload_archive(arc_name) self.ui_log.info("Uploaded archive successfully")