LDAP 认证(Linux)

简述

之前分享过 Windows 下 LDAP 认证 的相关内容,为了跨平台,针对 Linux 也进行相关的实现。

  • 简述
  • 基本使用
  • 更多参考

基本使用

使用时依赖库 libldap.so(/usr/lib64),头文件所在目录 /usr/include。

#include <stdio.h>
extern "C" {
    #define LDAP_DEPRECATED 1
    #include <ldap.h>
    #include <lber.h>
}

// LDAP 服务器的设置
#define HOST "172.18.***.***"
#define PORT LDAP_PORT
#define WHO "uid=username,ou=People,dc=cloud,dc=com"
#define PASSWD "password"
#define FIND_DN "ou=People,dc=cloud,dc=com"

bool auth()
{
    LDAP *ld;
    LDAPMessage *result, *e;
    BerElement *ber;

    char *a;
    char **vals;
    int i, rc;
    int i_version = LDAP_VERSION3;

    // 获取 LDAP 连接的句柄
    ld = ldap_init(HOST, PORT);
    if (ld == NULL) {
        perror("ldap_init");
        return false;
    }
    printf("ldap_init success\n");

    // 设置协议版本
    ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &i_version);
    ldap_set_option(ld, LDAP_OPT_REFERRALS, LDAP_OPT_ON);

    // 绑定到 LDAP 服务器
    rc = ldap_simple_bind_s(ld, WHO, PASSWD);
    if (rc != LDAP_SUCCESS) {
        fprintf(stderr, "ldap_simple_bind_s: rc: %d, %s\n", rc, ldap_err2string(rc));
        return false;
    }
    printf("ldap_simple_bind_s success\n");

    // 搜索条目
    rc = ldap_search_ext_s(ld, FIND_DN, LDAP_SCOPE_BASE, "(objectclass=*)",
                           NULL, 0, NULL, NULL, LDAP_NO_LIMIT, LDAP_NO_LIMIT, &result);
    if (rc != LDAP_SUCCESS) {
        fprintf(stderr, "ldap_search_ext_s: rc: %d, %s\n", rc, ldap_err2string(rc));
        return false;
    }
    printf("ldap_search_ext_s success\n");

    // 由于正在做基本搜索,所以应该只有一个匹配的条目
    e = ldap_first_entry(ld, result);
    if (e != NULL) {
        printf("\nFound %s:\n\n", FIND_DN);
        // 迭代条目中的每个属性
        for (a = ldap_first_attribute(ld, e, &ber); a != NULL; a = ldap_next_attribute(ld, e, ber)) {
            // 对于每个属性,打印属性名称和值
            if ((vals = ldap_get_values( ld, e, a)) != NULL) {
                for (i = 0; vals[i] != NULL; i++) {
                    printf("%s: %s\n", a, vals[i]);
                }
                ldap_value_free(vals);
            }
            ldap_memfree(a);
        }

        if (ber != NULL)
            ber_free(ber, 0);
    }

    ldap_msgfree(result);
    ldap_unbind(ld);
    return true;
}

更多参考

时间: 2024-10-06 03:43:35

LDAP 认证(Linux)的相关文章

LDAP 认证(Windows)

简述 LDAP(Lightweight Directory Access Protocol - 轻量级目录访问协议)是一种目录服务协议,运行在 TCP/IP 栈之上的一层.它提供了一种用于连接.搜索.和修改 Internet 目录的机制. LDAP 目录服务基于 client-server 模型,LDAP 的功能是允许访问现有目录. LDAP 的数据模型(数据和命名空间)类似于 X.500 OSI 目录服务,但资源要求较低.相关联的 LDAP API 简化了编写 Internet 目录服务应用程

ldap 实现linux域管理时候的dc是怎么做的?

问题描述 ldap 实现linux域管理时候的dc是怎么做的? openldap 可以在linux做类似AD 的工作,那么DC 这块的该怎么做呢?客户端怎么加入域?

ASA8.42的Windows AD域LDAP认证

1.拓扑图: 参考:http://bbs.51cto.com/thread-728599-1-1.html 2.ASA配置步骤: A.添加LDAP认证类型的aaa-server aaa-server yuntian.com protocol ldap max-failed-attempts 2 aaa-server yuntian.com (inside) host 100.1.1.100 ldap-base-dn cn=users,dc=yuntian,dc=com ldap-group-ba

linux ldap认证:windos 和 linux 下实现PHP和LDAP身份认证

我现在的老板曾要求我为企业内部互联网的Web服务提供一种标准的身份验证方法.我遇到的一个主要问题就是我们公司主要使用了两种平台:UNIX和Windows.所以,我的第一个想法并不很成功:它要求每个员工都使用UNIX或者Linux而放弃Windows.我认为解决现在的UNIX/Windows问题的最好方法就是利用PHP的LDAP特性.由于LDAP服务器,要求我使用现有的系统,主要指的是一个巨大的Microsoft Exchange Server系统.我非常高兴使用Exchange,它很可靠,而且L

centos 6.4配置samba+ldap认证

原文地址:http://www.centoscn.com/image-text/config/2015/0716/5866.html    1. 什么是samba Samba服务类似于windows上的共享功能,可以实现在Linux上共享文件,windows上访问,当然在Linux上也可以访问到. 是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务.  2.安装配置samba [root@test ~]# yum install samb

LDAP认证vsftp方法

[root@li382-107 ~]# yum  install  vsftpd -y [root@li382-107 ~]# vim /etc/pam_ldap.conf        #更改如下2行: base dc=jc,dc=com uri ldap://192.168.1.10 [root@li382-107 ~]# vim /etc/pam.d/vsftpd         #添加2行: auth       sufficient   pam_ldap.so        #把这行放

Portal可以同时连接两个LDAP认证么

问题描述 希望有经验的人来解答下. 解决方案 解决方案二:WebSpherePortalV6.1下的联合用户注册表.解决方案三:可以.一种是负载均衡,两个ldap的数据是相同的.另一种是两个ldap共享一个后缀,其数据是不同的.解决方案四:可以的,可以参考informationcenter里面关于设置ldap的章节.

将 LDAP 目录用于 Samba 认证

原文地址: http://www.ibm.com/developerworks/cn/education/linux/smb-ldap/smb-ldap.html  开放源码 Samba 将 Unix 或 Linux 系统转变成了用于 Microsoft Windows 网络客户机的文件和打印服务器.您可以配置 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)来为 Samba PDC(主域控制器)提供用户认证.   教程概述 未来之路 本

PostgreSQL 如何提升LDAP或AD域认证的 高可用

PostgreSQL 如何配置AD域认证或LDAP认证,请参考:http://blog.163.com/digoal@126/blog/static/16387704020145914717111/http://blog.163.com/digoal@126/blog/static/1638770402014563264469/ 引入LDAP,AD认证,可能会增加故障点,当认证服务器出现故障时,认证将失败.本文主要介绍一下PostgreSQL是如何解决这个问题的,以及部分代码的分析. 当用户选择