RHEL Engineering is moving the tracking of its product development work on RHEL 6 through RHEL 9 to Red Hat Jira (issues.redhat.com). If you're a Red Hat customer, please continue to file support cases via the Red Hat customer portal. If you're not, please head to the "RHEL project" in Red Hat Jira and file new tickets here. Individual Bugzilla bugs in the statuses "NEW", "ASSIGNED", and "POST" are being migrated throughout September 2023. Bugs of Red Hat partners with an assigned Engineering Partner Manager (EPM) are migrated in late September as per pre-agreed dates. Bugs against components "kernel", "kernel-rt", and "kpatch" are only migrated if still in "NEW" or "ASSIGNED". If you cannot log in to RH Jira, please consult article #7032570. That failing, please send an e-mail to the RH Jira admins at rh-issues@redhat.com to troubleshoot your issue as a user management inquiry. The email creates a ServiceNow ticket with Red Hat. Individual Bugzilla bugs that are migrated will be moved to status "CLOSED", resolution "MIGRATED", and set with "MigratedToJIRA" in "Keywords". The link to the successor Jira issue will be found under "Links", have a little "two-footprint" icon next to it, and direct you to the "RHEL project" in Red Hat Jira (issue links are of type "https://issues.redhat.com/browse/RHEL-XXXX", where "X" is a digit). This same link will be available in a blue banner at the top of the page informing you that that bug has been migrated.
Bug 2024589 - client assumes SCA cert 'lastUpdate' date is in it's local timezone, then thinks it re-converts to UTC
Summary: client assumes SCA cert 'lastUpdate' date is in it's local timezone, then thi...
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 8
Classification: Red Hat
Component: subscription-manager
Version: 8.4
Hardware: Unspecified
OS: Unspecified
high
high
Target Milestone: rc
: 8.6
Assignee: Pino Toscano
QA Contact: Red Hat subscription-manager QE Team
URL:
Whiteboard:
Depends On: 2024573
Blocks: 2026316 2026320
TreeView+ depends on / blocked
 
Reported: 2021-11-18 12:08 UTC by Nikos Moumoulidis
Modified: 2022-05-10 16:39 UTC (History)
3 users (show)

Fixed In Version: subscription-manager-1.28.25-1.el8
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
: 2026320 (view as bug list)
Environment:
Last Closed: 2022-05-10 15:22:58 UTC
Type: Bug
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Github candlepin subscription-manager pull 2903 0 None Merged [1.28] 2024589: fix format of 'If-Modified-Since' header 2021-12-06 15:27:09 UTC
Red Hat Issue Tracker RHELPLAN-103153 0 None None None 2021-11-18 12:10:00 UTC
Red Hat Product Errata RHBA-2022:2047 0 None None None 2022-05-10 15:23:17 UTC

Description Nikos Moumoulidis 2021-11-18 12:08:17 UTC
Description of problem:
subscription-manager assumes SCA cert's 'lastUpdate' date is in it's local timezone (wherever the client is), then thinks it is converting it to UTC, sending it back to Candlepin, and Candlepin thinks the client has an outdated version of the SCA cert, sending it back again (instead of sending back HTTP 304).


Version-Release number of selected component (if applicable):
1.28.13-2.el8
1.29.18-1.fc33

How reproducible:
100%
Note: Running this scenario with a client in any timezone other than UTC/GMT will lead to undesirable effects, but the exact effect I'm describing happens when you are anywhere east of UTC (so UTC+1, UTC+2..).

