Gents,
I have a custom solution, so it may not be of any benefit to engineer.
My system has an open account, to which the application logs in, e.g. user name/ password = gainaccess/gainaccess.
The 'gainaccess' account can do nothing other than call an authentication routine, which validates the user's password etc. Behind the scenes, the application always logs in as 'gainaccess', and then feeds the password entered by the user into the authentication routine.
The authentication performs various checks, e.g. Oracle account exists, account is not locked, account is not expired etc. and returns English language text messages to the user, advising of any problems. If the password has expired, the user is advised to contact their system administrator for assistance.
I've posted some of this code previously, so have a squint for it. The bottom line is that you either allow users to un-expire their own accounts, or you don't. If the latter is required, your problem is not a problem at all, but a legitimate task for a suitably authorised administrator and/or DBA.
If you are required to provide un-expire capability from a custom application, then you have no choice but give that application access to an account with the relevant permissions, so that it does the un-expiring. To do that, you must have connected to the database.
Having just written a security/authentication suite, I'm a bit of a security geek, so please feel free to pose further questions if this doesn't help.
Regards
Tharg
Grinding away at things Oracular