基于openldap查询AD用户的组信息,上代码

当用户找不到时,这里的ldap_result会卡住,设置tm.sec 为1也不行。需要继续定位。同样系统上官方的ldapsearch程序没有这个问题。

// gcc ldap_search.c -L /usr/local/lib/ -lldap -llber -I /usr/local/include   -DLDAP_DEPRECATED=1
// ldapsearch  -h 10.211.55.11 -p 389 -D "[email protected]" -w "Admin@123456" -b "dc=test,dc=com" "cn=u2"

#include <stdio.h>
#include <stdint.h>
#include <ldap.h>
#include <sys/time.h>

#define LDAP_SERVER_NUM 10
#define LDAP_SERVER_NAME_LEN 64
#define LDAP_USER_DN_LEN 256
#define LDAP_USER_PSWD_LEN 64

#define LDAP_SEARCH_DN_NUM 10
#define LDAP_SEARCH_DN_LEN 256
#define LDAP_SEARCH_FILTER_LEN 64

typedef struct ldap_server_t {
   
    char server[LDAP_SERVER_NAME_LEN];
    uint16_t port;
    char user_dn[LDAP_USER_DN_LEN];
    char user_pswd[LDAP_USER_PSWD_LEN];
} ldap_server_t;

typedef struct ldap_search_dn_t {
   
    char dn[LDAP_SEARCH_DN_LEN];
    int server_index;
} ldap_search_dn_t;

int ldap_server_num = 0;
ldap_server_t g_ldap_server[LDAP_SERVER_NUM] = {
   0};

int ldap_search_dn_num = 0;
ldap_search_dn_t g_ldap_search_dn[LDAP_SEARCH_DN_NUM] = {
   0};

int ldap_register_server(char *hostname, int16_t port, char *dn, char *pswd) {
   
    if (ldap_server_num >= LDAP_SERVER_NUM) {
   
        return -1;
    }

    for (int index = 0; index < LDAP_SERVER_NUM; index++) {
   
        if (strlen(g_ldap_server[ldap_server_num].server) > 0) {
   
            continue;
        }

        strcpy(g_ldap_server[index].server, hostname);
        g_ldap_server[index].port = port;
        strcpy(g_ldap_server[index].user_dn, dn);
        strcpy(g_ldap_server[index].user_pswd, pswd);
        ldap_server_num++;
        return 0;
    }

    return -1;
}

void ldap_unregister_server(char *servername) {
   
    for (int i = 0; i < LDAP_SERVER_NUM; i++) {
   
        if (strcmp(g_ldap_server[i].server, servername) != 0) {
   
            continue;
        }

        memset(g_ldap_server[i].server, 0, LDAP_USER_DN_LEN);
        memset(g_ldap_server[i].user_dn, 0, LDAP_USER_DN_LEN);
        memset
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值