CPF22E3: User profile is disabled
CPF22E3 means a program or server tried to get a profile handle for a user profile whose status is *DISABLED, and the security API refused. The text reads "User profile <name> is disabled."
Other names for this code
Also written as MSGCPF22E3, CPF22E3 user profile is disabled, user profile is disabled AS400, QSYGETPH CPF22E3, iSeries CPF22E3, CPF22E3 QSECOFR.
What it means
Programs and server jobs that run work as another user call the Get Profile Handle API (QSYGETPH) or a related API. The API checks the profile first. If its status is *DISABLED, the API ends with CPF22E3 and no handle is returned. The program can't switch to that user.
How strict the check is depends on how the API is called. With the special value *NOPWD, a disabled profile is always refused. With *NOPWDCHK, a caller that has both *ALLOBJ and *SECADM special authority can still get a handle for a disabled profile. With *NOPWDSTS, a disabled profile is refused too.
A profile becomes disabled when failed sign-on or password attempts reach QMAXSIGN, or when an administrator or a tool disables it on purpose. IBM has documented a case where a product's administration functions failed with CPF22E3 because the site had disabled QSECOFR, which the product relied on. Disabling powerful IBM profiles is common practice, so check whether any product depends on them before you do it.
Common causes
- The profile was disabled after too many failed passwords. CPF1393 in QSYSOPR confirms this.
- An administrator disabled the profile, for example during a leaver process or a security hardening project.
- A product or job swaps to an IBM-supplied profile, such as QSECOFR, that the site has disabled.
- The profile reached its user expiration date and the expiration action disabled it.
How to find the problem
- Open the job log of the failing job with
DSPJOBLOGand note the profile named in CPF22E3. - Run
DSPUSRPRF USRPRF(name)to see the status, the count of attempts that weren't valid and the expiration fields. - Search for CPF1393 with
DSPLOG LOG(QHST) MSGID(CPF1393). If it's there, the system disabled the profile and the message says where the failures came from. - If there's no CPF1393, a person or tool disabled it. A CP entry in QAUDJRN shows who changed the profile, if that auditing is on.
How to fix it
- Enable the profile with
CHGUSRPRF USRPRF(name) STATUS(*ENABLED), after fixing whatever caused failed passwords. - If the profile was disabled on purpose, change the job or product to run under a profile that is meant to be active, rather than enabling it.
- For a product that needs an IBM-supplied profile, check the product's documentation for a supported alternative before enabling a powerful profile again.
- If expiration caused it, set a new expiration date or interval before enabling it.
IBM documentation
IBM Display Message Descriptions (DSPMSGD). Use the documentation for your installed release.
This link opens the relevant IBM reference library or lookup instructions. Match the complete code and your installed product release; it is not a code-specific review.
Read the installed message description:
DSPMSGD MSGID(CPF22E3) MSGF(QSYS/QCPFMSG)
Also inspect the full job log and second-level message text, including substitution values.
Related codes
Questions
What is the difference between CPF22E3 and CPF1394?
Both usually mean the profile is disabled. CPF1394 is what a person sees on the sign-on display, while CPF22E3 comes from the security APIs used by programs and servers.
Can a program use a disabled profile at all?
Only in limited cases. QSYGETPH with *NOPWDCHK can return a handle for a disabled profile if the caller has *ALLOBJ and *SECADM special authority.
Should I re-enable QSECOFR to fix CPF22E3?
Only if you've confirmed the product truly needs it and your security policy allows it. Many sites keep QSECOFR disabled and give administrators their own profiles.