51,411
社区成员
发帖
与我相关
我的任务
分享linux系统是CentOS 7.5.1804
openldap是2.44
windowsAD 是2012R2
目前使用ldap命令可以添加密码全为小写字母的密码和userAccountControl:66048可以添加进去,AD中用户也正常
但是使用代码添加就会报Server is unwilling to perform错误。
struct keyVal{
string key;
string val;
};
string account = "test";
string dname = "CN=" + account + ",CN=Users,DC=example,DC=com";
string pname = account + "@clouddesk.com";
vector<keyVal> keyValueList;
obj.key = "objectClass";
obj.value = "user";
keyValueList.push_back(obj);
obj.key = "cn";
obj.value = account;
keyValueList.push_back(obj);
obj.key = "distinguishedName";
obj.value = dname;
keyValueList.push_back(obj);
obj.key = "displayName";
obj.value = account;
keyValueList.push_back(obj);
obj.key = "name";
obj.value = account;
keyValueList.push_back(obj);
obj.key = "userPrincipalName";
obj.value = pname;
keyValueList.push_back(obj);
obj.key = "objectCategory";
obj.value = "CN=Person,CN=Schema,CN=Configuration,DC=clouddesk,DC=com";
keyValueList.push_back(obj);
bj.key = "unicodePwd";
obj.value = "IgBwAGEAcwBzAHcAbwByAGQAIgA=";
keyValueList.push_back(obj);
obj.key = "userAccountControl";
obj.value = "66048";
keyValueList.push_back(obj);
obj.key = "sAMAccountName";
obj.value = account;
keyValueList.push_back(obj);
//申请空间
LDAPMod **modifications;
modifications = (LDAPMod **)malloc( sizeof(LDAPMod *)*keyValueList.size() + 1 );
for(int i = 0; i < keyValueList.size(); i++ ) {
modifications[i] = (LDAPMod *)malloc( sizeof(LDAPMod) );
modifications[i]->mod_op = LDAP_MOD_ADD;
}
for(int i = 0; i < keyValueList.size(); i++ ) {
modifications[i]->mod_type = (char *)keyValueList[i].key.c_str();
modifications[i]->mod_values = (char **)malloc( sizeof(char *)*2 );
modifications[i]->mod_values[0] = (char *)keyValueList[i].value.c_str();
modifications[i]->mod_values[1] = NULL;
cout << "key=" << modifications[i]->mod_type << ", value=" << modifications[i]->mod_values[0] << endl;
}
modifications[keyValueList.size()] = NULL;
//int rc;
rc = ldap_add_s(ld, dname.c_str() ,modifications);
if(rc != LDAP_SUCCESS){
std::cout << "add error, rc = " << rc << ", msg=" << ldap_err2string(rc) << std::endl;
return rc;
}
代码如上
请各位大佬帮帮忙。感谢!