Skip to content

Commit 6563826

Browse files
committed
Fix package metadata fields not updated after signing
When creating a signed copy of a package, all RPM metadata fields are now refreshed from the signed file using createrepo_c, ensuring size_package, rpm_header_start, rpm_header_end, time_file, and other fields stay consistent. Fixes #4383 Assisted By: Claude Opus 4.6
1 parent 0136f85 commit 6563826

File tree

3 files changed

+8
-0
lines changed

3 files changed

+8
-0
lines changed

CHANGES/4383.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Updated package signing to refresh all RPM metadata fields from the signed package file, ensuring size, header offsets, and other fields stay consistent after signing.

pulp_rpm/app/tasks/signing.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from pathlib import Path
66
from tempfile import NamedTemporaryFile
77

8+
import createrepo_c as cr
89
from django.conf import settings
910

1011
from pulpcore.plugin.models import (
@@ -132,10 +133,15 @@ def _sign_package(package, signing_service, signing_fingerprint):
132133
str(signed_package_path),
133134
(package.signing_keys or []) + [signing_fingerprint],
134135
)
136+
# Read all updated metadata from the signed RPM
137+
cr_pkg = cr.package_from_rpm(str(signed_package_path))
138+
new_pkg_dict = Package.createrepo_to_dict(cr_pkg)
135139
artifact = _save_artifact(signed_package_path)
136140
signed_package = package
137141
signed_package.pk = None
138142
signed_package.pulp_id = None
143+
for field, value in new_pkg_dict.items():
144+
setattr(signed_package, field, value)
139145
signed_package.pkgId = artifact.sha256
140146
signed_package.checksum_type = CHECKSUM_TYPES.SHA256
141147
signed_package.signing_keys = signing_keys

pulp_rpm/tests/functional/api/test_package_signing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ def test_signed_repo_modify(
300300
).results[0]
301301
assert signed_package.pulp_href != created_package.pulp_href
302302
assert signed_package.signing_keys == [fingerprint]
303+
assert signed_package.size_package != created_package.size_package
303304
assert sorted(task_result.created_resources) == sorted(
304305
[repository.latest_version_href, signed_package.pulp_href, signed_package.artifact]
305306
)

0 commit comments

Comments
 (0)