Merge branch 'c10s' into a10s

This commit is contained in:
eabdullin 2025-01-08 12:44:01 +03:00
commit 942ab5ac1e
3 changed files with 141 additions and 2 deletions

View File

@ -0,0 +1,131 @@
From 36389b63b12c2f6996772bd2bc7e98b6f3bacdf0 Mon Sep 17 00:00:00 2001
From: Marek Blaha <mblaha@redhat.com>
Date: Thu, 17 Oct 2024 13:30:21 +0200
Subject: [PATCH 1/2] automatic: Check availability of config file
Upstream commit: 13ecc3921fb1566c2af7b80d5cb515d8fc4e5ec9
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
https://github.com/rpm-software-management/libdnf/commit/8f1fedf8551b72d6bc24018f5980714b3a103aeb
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-68979
---
dnf/automatic/main.py | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/dnf/automatic/main.py b/dnf/automatic/main.py
index 243e3015..21aa82b7 100644
--- a/dnf/automatic/main.py
+++ b/dnf/automatic/main.py
@@ -74,7 +74,7 @@ def build_emitters(conf):
def parse_arguments(args):
parser = argparse.ArgumentParser()
- parser.add_argument('conf_path', nargs='?', default=dnf.const.CONF_AUTOMATIC_FILENAME)
+ parser.add_argument('conf_path', nargs='?')
parser.add_argument('--timer', action='store_true')
parser.add_argument('--installupdates', dest='installupdates', action='store_true')
parser.add_argument('--downloadupdates', dest='downloadupdates', action='store_true')
@@ -89,7 +89,17 @@ def parse_arguments(args):
class AutomaticConfig(object):
def __init__(self, filename=None, downloadupdates=None,
installupdates=None):
- if not filename:
+ if filename:
+ # Specific config file was explicitely requested. Check that it exists
+ # and is readable.
+ if os.access(filename, os.F_OK):
+ if not os.access(filename, os.R_OK):
+ raise dnf.exceptions.Error(
+ "Configuration file \"{}\" is not readable.".format(filename))
+ else:
+ raise dnf.exceptions.Error(
+ "Configuration file \"{}\" not found.".format(filename))
+ else:
filename = dnf.const.CONF_AUTOMATIC_FILENAME
self.commands = CommandsConfig()
self.email = EmailConfig()
@@ -302,11 +312,12 @@ def wait_for_network(repos, timeout):
def main(args):
(opts, parser) = parse_arguments(args)
+ conf = None
+ emitters = None
try:
conf = AutomaticConfig(opts.conf_path, opts.downloadupdates,
opts.installupdates)
- emitters = None
with dnf.Base() as base:
cli = dnf.cli.Cli(base)
cli._read_conf_file()
@@ -371,7 +382,7 @@ def main(args):
raise dnf.exceptions.Error('reboot command returned nonzero exit code: %d', exit_code)
except dnf.exceptions.Error as exc:
logger.error(_('Error: %s'), ucd(exc))
- if conf.emitters.send_error_messages and emitters != None:
+ if conf is not None and conf.emitters.send_error_messages and emitters is not None:
emitters.notify_error(_('Error: %s') % str(exc))
emitters.commit()
return 1
--
2.47.1
From bfc4d7ae2d9a567aaf656388c8b914b7a03db39d Mon Sep 17 00:00:00 2001
From: Marek Blaha <mblaha@redhat.com>
Date: Thu, 12 Dec 2024 08:09:48 +0100
Subject: [PATCH 2/2] automatic: Fix incorrect Error class instantiation
dnf.exceptions.Error class constructor accepts only one argument - error
message.
---
dnf/automatic/main.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dnf/automatic/main.py b/dnf/automatic/main.py
index 21aa82b7..1a1e1cf0 100644
--- a/dnf/automatic/main.py
+++ b/dnf/automatic/main.py
@@ -379,7 +379,7 @@ def main(args):
(conf.commands.reboot == 'when-needed' and base.reboot_needed())):
exit_code = os.waitstatus_to_exitcode(os.system(conf.commands.reboot_command))
if exit_code != 0:
- raise dnf.exceptions.Error('reboot command returned nonzero exit code: %d', exit_code)
+ raise dnf.exceptions.Error('reboot command returned nonzero exit code: %d' % exit_code)
except dnf.exceptions.Error as exc:
logger.error(_('Error: %s'), ucd(exc))
if conf is not None and conf.emitters.send_error_messages and emitters is not None:
--
2.47.1

View File

@ -68,7 +68,7 @@ It supports RPMs, modules and comps groups & environments.
Name: dnf
Version: 4.20.0
Release: 9%{?dist}.alma.1
Release: 10%{?dist}.alma.1
Summary: %{pkg_summary}
# For a breakdown of the licensing, see PACKAGE-LICENSING
License: GPL-2.0-or-later AND GPL-1.0-only
@ -84,6 +84,7 @@ Patch7: 0007-Update-ostree-bootc-host-system-check.patch
Patch8: 0008-Update-bootc-hosts-message-to-point-to-bootc-help.patch
Patch9: 0009-Allow-installroot-on-read-only-bootc-system.patch
Patch10: 0010-Allow-downloadonly-on-read-only-bootc-system.patch
Patch11: 0011-Automatic-check-availability-of-config-file.patch
# AlmaLinux patches
@ -431,10 +432,13 @@ popd
%{python3_sitelib}/%{name}/automatic/
%changelog
* Mon Dec 09 2024 Eduard Abdullin <eabdullin@almalinux.org> - 4.20.0-9.alma.1
* Wed Jan 08 2025 Eduard Abdullin <eabdullin@almalinux.org> - 4.20.0-10.alma.1
- Add x86_64_v2 to _BASEARCH_MAP
- Add link to AlmaLinux bugtracker
* Fri Dec 13 2024 Marek Blaha <mblaha@redhat.com> - 4.20.0-10
- automatic: Check availability of config file
* Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 4.20.0-9
- Bump release for October 2024 mass rebuild:
Resolves: RHEL-64018

View File

@ -8,6 +8,10 @@ discover:
how: fmf
filter: 'tag: CI-Tier-1'
url: https://pkgs.devel.redhat.com/git/tests/libdnf
- name: libmodulemd
how: fmf
filter: 'tag: CI-Tier-1'
url: https://pkgs.devel.redhat.com/git/tests/libmodulemd
- name: yum
how: fmf
filter: 'tag: CI-Tier-1'