Steps to Reproduce:
1. Make sure to run subscription-manager on a machine that is on anywhere east of UTC/GMT timezone. In this example, I am running this in UTC+1.
2. Register to an org with SCA mode
3. Validate that the /var/lib/rhsm/cache/content_access.json file is there, has content, and note the 'lastUpdate' in it, e.g. {"lastUpdate": "2021-11-18T11:12:49+0000"... This should be the date sent by Candlepin, which is in UTC/GMT (see the +0000 suffix which indicates that).
4. Run 'subman refresh' with the HTTP debug commands: SUBMAN_DEBUG_PRINT_REQUEST=1 SUBMAN_DEBUG_PRINT_REQUEST_HEADER=1
5. Check the HTTP debug output for the second call to /accessible_content, and specifically for the If-Modified-Since header value.

Actual results:
'If-Modified-Since': 'Thu, 18 Nov 2021 10:12:49 GMT'

(subman is sending the date to be 1 hour earlier than what the cache says)
The actual effect is that the server will try to compare it to the date on the cert saved in the database (which should have been the same if the cert has not been regenerated), and server ends up thinking that it has a newer version of the cert, so it re-sends the cert back to the client, instead of sending back an HTTP 304 code.

Expected results:
'If-Modified-Since': 'Thu, 18 Nov 2021 11:12:49 GMT'

Additional info:

Here is what I think happens:
- Candlepin sends back SCA cert with lastUpdate set in UTC timezone (+0000) suffix.
- subman saves that in the cache as-is.
- Next time subman is calling /accessible_content, it reads the date from the cache, ignores the timezone suffix (+0000) and instead *assumes* it is local (to the client) time zone, tries to convert it to UTC, but in reality it just converts it to the wrong time. (in my case it shifts it down by 1 hour, because I am in UTC+1)

Comment 5 Archana Pandey 2022-01-20 15:50:34 UTC
pre-verification:

reproducer on subscription-manager-1.28.16-1.el8.x86_64

[root@kvm-01-guest11 ~]# rpm -qa subscription-manager
subscription-manager-1.28.16-1.el8.x86_64
[root@kvm-01-guest11 ~]# 
[root@kvm-01-guest11 ~]# timedatectl set-timezone Europe/Paris    <<<< can be set to any time zone east to UTC as mentioned in bug description

[root@kvm-01-guest11 ~]# subscription-manager register --username rhel9GA --password *****
Registering to: subscription.rhsm.stage.redhat.com:443/subscription
The system has been registered with ID: 32ee0e69-4e58-4920-926d-e391bf3382c7
The registered system name is: kvm-01-guest11.lab.eng.rdu2.redhat.com
[root@kvm-01-guest11 ~]# 
[root@kvm-01-guest11 ~]# cut -d ',' -f1 /var/lib/rhsm/cache/content_access.json
{"lastUpdate": "2022-01-20T15:33:28+0000"           <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< date time present in cache 
[root@kvm-01-guest11 ~]# 
[root@kvm-01-guest11 ~]# export SUBMAN_DEBUG_PRINT_REQUEST=1 SUBMAN_DEBUG_PRINT_REQUEST_HEADER=1
[root@kvm-01-guest11 ~]# 
[root@kvm-01-guest11 ~]# subscription-manager refresh 
<output omitted>

Making request: subscription.rhsm.stage.redhat.com:443 GET /subscription/consumers/32ee0e69-4e58-4920-926d-e391bf3382c7/accessible_content {'Content-type': 'application/json', 'Accept': 'application/json', 'x-subscription-manager-version': '1.28.16-1.el8', 'X-Correlation-ID': '84db3ad06767417887632bfe79e6f4e6', 'Accept-Language': 'en-us', 'User-Agent': 'RHSM/1.0 (cmd=subscription-manager) subscription-manager/1.28.16-1.el8', 'Content-Length': '0', 'If-Modified-Since': 'Thu, 20 Jan 2022 14:33:28 GMT'}
                                                                                                                                 ^^^^---------.-----time difference, subman is sending the date to be 1 hour earlier than what the cache says, 
<output omitted>

===============================================================================


preverifying on jenkins build- subscription-manager-1.28.25-1.git.9.941b9d3.el8.x86_64



[root@kvm-01-guest11 ~]# 
[root@kvm-01-guest11 ~]# yum upgrade subscription-manager
Updating Subscription Management repositories.
Red Hat Enterprise Linux 8 for x86_64 - AppStream Beta (RPMs)                                                                                                 3.6 MB/s |  10 MB     00:02    
Red Hat Enterprise Linux 8 for x86_64 - BaseOS Beta (RPMs)                                                                                                    2.4 MB/s | 4.1 MB     00:01    
Jenkins CI builds of Red Hat Subscription Manager for RHEL                                                                                                    143 kB/s |  32 kB     00:00    
:
<output omitted>
:
 Verifying        : subscription-manager-rhsm-certificates-1.28.25-1.git.9.941b9d3.el8.x86_64                                                                                          11/12 
  Verifying        : subscription-manager-rhsm-certificates-1.28.16-1.el8.x86_64                                                                                                        12/12 
Installed products updated.

Upgraded:
  dnf-plugin-subscription-manager-1.28.25-1.git.9.941b9d3.el8.x86_64                          python3-cloud-what-1.28.25-1.git.9.941b9d3.el8.x86_64                                           
  python3-subscription-manager-rhsm-1.28.25-1.git.9.941b9d3.el8.x86_64                        python3-syspurpose-1.28.25-1.git.9.941b9d3.el8.x86_64                                           
  subscription-manager-1.28.25-1.git.9.941b9d3.el8.x86_64                                     subscription-manager-rhsm-certificates-1.28.25-1.git.9.941b9d3.el8.x86_64                       

Complete!
[root@kvm-01-guest11 ~]# 
[root@kvm-01-guest11 ~]# 
[root@kvm-01-guest11 ~]# subscription-manager refresh

Making request: subscription.rhsm.stage.redhat.com:443 GET /subscription/consumers/32ee0e69-4e58-4920-926d-e391bf3382c7/certificates/serials {'Content-type': 'application/json', 'Accept': 'application/json', 'x-subscription-manager-version': '1.28.25-1.git.9.941b9d3.el8', 'X-Correlation-ID': '6b711c7ea1654ce684fe4db8768b5f5e', 'Accept-Language': 'en-us', 'User-Agent': 'RHSM/1.0 (cmd=subscription-manager) subscription-manager/1.28.25-1.git.9.941b9d3.el8', 'Content-Length': '0'}


Making request: subscription.rhsm.stage.redhat.com:443 GET /subscription/status {'Content-type': 'application/json', 'Accept': 'application/json', 'x-subscription-manager-version': '1.28.25-1.git.9.941b9d3.el8', 'X-Correlation-ID': '6b711c7ea1654ce684fe4db8768b5f5e', 'Accept-Language': 'en-us', 'User-Agent': 'RHSM/1.0 (cmd=subscription-manager) subscription-manager/1.28.25-1.git.9.941b9d3.el8', 'Content-Length': '0'}


Making request: subscription.rhsm.stage.redhat.com:443 GET /subscription/consumers/32ee0e69-4e58-4920-926d-e391bf3382c7/accessible_content {'Content-type': 'application/json', 'Accept': 'application/json', 'x-subscription-manager-version': '1.28.25-1.git.9.941b9d3.el8', 'X-Correlation-ID': '6b711c7ea1654ce684fe4db8768b5f5e', 'Accept-Language': 'en-us', 'User-Agent': 'RHSM/1.0 (cmd=subscription-manager) subscription-manager/1.28.25-1.git.9.941b9d3.el8', 'Content-Length': '0', 'If-Modified-Since': 'Thu, 20 Jan 2022 15:33:28 GMT'}
                                                                                                                                                 ^^^^^^^ time matches the cache value

All local data refreshed

Making request: subscription.rhsm.stage.redhat.com:443 GET /subscription/consumers/32ee0e69-4e58-4920-926d-e391bf3382c7/compliance {'Content-type': 'application/json', 'Accept': 'application/json', 'x-subscription-manager-version': '1.28.25-1.git.9.941b9d3.el8', 'X-Correlation-ID': '6b711c7ea1654ce684fe4db8768b5f5e', 'Accept-Language': 'en-us', 'User-Agent': 'RHSM/1.0 (cmd=subscription-manager) subscription-manager/1.28.25-1.git.9.941b9d3.el8', 'Content-Length': '0'}

[root@kvm-01-guest11 ~]# 

Actual Results and expected results are same here, subman is sending the date correct date time for refresh command.

Based on above observation setting verified field to tested.

Comment 7 Archana Pandey 2022-02-21 11:15:55 UTC
      Beaker Test information:
                         HOSTNAME=hpe-dl380pgen8-02-vm-16.hpe2.lab.eng.bos.redhat.com
                            JOBID=6324461
                         RECIPEID=11496978
                    RESULT_SERVER=
                           DISTRO=RHEL-8.6.0-20220220.3
                     ARCHITECTURE=x86_64

Steps to verify:

change system time anywhere east of UTC/GMT timezone
[root@hpe-dl380pgen8-02-vm-16 ~]# 
[root@hpe-dl380pgen8-02-vm-16 ~]# 
[root@hpe-dl380pgen8-02-vm-16 ~]# subscription-manager version
server type: Red Hat Subscription Management
subscription management server: 3.2.22-1
subscription management rules: 5.41
subscription-manager: 1.28.28-1.el8
[root@hpe-dl380pgen8-02-vm-16 ~]# 
[root@hpe-dl380pgen8-02-vm-16 ~]# rpm -qa --changelog subscription-manager | grep 2024589
- 2024589: fix format of HTTP-date headers (ptoscano)
[root@hpe-dl380pgen8-02-vm-16 ~]# 

[root@hpe-dl380pgen8-02-vm-16 ~]# subscription-manager register --username rhel9GA --password ******

Registering to: subscription.rhsm.stage.redhat.com:443/subscription
The system has been registered with ID: e02e7a1b-2e6b-40e1-9d96-5a3070c24cc1
The registered system name is: hpe-dl380pgen8-02-vm-16.hpe2.lab.eng.bos.redhat.com

[root@hpe-dl380pgen8-02-vm-16 ~]# 
[root@hpe-dl380pgen8-02-vm-16 ~]# 
[root@hpe-dl380pgen8-02-vm-16 ~]# 
[root@hpe-dl380pgen8-02-vm-16 ~]# cut -d ',' -f1 /var/lib/rhsm/cache/content_access.json
{"lastUpdate": "2022-02-21T11:00:43+0000"
[root@hpe-dl380pgen8-02-vm-16 ~]# export SUBMAN_DEBUG_PRINT_REQUEST=1 SUBMAN_DEBUG_PRINT_REQUEST_HEADER=1
[root@hpe-dl380pgen8-02-vm-16 ~]# 
[root@hpe-dl380pgen8-02-vm-16 ~]# subscription-manager refresh 

Making request: subscription.rhsm.stage.redhat.com:443 GET /subscription/consumers/e02e7a1b-2e6b-40e1-9d96-5a3070c24cc1/certificates/serials {'Content-type': 'application/json', 'Accept': 'application/json', 'x-subscription-manager-version': '1.28.28-1.el8', 'X-Correlation-ID': '3f70973aff4943bf8cc1f707e6674f24', 'Accept-Language': 'en-us', 'User-Agent': 'RHSM/1.0 (cmd=subscription-manager) subscription-manager/1.28.28-1.el8', 'Content-Length': '0'}


Making request: subscription.rhsm.stage.redhat.com:443 GET /subscription/status {'Content-type': 'application/json', 'Accept': 'application/json', 'x-subscription-manager-version': '1.28.28-1.el8', 'X-Correlation-ID': '3f70973aff4943bf8cc1f707e6674f24', 'Accept-Language': 'en-us', 'User-Agent': 'RHSM/1.0 (cmd=subscription-manager) subscription-manager/1.28.28-1.el8', 'Content-Length': '0'}


Making request: subscription.rhsm.stage.redhat.com:443 GET /subscription/consumers/e02e7a1b-2e6b-40e1-9d96-5a3070c24cc1/accessible_content {'Content-type': 'application/json', 'Accept': 'application/json', 'x-subscription-manager-version': '1.28.28-1.el8', 'X-Correlation-ID': '3f70973aff4943bf8cc1f707e6674f24', 'Accept-Language': 'en-us', 'User-Agent': 'RHSM/1.0 (cmd=subscription-manager) subscription-manager/1.28.28-1.el8', 'Content-Length': '0', 'If-Modified-Since': 'Mon, 21 Feb 2022 11:00:43 GMT'}
                                                                                                                 ^^^^^^^^^-----------------------header shows correct time
All local data refreshed

Actual Results:
'If-Modified-Since' and lastUpdate should show same datetime

Expected Results:
'If-Modified-Since' and lastUpdate shows same datetime

Verification : Passed

Comment 9 errata-xmlrpc 2022-05-10 15:22:58 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (subscription-manager bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2022:2047


Note You need to log in before you can comment on or make changes to this bug.