Attempting to change the account password in CPanel or WHM for an user results in the following error message:
The password for ‘user’ could not be changed because:
No “because” explanation is given.
You may also see the following error in /usr/local/cpanel/logs/error_log:
Can't locate Crypt/PasswdMD5/XS.pm in @INC () at /scripts/cPScript/CheckPass/UNIX.pm line 6.
BEGIN failed--compilation aborted at /scripts/cPScript/CheckPass/UNIX.pm line 6.
Compilation failed in require at /scripts/cPScript/CheckPass.pm line 6.
BEGIN failed--compilation aborted at /scripts/cPScript/CheckPass.pm line 6.
Compilation failed in require at /scripts/realchpass line 16.
BEGIN failed--compilation aborted at /scripts/realchpass line 16.
This indicates that the Perl modules CPanel require are either missing or damaged.
This solution has been confirmed on CentOS and Red Hat Enterprise Linux (RHEL).
You’ll need to run the following commands as root on the command-line. If you’re not sure how to do so, please see our guide on accessing the root shell prompt.
First, let’s try fixing the problem without rebuilding Perl or changing any system configuration files. Run:
service cpanel restart
Try changing the password again. If you’re still getting the error, it’s likely the CPanel Perl installation was overwritten by an updated Perl RPM either manually or by yum. CPanel recommends using their Perl installer over the OS Perl packages.
Let’s make sure Perl is left up to CPanel added to the yum exclude list. Run the following command:
grep allowperlupdates /var/cpanel/cpanel.config
If you see allowperlupdates=1 you’ve enabled “Allow Perl updates from RPM-based linux vendors” in WHM under Tweak Settings -> System. Return to WHM and uncheck this option then click the “Save” button.
Open your yum.conf file in a text editor:
Verify that under the [main] section there’s a line that starts with exclude= and contains perl*. For example:
exclude=apache* bind-chroot courier* dovecot* exim* httpd* mod_ssl* mysql* nsd* perl* php* proftpd* pure-ftpd* ruby* spamassassin* squirrelmail*
If the line does not exist, you can either add it manually or run CPanel’s script:
Next, you’ll need to download the latest Perl installer from CPanel’s layer1 site: http://layer1.cpanel.net/ If you’re not sure how to download the file please see our guide on downloading a file on the command-line in Linux.
Once you have the file downloaded, extract and run the installer:
tar -xzf perl588installer.tar.gz
Finally, restart cpanel:
service cpanel restart
You should now be able to change passwords and create accounts that can actually login again.