Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport: Check availability of dnf-automatic config file #2178

Merged
merged 2 commits into from
Dec 13, 2024

Conversation

m-blaha
Copy link
Member

@m-blaha m-blaha commented Dec 13, 2024

evan-goode and others added 2 commits December 13, 2024 09:52
Upstream commit: aab7def

Some, but not all, types of connection error are caught by smtplib and
reraised as an smtplib.SMTPException. Notably, TimeoutError,
socket.gaierror (name resolution failure), and ConnectionRefusedError
and are not caught.

The more generic OSError should be caught here instead.

Resolves #1905
Resolves: https://issues.redhat.com/browse/RHEL-46030
If a configuration file is explicitly specified on the command line,
ensure that it exists and is readable. If the file is not found, notify
the user immediately and terminate the process.

This resolves issues where users may run dnf-automatic with unrecognized
positional arguments, such as `dnf-automatic install`.

The most natural approach to handle a non-existing config file would be
by catching the exception thrown by the `read()` method of the
`libdnf.conf.ConfigParser` class. Unfortunately, the Python bindings
override the `read()` method at the SWIG level, causing it to suppress any
potentially raised IOError.
For details see this section of the commit
rpm-software-management/libdnf@8f1fedf

def ConfigParser__newRead(self, filenames):
    parsedFNames = []
    try:
        if isinstance(filenames, str) or isinstance(filenames, unicode):
            filenames = [filenames]
    except NameError:
        pass
    for fname in filenames:
        try:
            self.readFileName(fname)
            parsedFNames.append(fname)
        except IOError:
            pass
        except Exception as e:
            raise RuntimeError("Parsing file '%s' failed: %s" % (fname, str(e)))
    return parsedFNames
ConfigParser.read = ConfigParser__newRead

Resolves: https://issues.redhat.com/browse/RHEL-46030
@kontura kontura self-assigned this Dec 13, 2024
@kontura kontura merged commit 201675a into rhel-8.10 Dec 13, 2024
2 of 3 checks passed
@kontura kontura deleted the automatic-config-file-rhel8 branch December 13, 2024 12:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants