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] automatic: Check availability of config file #2148

Merged
merged 1 commit into from
Oct 21, 2024

Conversation

m-blaha
Copy link
Member

@m-blaha m-blaha commented Oct 21, 2024

Upstream commit: 13ecc39
RHEL issue: https://issues.redhat.com/browse/RHEL-49743

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

Upstream commit: 13ecc39
RHEL issue: https://issues.redhat.com/browse/RHEL-49743

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
@ppisar ppisar self-assigned this Oct 21, 2024
Copy link
Contributor

@ppisar ppisar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good.

@ppisar ppisar merged commit c39b9f7 into rhel-9.6 Oct 21, 2024
2 of 3 checks passed
@ppisar ppisar deleted the mblaha/rhel-9.6-automatic-no-config branch October 21, 2024 14:20
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.

2 participants