Bug 1320322

Summary: at shows incorrect time when the UTC timezone is specified
Product: Red Hat Enterprise Linux 6 Reporter: Florencia Fotorello <ffotorel>
Component: atAssignee: Tomas Mraz <tmraz>
Status: CLOSED ERRATA QA Contact: Radka Brychtova <rskvaril>
Severity: medium Docs Contact:
Priority: medium    
Version: 6.8CC: cww, psklenar, rskvaril
Target Milestone: rc   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: at-3.1.10-49.el6 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
: 1328832 (view as bug list) Environment:
Last Closed: 2017-03-21 11:01:46 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Bug Depends On:    
Bug Blocks: 1269194, 1343211    

Description Florencia Fotorello 2016-03-22 20:29:33 UTC
Description of problem:
at shows incorrect time when the UTC timezone is specified

Version-Release number of selected component (if applicable):
at-3.1.10-48.el6.x86_64

How reproducible:
Always

Steps to Reproduce:
- Timezone UTC:

--------------------
# date
Tue Mar 22 18:41:08 UTC 2016
--------------------

- at command with UTC option:

--------------------
# at 17:00 UTC
at> logger TEST
at> <EOT>
job 1 at 2016-03-23 16:00
--------------------

Actual results:

--------------------
# at 17:00 UTC
at> logger TEST
at> <EOT>
job 1 at 2016-03-23 16:00
--------------------

Expected results:

--------------------
# at 17:00 UTC
at> logger TEST
at> <EOT>
job 1 at 2016-03-23 17:00
--------------------

Additional info:

"parsetime.y" is substracting 3600 when UTC is indicated in the command (isgmt).

Comment 1 Stuart Newman 2016-03-25 14:52:19 UTC
The problem is caused by code in the parsetime subprogram in parsetime.y . exectm is moved to currtm after exectm.tm_isdst is set to -1. Nothing ever resets currtm.tm_isdst to either 0 or 1. When execution reaches line 508, currtm.tm_isdst is still -1, causing the test to pass, reducing the scheduled time by one hour. The proposed fix moves exectm to currtm before exectm.tm_isdst is set to -1.

The proposed fix (based on line numbers in at-3.1.10-48.el6.i686 is 

479a480
 > memcpy(&currtm,&exectm,sizeof(currtm)); 
482d482 
< memcpy(&currtm,&exectm,sizeof(currtm));

Comment 3 Tomas Mraz 2016-03-29 09:08:58 UTC
*** Bug 1316553 has been marked as a duplicate of this bug. ***

Comment 7 Radka Brychtova 2016-10-20 07:32:36 UTC
OLD package:
at-3.1.10-48.el6.i686

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [   LOG    ] :: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [  BEGIN   ] :: Display date and time :: actually running 'date'
Thu Oct 20 06:51:42 UTC 2016
:: [   PASS   ] :: Display date and time (Expected 0, got 0)
:: [  BEGIN   ] :: Add event for the time +1h without UTC :: actually running ' echo 'logger TEST' |at 07:51 '
job 1 at 2016-10-20 07:51
:: [   PASS   ] :: Add event for the time +1h without UTC (Expected 0, got 0)
:: [   PASS   ] :: File '/var/tmp/tmp.e3NBxghJ80' should contain '07:51' 
:: [  BEGIN   ] :: Add event for time + 1h vith UTC :: actually running ' echo 'logger TEST' |at 07:51 UTC'
job 2 at 2016-10-20 06:51
:: [   PASS   ] :: Add event for time + 1h vith UTC (Expected 0, got 0)
:: [   FAIL   ] :: File '/var/tmp/tmp.0jpMp2Kj6P' should contain '07:51' 
'f73d43b8-741d-47d7-aab1-5b4089ab955e'
Test result: FAIL


NEW package:
at-3.1.10-49.el6.i686
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: [   LOG    ] :: Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [  BEGIN   ] :: Display date and time :: actually running 'date'
Wed Oct 19 13:22:13 UTC 2016
:: [   PASS   ] :: Display date and time (Expected 0, got 0)
:: [  BEGIN   ] :: Add event for the time +1h without UTC :: actually running ' echo 'logger TEST' |at 14:22 '
job 1 at 2016-10-19 14:22
:: [   PASS   ] :: Add event for the time +1h without UTC (Expected 0, got 0)
:: [   PASS   ] :: File '/var/tmp/tmp.Uz20JfAkyW' should contain '14:22' 
:: [  BEGIN   ] :: Add event for time + 1h vith UTC :: actually running ' echo 'logger TEST' |at 14:22 UTC'
job 2 at 2016-10-19 14:22
:: [   PASS   ] :: Add event for time + 1h vith UTC (Expected 0, got 0)
:: [   PASS   ] :: File '/var/tmp/tmp.Ozt52tJP7g' should contain '14:22' 
'f5835646-25fb-4a00-addd-6c1d79d325db'
Test result: PASS

Since the test passed on all architectures => verified

Comment 9 errata-xmlrpc 2017-03-21 11:01:46 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, 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://rhn.redhat.com/errata/RHBA-2017-0703.html