GBase8d_C_API_06_添加条目_创建新属性
条目由分辨名和属性组成,在目录服务器中以分辨名作唯一标识符。在GBase 8d C API中使用同步函数ldap_add_s()和异步函数ldap_add()添加条目。
新建条目的完整步骤如下:
- 创建条目中所包含的每个单独的属性(见3.1 节)
- 创建组成条目的指针数组,并将属性加入到指针数组中(见3.2 节)
- 创建新的条目,指定一个固定的分辨名(DN) 并将条目添加到目录中(见3.3 节)
- 创建新属性
属性既可能是单值也可能是多值,属性值既可能是字符串也可能是二进制数据,由具体的schema来决定。在GBase 8d C API中,每种属性及其属性值用一个LDAPMod类型结构表示。
添加普通的多值属性。
//初始化属性值
char *cn_values[] = {"Richard Petersen","Gil Petersen", NULL};
//将属性值赋给属性
LDAPMod cnattr = {LDAP_MOD_ADD, "cn", cn_values};
添加二进制数据的属性:
//初始化二进制属性值
char jpegPhoto[] = "IIF2AIBAzCCBZQGCSqGSIb3DQEHAaCCBYUEggWBMIIFfTCCA\
t4GCSqGSIb3DQEHAaCCAs8EggLLMIICxzCCAsMGCyqGSIb3DQEM\CgECoIIBljCCAZIwHAYKKoZIhvcNAQwBAzAOBAgLPpypNGikQQI\CB9AEggFw09FtmYVN6E93f8fe6uJDsWEHbspVx3gLOj1LzVhpRXopv\9VpCyHsmchQjAZ3NBI79mlA2D7CxkQ4iZBAx7KBqFrPJJIk5ycm9XS\ZTv/mTCGdSy0cif+/HLG2EcbqcwGcn5A+Byd27kXFVfQ6MUZ0rTlh5a\52nZ1ixiyEqpPX0eOOnjypECbPNnGqaIGk4psGR”;
binval[0] = (struct berval*)malloc(sizeof(struct berval*));
binval[0]->bv_val = certificateRevocationList;
binval[0]->bv_len = sizeof(certificateRevocationList);
binval[1] = NULL;
//将二进制属性值赋给二进制属性。
mods[1]->mod_op = LDAP_MOD_ADD | LDAP_MOD_BVALUES;
mods[1]->mod_type = "certificateRevocationList";
mods[1]->mod_values = (char**)binval;
-
- 新建属性的指针数组
建立一个指针数组,将属性添加到指针数组中。
LDAPMod *attrs[] = {&objectClassattr, &cnattr, &oattr, &snattr,
&telephoneNumberattr, &postalCodeattr, NULL};