Blame SOURCES/sos-bz1882368-upload-functionality-issues.patch

900d18
From a3b493a8accc338158faa53b9e221067323b75f5 Mon Sep 17 00:00:00 2001
900d18
From: Jake Hunsaker <jhunsake@redhat.com>
900d18
Date: Thu, 24 Sep 2020 10:06:17 -0400
900d18
Subject: [PATCH] [redhat] Ease upload url determination logic
900d18
900d18
The logic for determining if an archive should be uploaded to the
900d18
Customer Portal was too strict, ease it to now properly only block on a
900d18
missing case number since username and passwords may now be provided via
900d18
env vars.
900d18
900d18
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
900d18
---
900d18
 sos/policies/__init__.py | 6 ++++--
900d18
 sos/policies/redhat.py   | 8 ++++++--
900d18
 2 files changed, 10 insertions(+), 4 deletions(-)
900d18
900d18
diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py
900d18
index 9a1aac07..215739bd 100644
900d18
--- a/sos/policies/__init__.py
900d18
+++ b/sos/policies/__init__.py
900d18
@@ -1427,8 +1427,8 @@ class LinuxPolicy(Policy):
900d18
         """Should be overridden by policies to determine if a password needs to
900d18
         be provided for upload or not
900d18
         """
900d18
-        if ((not self.upload_password and not self._upload_password) and
900d18
-                self.upload_user):
900d18
+        if not self.get_upload_password() and (self.get_upload_user() !=
900d18
+                                               self._upload_user):
900d18
             msg = (
900d18
                 "Please provide the upload password for %s: "
900d18
                 % self.upload_user
900d18
@@ -1472,7 +1473,8 @@ class LinuxPolicy(Policy):
900d18
             Print a more human-friendly string than vendor URLs
900d18
         """
900d18
         self.upload_archive = archive
900d18
-        self.upload_url = self.get_upload_url()
900d18
+        if not self.upload_url:
900d18
+            self.upload_url = self.get_upload_url()
900d18
         if not self.upload_url:
900d18
             raise Exception("No upload destination provided by policy or by "
900d18
                             "--upload-url")
900d18
diff --git a/sos/policies/redhat.py b/sos/policies/redhat.py
900d18
index 34b421f3..f2f847a5 100644
900d18
--- a/sos/policies/redhat.py
900d18
+++ b/sos/policies/redhat.py
900d18
@@ -320,12 +320,16 @@ support representative.
900d18
                 "Enter your Red Hat Customer Portal username (empty to use "
900d18
                 "public dropbox): ")
900d18
             )
900d18
+            if not self.upload_user:
900d18
+                self.upload_url = RH_FTP_HOST
900d18
+                self.upload_user = self._upload_user
900d18
 
900d18
     def get_upload_url(self):
900d18
+        if self.upload_url:
900d18
+            return self.upload_url
900d18
         if self.commons['cmdlineopts'].upload_url:
900d18
             return self.commons['cmdlineopts'].upload_url
900d18
-        if (not self.case_id or not self.upload_user or not
900d18
-                self.upload_password):
900d18
+        if not self.case_id:
900d18
             # Cannot use the RHCP. Use anonymous dropbox
900d18
             self.upload_user = self._upload_user
900d18
             self.upload_directory = self._upload_directory
900d18
-- 
900d18
2.26.2
900d18
900d18
From 11cc6f478a9b41ce81b5b74faab5ca42930262ee Mon Sep 17 00:00:00 2001
900d18
From: Jake Hunsaker <jhunsake@redhat.com>
900d18
Date: Thu, 24 Sep 2020 10:17:25 -0400
900d18
Subject: [PATCH] [policy] Use user-provided FTP directory if specified
900d18
900d18
Fixes an issue whereby we ignore a user-provided FTP directory.
900d18
900d18
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
900d18
---
900d18
 sos/policies/__init__.py | 2 +-
900d18
 sos/policies/redhat.py   | 3 ++-
900d18
 2 files changed, 3 insertions(+), 2 deletions(-)
900d18
900d18
diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py
900d18
index 215739bd..32f271d9 100644
900d18
--- a/sos/policies/__init__.py
900d18
+++ b/sos/policies/__init__.py
900d18
@@ -1677,7 +1677,7 @@ class LinuxPolicy(Policy):
900d18
             password = self.get_upload_password()
900d18
 
900d18
         if not directory:
900d18
-            directory = self._upload_directory
900d18
+            directory = self.upload_directory or self._upload_directory
900d18
 
900d18
         try:
900d18
             session = ftplib.FTP(url, user, password)
900d18
diff --git a/sos/policies/redhat.py b/sos/policies/redhat.py
900d18
index f2f847a5..d079406f 100644
900d18
--- a/sos/policies/redhat.py
900d18
+++ b/sos/policies/redhat.py
900d18
@@ -332,7 +332,8 @@ support representative.
900d18
         if not self.case_id:
900d18
             # Cannot use the RHCP. Use anonymous dropbox
900d18
             self.upload_user = self._upload_user
900d18
-            self.upload_directory = self._upload_directory
900d18
+            if self.upload_directory is None:
900d18
+                self.upload_directory = self._upload_directory
900d18
             self.upload_password = None
900d18
             return RH_FTP_HOST
900d18
         else:
900d18
-- 
900d18
2.26.2
900d18
900d18
From caa9a2f2a511689080d019ffab61a4de5787d8be Mon Sep 17 00:00:00 2001
900d18
From: Jake Hunsaker <jhunsake@redhat.com>
900d18
Date: Thu, 24 Sep 2020 10:25:00 -0400
900d18
Subject: [PATCH] [policy] Handle additional failure conditions for FTP uploads
900d18
900d18
Adds a timeout and a timeout handler for FTP connections, rather than
900d18
letting the connection attempt continue indefinitely.
900d18
900d18
Second, adds exception handling for an edge case where the connection to
900d18
the FTP server fails, but does not generate an exception from the ftplib
900d18
module.
900d18
900d18
Additionally, correct the type-ing of the error numbers being checked so
900d18
that we actually match them.
900d18
900d18
Resolves: #2245
900d18
900d18
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
900d18
---
900d18
 sos/policies/__init__.py | 11 ++++++++---
900d18
 1 file changed, 8 insertions(+), 3 deletions(-)
900d18
900d18
diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py
900d18
index 32f271d9..826d022e 100644
900d18
--- a/sos/policies/__init__.py
900d18
+++ b/sos/policies/__init__.py
900d18
@@ -1680,15 +1680,20 @@ class LinuxPolicy(Policy):
900d18
             directory = self.upload_directory or self._upload_directory
900d18
 
900d18
         try:
900d18
-            session = ftplib.FTP(url, user, password)
900d18
+            session = ftplib.FTP(url, user, password, timeout=15)
900d18
+            if not session:
900d18
+                raise Exception("connection failed, did you set a user and "
900d18
+                                "password?")
900d18
             session.cwd(directory)
900d18
+        except socket.timeout:
900d18
+            raise Exception("timeout hit while connecting to %s" % url)
900d18
         except socket.gaierror:
900d18
             raise Exception("unable to connect to %s" % url)
900d18
         except ftplib.error_perm as err:
900d18
             errno = str(err).split()[0]
900d18
-            if errno == 503:
900d18
+            if errno == '503':
900d18
                 raise Exception("could not login as '%s'" % user)
900d18
-            if errno == 550:
900d18
+            if errno == '550':
900d18
                 raise Exception("could not set upload directory to %s"
900d18
                                 % directory)
900d18
 
900d18
-- 
900d18
2.26.2
900d18
900d18
From 21720a0f8c9cf6739e26470b2280e005f0f3e3f1 Mon Sep 17 00:00:00 2001
900d18
From: Pavel Moravec <pmoravec@redhat.com>
900d18
Date: Thu, 15 Oct 2020 13:45:37 +0200
900d18
Subject: [PATCH] [policy] Use FTP server when user isnt set in batch mode
900d18
900d18
Caling "sos report --upload --case-id=123 --batch" should fallback
900d18
to uploading to FTP server as the upload user is unknown and can't
900d18
be prompted in batch mode.
900d18
900d18
Resolves: #2276
900d18
900d18
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
900d18
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
900d18
---
900d18
 sos/policies/redhat.py | 12 ++++++++++--
900d18
 1 file changed, 10 insertions(+), 2 deletions(-)
900d18
900d18
diff --git a/sos/policies/redhat.py b/sos/policies/redhat.py
900d18
index d079406f..3a65b9fa 100644
900d18
--- a/sos/policies/redhat.py
900d18
+++ b/sos/policies/redhat.py
900d18
@@ -324,13 +324,21 @@ support representative.
900d18
                 self.upload_url = RH_FTP_HOST
900d18
                 self.upload_user = self._upload_user
900d18
 
900d18
+    def _upload_user_set(self):
900d18
+        user = self.get_upload_user()
900d18
+        return user and (user != 'anonymous')
900d18
+
900d18
     def get_upload_url(self):
900d18
         if self.upload_url:
900d18
             return self.upload_url
900d18
         if self.commons['cmdlineopts'].upload_url:
900d18
             return self.commons['cmdlineopts'].upload_url
900d18
-        if not self.case_id:
900d18
-            # Cannot use the RHCP. Use anonymous dropbox
900d18
+        # anonymous FTP server should be used as fallback when either:
900d18
+        # - case id is not set, or
900d18
+        # - upload user isn't set AND batch mode prevents to prompt for it
900d18
+        if (not self.case_id) or \
900d18
+           ((not self._upload_user_set()) and
900d18
+               self.commons['cmdlineopts'].batch):
900d18
             self.upload_user = self._upload_user
900d18
             if self.upload_directory is None:
900d18
                 self.upload_directory = self._upload_directory
900d18
-- 
900d18
2.26.2
900d18