Why does LIST IF(EXPIRE LE ...) return all LIDs even when they have no EXPIRE?
If LIST IF is bound with a date on both sides the command works
ACF
list if((expire ge u'01/01/18') and (expire le u'02/21/21'))
ACFMODEL ********ACFMODEL ACFMODEL TEST LID
If LIST IF is using equal to the command works
ACF
list if(expire eq u'02/21/21')
ACFMODEL ********ACFMODEL ACFMODEL TEST LID
However, when only using the less than or equal to operand ACF2 returns logonids with the expire date less than or equal to the date and logonids without an EXPIRE field.
list if(expire le u'02/21/21')
AAAAUSER ********AAAAUSER AAAATESTUSER
AAAAUSER ********AAAAUSER AAAATESTUSER
AAAUSER ********AAAUSER THIS IS AAAUSER
ABBUSER ********ABBUSER ABBUSER
ABCDEFGH ********ABCDEFGH TEST 8CHAR NAME
ACFMODEL ********ACFMODEL ACFMODEL TEST LID
Release : 16.0
Component : CA ACF2 for z/OS
The EXPIRE field is stored on the logonid. Every logonid will have a value. That value is at offset hex 'E0'. When you look at the value stored in the field it will be '0' if null or EXPIRE(0) was specified. If a date has been specified it will be stored in packed Julian date format. For example, February 21, 2021 would be stored as x'0121052C'. The LIST IF command for date 02/21/21 is 'LIST IF(EXPIRE LE u'02/21/21')'. CA ACF2 compares the packed value to the value in the logonid. It does not exclude the case when EXPIRE field is set to zero.
To list logonids that less than or equal to an EXPIRE date, enter a greater than EXPIRE date of '0'. To remove logonids that have a value of zero from the results, issue the CA ACF2 LIST if command 'LIST IF(EXPIRE LE u'02/21/21' and expire gt u'0')'.