问题描述
CentOS7上面运行的项目,在用户管理添加新用户时,密码设置成Aa12345@时,会报Cannot read property 'message' of undefined的错误
问题出现的环境背景及自己尝试过哪些方法
在/etc/pam.d下的common-password文件中
password [success ok] pam_cracklib.so rejectusername minlen=8 difok=3 ucredit=0 lcredit=0 dcredit=0 ocredit=0
相关代码
相关代码如下:
inline int pamUpdatePassword(const std::string& username,
const std::string& password)
{
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-const-cast)
const struct pam_conv localConversation = {pamFunctionConversation,const_cast<char*>(password.c_str())};
pam_handle_t* localAuthHandle = nullptr; // this gets set by pam_start
int retval = pam_start("webserver", username.c_str(), &localConversation, &localAuthHandle);
if (retval != PAM_SUCCESS)
{
return retval;
}
retval = pam_chauthtok(localAuthHandle, PAM_SILENT);
if (retval != PAM_SUCCESS)
{
pam_end(localAuthHandle, PAM_SUCCESS);
return retval;
}
return pam_end(localAuthHandle, PAM_SUCCESS);
}
你期待的结果是什么?实际看到的错误信息又是什么?
密码设置成Aa12345@时,pam_chauthtok()函数返回PAM_AUTHTOK_ERR,如果密码设置成Bji230309@时,返回PAM_SUCCESS(正常的),为什么将密码设置成Aa12345@不行,大家有遇到过嘛?
出现这个问题的原因应该是密码的安全策略,根据楼主的问题描述(楼主的问题描述很完善,点个赞!),出现“Cannot read property 'message' of undefined”是因为密码复杂度不够强造成的,在/etc/pam.d/common-password文件中,您使用了pam_cracklib.so模块来限制用户密码的复杂度。

pam_cracklib.so这个模块的作用是检查密码长度、是否包含数字、大小写字母和特殊字符等要求。如果密码不符合这些要求,则会拒绝修改或者创建新密码。你可以尝试将其修改为更加复杂一些的密码,并且确保满足上述条件,看看能否解决问题。