Red Hat Bugzilla – Bug 1462565
RPMs >4GB are not supported with the sign-rpms wire protocol
Last modified: 2017-06-19 02:09:21 EDT
The current wire protocol encodes the payload size as a 32-bit unsigned integer.
This means that if an RPM is larger than 4GB, it cannot be encoded and the signing fails.
Traceback (most recent call last):
File "/usr/share/sigul/utils.py", line 681, in run
File "/usr/share/sigul/bridge.py", line 693, in _real_run
File "/usr/share/sigul/bridge.py", line 713, in __handle_one_rpm
File "/usr/share/sigul/utils.py", line 201, in u32_pack
return struct.pack(_u32_format, v)
error: 'I' format requires 0 <= number <= 4294967295
Fixing this probably requires a change to the wire protocol details for the sign-rpms call.
This was found due to #1456261.
Funny detail: this was already marked as FIXME in the protocol design:
** u32 L payload length
The payload length limit is request-specific.
FIXME: should be u64?
I don't think there's a sane way to fix this without bumping the protocol_version, so I guess we will just raise this to u64 and increase protocol_version to 1.
This does mean we will need to add the code to the bridge to check the servers' protocol_version, which the code currently mentions as not implemented, which so far with a single protocol version wasn't such a big deal.
I think I'm going to combine this with the moving of signature stripping to the server for the koji case (https://bugzilla.redhat.com/show_bug.cgi?id=1367568#c3).