ldap 组织结构如何转成多叉树?

简介: 工作中,ldap 服务器的对接,可以能会涉及到同步组织结构,认证,认证后处理等等,最近认证还不是我想写的刚需,继续来看看对于组织结构的想法

工作中,ldap 服务器的对接,可以能会涉及到同步组织结构,认证,认证后处理等等,最近认证还不是我想写的刚需,继续来看看对于组织结构的想法

例如同步 AD 域的组织结构,或者是 ldap 协议的其他产品对应的企业组织结构,如下我简单的创建的一些 ou 和 cn

image.png

查看当前 ldap 组织结构

我们通过命令查看 ldap 服务器上的组织结构数据,咱们只查看 DN 即可,不需要其他的属性

shell

复制代码

# ldapsearch -x -LLL -b dc=xiaomotong,dc=com objectClass=* d:

image.png

我们可以看到,ldap 服务器给我们返回的数据中,是 1 个 list ,这个list 里面每 1 个元素是 1 个 entry,是 1 条记录,也是 1 个唯一的标识

那么问题就很明确了,如何将上述的 dn list ,转成 1 棵树呢?

我们可以根据上述打印结果画图,进行分析一下

先画一棵树

根据上面的打印结果,在和实际ldap admin 可视化工具中可以看出,根实际是在最后 dc=xiaomotong,dc=com,然后从右往左 分别是 ou,cn

前 5 条数据对应画出来的图是这样的:

image.png

看上去有戏,继续往下画看看效果:

  • 红色框为 ou
  • 绿色框为 dc
  • 蓝色框为 cn

image.png

对就是这样的一棵树,画出来了,可是我们如何用代码实现一下呢?

编码实现

编码实现将 ldif 格式的数据转成树,并用 json 的方式输出,查看效果

实现方式

1、遍历每一条 entry

2、处理每一条 entry 的时候,从右到左获取相应的 rdn(对应的键和值),并给每一个 rdn 创建一个 多叉树的 节点

3、basedn 对应的节点 和 每一个 ou 对应的节点地址,存放到一个 map(key 是 string,value 是节点的地址) 中便于后续遍历处理其他 entry 的时候,直接通过 ou 名字获取对应节点地址即可

4、对于一个节点下面的用户,直接挂到这个节点上即可

画个图来阐述一下 map 的作用:

例如我们需要画一个组织结构,先画根节点

image.png

现在我们要遍历对应的 entry,例如:

  • cn=B,dc=A
  • ou=C,dc=A
  • ou=D,dc=A

需要画上 B,C,D ,我们分别创建好对应的节点,但是如何挂到 A上面去的呢?这个时候,是不是就需要 A 的地址了,正好这个 entry 又能获取到 A 的名字,也就是 map 的key,这样子,我们就可以获取到 A 的地址了

image.png

继续解析 entry

  • ou=E,ou=C,dc=A
  • cn=F,ou=E,ou=C,dc=A

原理同上

image.png

通过上面的简图,算是可以将 ldap 的 ldif 格式的数据,转换成我们想要的树了,思路是有了,编码的话就很快了 具体编码可以看下一篇

学习所得,如有偏差,还请不吝赐教


欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
Java 关系型数据库 MySQL
mac,linux环境的基础工具安装【jdk,tomcat】
mac,linux环境的基础工具安装【jdk,tomcat】
306 1
|
消息中间件 开发者 微服务
构建高效代码:模块化设计原则的实践与思考
【2月更文挑战第14天】在软件开发的世界中,编写可维护、可扩展且高效的代码是每个开发者追求的目标。本文将探讨如何通过应用模块化设计原则来提升代码质量,分享一些实践中的经验教训以及对未来技术趋势的思考。
406 1
|
测试技术 Android开发 虚拟化
踩坑记录 | Android 逆向之如何处理 Kali Nat 模式无法上网?
踩坑记录 | Android 逆向之如何处理 Kali Nat 模式无法上网?
646 0
|
存储 应用服务中间件 调度
在StatefulSet中使用LocalVolume存储卷保持节点一致
StatefulSet是一种有状态服务,其存储卷的使用有多种方式: 使用共享存储,这时在模板中定义一个volume卷,可以给多个pod共享; 每个pod配置独立的存储卷,使用非共享存储(块存储)时需要这样配置,通过配置volumeClaimTemplates实现; 对于StatefulSet使...
5115 0
|
PyTorch 算法框架/工具
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
本文介绍了PyTorch中的BatchNorm2d模块,它用于卷积层后的数据归一化处理,以稳定网络性能,并讨论了其参数如num_features、eps和momentum,以及affine参数对权重和偏置的影响。
2079 0
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
|
存储 数据采集 数据处理
R语言数据变换:使用tidyr包进行高效数据整形的探索
【8月更文挑战第29天】`tidyr`包为R语言的数据整形提供了强大的工具。通过`pivot_longer()`、`pivot_wider()`、`separate()`和`unite()`等函数,我们可以轻松地将数据从一种格式转换为另一种格式,以满足不同的分析需求。掌握这些函数的使用,将大大提高我们处理和分析数据的效率。
小功能⭐️Unity中利用材质自发光实现物体闪烁效果
小功能⭐️Unity中利用材质自发光实现物体闪烁效果
|
安全 Linux 数据安全/隐私保护
探索Linux操作系统的文件权限管理
【9月更文挑战第29天】在数字世界中,文件权限管理如同保护我们隐私的锁。本文将带你了解如何在Linux系统中设置和管理文件权限,确保你的数据安全。我们将一起学习如何通过命令行工具来控制文件访问,就像学习一门新语言一样有趣。准备好了吗?让我们一起开启这场技术之旅!
|
Kubernetes 安全 网络协议
操作系统的未来之路:探索微内核架构与分布式系统
随着计算需求的不断演变和技术的快速进步,传统的宏内核操作系统正面临性能和安全性的挑战。本文旨在探讨操作系统的未来发展道路,特别是微内核架构和分布式系统在提升性能和安全性方面的潜力。通过分析微内核设计的优势、分布式系统的特性以及两者结合的可能性,文章旨在为读者提供对操作系统未来发展趋势的深入理解。
567 27
|
关系型数据库 MySQL 大数据
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
350 1

热门文章

最新文章