说明:鉴于LDAP资料的匮乏,为了避免大家在开发中花费大量的时间去了解LDAP,特撰写本文档,供大家开发时候参考使用,也可供将来邮件系统管理人员配置LDAP时候参考使用。本文件是在查阅RFC1823,2251 2252 2253,2254和2255,以及结合本人在实际项目开发中的经验的基础上整理而成,重点描述了在项目中所需的LDAP的相关知识。
Distinguished Name (DN)
Relative distinguished name (RDN)
Directory Information Tree (DIT)
CommonName(CN)
OrganizationName(O)
CountryName(C)
ldapadd -D "cn=Admin,o=echo,c=cn" -w secret –f
或者利用重定向
ldapadd -D "cn=Admin,o=echo,c=cn" -w secret <
说明:上面”cn=Admin,o=echo,c=cn”是管理员的dn,其密码是secret.
2.删除纪录
ldapdelete –D "cn=Admin,o=echo,c=cn" -w secret “
说明:
3..查询纪录
ldapsearch -b "o=echo,c=cn" “
说明:”o=echo,c=cn” 是bn,
4..修改纪录
ldapmodify -r -D "cn=Admin,o=echo,c=cn" -w secret -f
注:以上为最常用的几条命令,详细内容参考man。
typedef struct ldap {
/* ... opaque parameters ... */
int ld_deref;
int ld_timelimit;
int ld_sizelimit;
int ld_errno;
char *ld_matched;
char *ld_error;
/* ... opaque parameters ... */
} LDAP;
struct timeval {
long tv_sec;
long tv_usec;
};
typedef struct ldapmod {
int mod_op;
char *mod_type;
union {
char **modv_strvals;
struct berval **modv_bvals;
} mod_vals;
} LDAPMod;
#define mod_values mod_vals.modv_strvals
#define mod_bvalues mod_vals.modv_bvals
typedef struct berval {
unsigned long bv_len;
char *bv_val;
};
typedef struct ldapmsg {
intlm_msgid; /* the message id */
intlm_msgtype; /* the message type */
BerElement *lm_ber; /* the ber encoded message contents */
struct ldapmsg *lm_chain; /* for search - next msg in the resp */
struct ldapmsg *lm_next; /* next response */
unsigned int lm_time; /* used to maintain cache */
} LDAPMessage;
#define NULLMSG ((LDAPMessage *) NULL)
说明:详细结构定义请察看源文件或者RFC1823.
LDAP *ldap_open( char *hostname, int portno )
int ldap_simple_bind_s( LDAP *ld, char *dn, char *passwd );
int ldap_search_s(
LDAP *ld,
char *base,
int scope,
char *filter,
char *attrs[],
int attrsonly,
LDAPMessage **res
);
其中,scope取值可为LDAP_SCOPE_BASE, LDAP_SCOPE_ONELEVEL,LDAP_SCOPE_SUBTREE,一般都用第三个。
fileter作用同命令ldapsearch中的
attrs指定查找结果中,需要的属性,置为NULL则返回所有。
attrsonly为0则返回值和类型,非零则只返回类型。
res存放查询的结果。
读取每个条目中的属性和值,可选用下面的函数:
//读取条目
LDAPMesage *ldap_first_entry( LDAP *ld, LDAPMessage *res );
LDAPMesage *ldap_next_entry( LDAP *ld, LDAPMessage *entry );
int ldap_count_entries( LDAP *ld, LDAPMessage *res );
//读取属性
char *ldap_first_attribute(
LDAP *ld,
LDAPMessage *entry,
void **ptr
);
char *ldap_next_attribute(
LDAP *ld,
LDAPMessage *entry,
void *ptr
);
//读取值
char **ldap_get_values(
LDAP *ld,
LDAPMessage *entry,
char *attr
);
int ldap_add_s( LDAP *ld, char *dn, LDAPMod *attrs[] );
int ldap_delete_s( LDAP *ld, char *dn );
int ldap_modify_s( LDAP *ld, char *dn, LDAPMod *mods[] );
int ldap_unbind( LDAP *ld )