LDAP常用函数和命令

 

说明:鉴于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)

  • 常用命令

    1.添加纪录

ldapadd -D "cn=Admin,o=echo,c=cn" -w secret –f <file>

或者利用重定向

ldapadd -D "cn=Admin,o=echo,c=cn" -w secret < <file.ldif>

说明:上面”cn=Admin,o=echo,c=cn”是管理员的dn,其密码是secret.

     2.删除纪录

ldapdelete –D "cn=Admin,o=echo,c=cn" -w secret “<dn>”

说明:<dn>是待删除纪录的dn

    3..查询纪录

ldapsearch -b "o=echo,c=cn" “<filter>"

说明:”o=echo,c=cn” 是bn, <filter>是匹配条件

    4..修改纪录

     ldapmodify -r -D "cn=Admin,o=echo,c=cn" -w secret -f <file>

        注:以上为最常用的几条命令,详细内容参考man。

  • 常用函数

    1. 几个常见的数据结构定义

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.

    1. 常用函数调用
        1. 初始化

LDAP *ldap_open( char *hostname, int portno )

int ldap_simple_bind_s( LDAP *ld, char *dn, char *passwd );

        1. 查询

         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中的<filter>一样。即匹配项。

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

           );

 

        1. 添加和修改

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[] );  

 

        1. 关闭连接

int ldap_unbind( LDAP *ld )

猜你喜欢

转载自blog.csdn.net/weixin_37569048/article/details/82351512