When utilizing z/OS system symbols (such as &SYSUID) within ACF2 resource rule statements, scenarios may occur where the symbol appears to resolve to a user ID. Conversely, administrators often report that ACFNRULE or RECKEY deletion commands fail with "NO MATCHING RULES FOUND" or "NO MATCHING RULE LINE FOUND" when these symbols are used.
Product : ACF2 for z/OS
It is a common misconception that ACF2 natively resolves z/OS system symbols (such as &SYSUID) to a Logon ID (LID) when compiling or processing rules. ACF2 does not perform this resolution internally.
If a symbol such as &SYSUID appears to resolve to a specific user ID within ACF2 rule statements, this resolution is occurring externally to the ACF2 product. This is typically due to the following factors:
Since ACF2 does not perform this resolution internally, ensuring external processes correctly handle the substitution is essential.
Example: Using RECKEY for deletion If use RECKEY, it can be run it via ACFBATCH. The following is a sample JCL:
//ACFBATCH EXEC PGM=ACFBATCH
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SET RULE
RECKEY ruleid DEL(rule-entry)
//* rule-entry is the exact rule entry line to delete. <--- Remember
/*
Troubleshooting and best practices
1. Identifying the discrepancy. If a deletion fails, do not assume the rule does not exist. Instead, identify the discrepancy by comparing the rule as it is stored versus the rule in the script submits it:
2. Understanding tool behavior
System symbols like &SYSUID do not resolve in ACF2.
1. The first example below shows that RECKEY Del worked because there is an exact character match for UID(&SYSUID) in the rules.
RULE
DECOMP TESTKEY
ACF75052 ACCESS RULE TESTKEY STORED BY USER01 ON 08/26/26-08:55
$KEY(TESTKEY)
TEST UID(&SYSUID) READ(A) EXEC(A) <------------ Will delete this rule line
TEST UID(ABCDEFG) READ(A) EXEC(A)
TEST UID(ABCDE) READ(A) EXEC(A)
TEST UID(ABC) READ(A) EXEC(A)
ACF75051 TOTAL RECORD LENGTH= 328 BYTES, 2 PERCENT UTILIZED
RULE
RECKEY TESTKEY DEL(TEST UID(&SYSUID) READ(A) EXEC(A))
ACF75052 ACCESS RULE TESTKEY STORED BY USER01 ON 08/26/26-08:55
ACF60202 THE FOLLOWING RULE LINE(S) WILL BE DELETED
TEST UID(&SYSUID) READ(A) EXEC(A)
ACF70010 ACF COMPILER ENTERED
******** ACCESS RULE TESTKEY STORED BY USER01 ON 08/26/26-08:55
$KEY(TESTKEY)
TEST UID(ABCDEFG) READ(A) EXEC(A)
TEST UID(ABCDE) READ(A) EXEC(A)
TEST UID(ABC) READ(A) EXEC(A)
ACF70051 TOTAL RECORD LENGTH= 278 BYTES, 1 PERCENT UTILIZED
ACF60207 RULE TESTKEY REPLACED
2. The second screenshot shows that RECKEY DEL failed " ACF60203 NO MATCHING RULE LINE FOUND - PROCESSING TERMINATING "because there is no exact character-to-character matching line present in rule TESTKEY.
RULE
DECOMP TESTKEY
ACF75052 ACCESS RULE TESTKEY STORED BY USER01 ON 08/26/26-08:01
$KEY(TESTKEY)
TEST UID(ABCDEFG) READ(A) EXEC(A)
TEST UID(ABCDE) READ(A) EXEC(A)
TEST UID(ABC) READ(A) EXEC(A)
ACF75051 TOTAL RECORD LENGTH= 278 BYTES, 1 PERCENT UTILIZED
RULE
RECKEY TESTKEY DEL(TEST UID(&SYSUID) READ(A) EXEC(A)) <======= This exact rule line does not exist.
ACF75052 ACCESS RULE TESTKEY STORED BY USER01 ON 08/26/26-08:01
ACF60203 NO MATCHING RULE LINE FOUND - PROCESSING TERMINATING
For guidance on troubleshooting rule deletion failures or using RECKEY as an alternative, refer to article " ACFNRULE utility delete multiple rule entries"