(计算机软件与理论专业论文)ldap目录系统中基于引用机制的分布式设计.pdf_第1页
(计算机软件与理论专业论文)ldap目录系统中基于引用机制的分布式设计.pdf_第2页
(计算机软件与理论专业论文)ldap目录系统中基于引用机制的分布式设计.pdf_第3页
(计算机软件与理论专业论文)ldap目录系统中基于引用机制的分布式设计.pdf_第4页
(计算机软件与理论专业论文)ldap目录系统中基于引用机制的分布式设计.pdf_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 日常生活中很多数据都使用分层结构来进行组织,例如图书馆的档案分类 等。l d a p 目录是将对象信息按照一定顺序( 反映了对象的内容) 组织起来的分 层的列表( 1 i s t i n g ) 。分布式的目录由一组物理上分布在计算机网络不同结点上而 逻辑上属于一个完整系统的数据组成。在l d a p v 3 中,服务器可以将指向其他 服务器的引用( r e f e r r a l ) 返回给客户端,然后由客户端根据引用信息进行所需操 作。 本文围绕目录服务的基于引用机制的分布式实现这一中心做了如下工作: 首先,介绍了l d a p 的协议的基本知识和相关的背景。 其次,对l d a p v 3 的一个开源的实现o p e n l d a p 进行了整体结构的探讨和 分析,并重点对其中使用引用机制实现的分布式部分进行了功能测试和源代码的 分析,指出0 p e n l d a p 在分布式的实现方面存在着基本功能的严重缺陷。 再次,针对发现的问题,对o p e n l d a p 的源代码进行了修改,使得其引用 机制的基本功能得以完整的实现,并通过功能测试对改进结果进行了验证。 最后,设计使用引用机制的新的目录分布式部署方案,以查找操作为例对其 进行了实现。新的设计进一步发展了引用机制,使得其功能更加完善,从而更适 用于分布式部署。 关键词:目录服务,轻型目录访问协议( l d a p ) ,引用,分布式,对象类, 引用属性 a b s t r a c t m u c ho f t h ed a t aw ed e a lw i t he v e r yd a y i so r g a n i z e d h i e r a r c h i c a l l ys u c h a s l i b r a r yc l a s s i f i c a t i o ns c h e m e s l d a p d i r e c t o r i e sa r el i s t i n g so f i n f o r m a t i o na b o u t o b j e c t sa r r a n g e d i ns o m eo r d e rt h a tg i v e sd e t a i l sa b o u te a c ho b j e c t d i r e c t o r yc a n b e d i s t r i b u t e d ,w h i c hm e a n s t h a tag r o u p o f c o m p u t e r sp h y i s i c a l l y d i s t r i b u t e do n d i f f e r e n tc r u n o d e so f o n en e t w o r kb e l o n g s t oo n e c o m p l e t ed a t ao r g a n i z a t i o n i n l i g h t w e i g h td i r e c t o r y a c c e s sp r o t o c o lv e r s i o n3 , t h el d a ps e r v e rc a nr e t u mt h e r e f e r r a lt h a tm a y p o i n t t oo t h e rl d a ps e r v e r st ot h el d a pc l i e n t ,a n dt h el d a pc l i e n tc a n u s et h i sr e f e r r a lt oe x e c u t et h en e e d e do p e r a t i o n t h i sp a p e rd e s c r i b e st h ew o r ka b o u tt h er e a l i z a t i o no f t h ed i s t r i b u t e dd i r e c t o r y s e r v i c eb a s e do nr e f e r r a lm e c h a n i s ma sf o l l o w s : f i r s t l y , t h eb a s i ck n o w l e g e a n dt h eb a c k g r o u n do f t h el d a p p r o t o c o l a r eg i v e n s e c o n d l y a l li n d e p t h r e s e a r c ho nt h ew h o l es t r u c t u r eo fo p e n l d a p - a no p e n s o u r c ei m p l e m e n t a t i o no f t h el i g h t w e i g h td i r e c t o r ya c c e s sp r o t o c o l ,i sc a r r i e do u t , a n a l y z i n g t h er e s o u r c ec o d ea b o u tt h ep a r to f d i s t r i b u t e dd i r e c t o r ys e r v i c ea n dt e s t i n g t h ef u n c t i o no f d i s t r i b u t e dd i r e c t o r ys e r v i c e t h e nt h ef i m i t a f i o no f t h eb a s i cf u n c t i o n i sp o i n t e do u t t 1 l i r d l y , t h er e s o u r c ec o d eo f 血e0 p e n l d a p i sm o d i f l e dt or e s o l v et h ep r o b l e m d e s c r i b e da b o v e a sar e s u l t t h eb a s i cf u n c t i o nu s i n g 也er e f e r r a lm e c h a n i s mc a nb e r e a l i z e d ,a n dt h et e s tr e s u l tv a l i d a t e s t h i se f f o r t f i n a l l y , a n e ws o l u t i o nu s i n gr e f e r r a lm e c h a n i s mt or e a l i z et h ed i s t r i b u t e d d i r e c t o r y i sc o m p l e t e da n das e a r c ho p e r a t i o ns y s t e mo f t h i ss o l u t i o ni si m p l e m e n t e d n l en e w p r o j e c td e v e l o p s t h er e f e r r a lm e c h a n i s m sf u n c t i o na n dm a k e si tm o r e p e r f e c t , a n dm o r es u i t a b l ef o rt h er e a ld i s t r i b u t e dd i r e c t o r ys e r v i c ea p p l i c a t i o n k e yw o r d s :d i r e c t o r ys e r v i c e ,l i g h t w e i g h td i r e c t o r y a c c e s sp r o t o c o l ( l d a p ) , r e f e r r a l ,d i s t r i b u t i o n ,o b j e c tc l a s s ,r e f a t t r i b u t e 2 第一章绪论 第一章绪论 目录服务是o s i 网络中一种重要的应用服务。其目的是在全球范围内建立被 称为目录的分布式信息库,保存人、组织、o s i 应用实体的地址及电子邮件地址 等各类实体的有关信息,向目录用户和应用程序提供对这类信息的查询,搜索和 更新等服务。目录是一些开放系统的集合,这些系统相互合作容纳有关现实世界 对象的信息,形成一个逻辑信息数据库。相对于一般数据库,目录服务可以使信 息以更符合其本来内在秩序的形式保存和获取,因而使用更加方便。 1 - 1l d a p 简介 c c i t t ( c o n s u l t a t i v ec o m m i t t e eo ni n t e r n a t i o n a lt e l e g r a p h ya n dt e l e p h o n y ) 制定的x 5 0 0 目录已被公认为是适合于建立分布在全球范围内的共享信息的标 准,但x 5 0 0 目录访问协议要求整个o s i 协议集的支持,开销庞大,这制约了目 录服务的适用范围。 i e t f ( i n t e m e t e n g i n e e r i n g t a s kf o r c e ) 下的a s i d 小组制定了轻型目录访问 协议l d a p ( l i g h t w e i g h td i r e c t o r ya c c e s sp r o t o c 0 1 ) ,其目标是用较小的代价在 i n t e m e t 上实现x 5 0 0 的大多数功能。这使得l d a p 成了i n t e r n e t 上的目录服务标 准。 1 1 1l d a p 信息模型 l d a p 信息模型定义能够在目录中存储的数据类型和基本的信息单位。目录 的基本信息单元是条目( e n t r y ) 即关于对象的信息集合。通常,条目中的信 息说明真实世界的对象,比如某个高校。图1 1 表示了典型的目录结构的一部分。 图1 1 目录结构 一1 一 第一章绪论 条目由属性集合组成,每个属性说明对象的一个特征。每个属性有一个类型 和一个或多个值。属性类型说明包含在此属性中的信息的类型,值代表实际的数 据。例如,下表表示的是描述人的一个条目,具有人的全名、姓、电话号码、电 子邮件地址等属性。 属性类型属性值 c n l i m i n g s nl i t e l e p h o n e n u m b e r 0 2 22 3 5 0 7 8 1 5 m a i ll i m i n g 国n a n k a i e d u c n 目录条目可以用l d i f 文本格式表示,这是一种用文本格式表示目录的标准 方式,可以用来从目录服务器导出数据或者向目录服务器导入数据。l d i f 文件 只包含a s c i i 文本,因为它基于文本并且易读,所以使用l d i f 代表目录条目。 下面是一个用l d i f 表示的目录条目: d n :u i d = i i m i n g ,d c = n k , d c = e d u o b j e c t c l a s s :t o p o b j e c t c l a s s :p e r s o n o b j e e t c l a s s :o r g a n i z a t i o n a l p e r s o n o b j e c t c l a s s :i n e t o r g p e r s o n o n :l i d o n g c n :l i x i n g s n :l i m a i l :l i m i n g n a n k a i e d u c n t e l e p h o n e n u m b e r :0 2 2 2 3 5 0 7 8 1 5 d e s c r i p t i o n :ab i gs o c c e r f a n 一个l d i f 条目由多行组成。第一行以d n :开始,后跟条目的分辨名。随后 是条目的属性,每个属性一行。每个属性值前面是属性类型和冒号( :) 。属性值 的顺序无关紧要,但是为了使它更容易读,一般把o b j e c t c l a s s 属性放在第一个, 并且把相同的属性类型的值放在一起。 所有条目都有一个必需属性集合和一个可选属性集合。例如一个描述人的条 目必须有一个c n ( 通用名) 属性和一个s r l ( 姓) 属性。人的条目中有许多其他 属性是可选的,而不是必需的。任何属性,如果没有明确说明是必需属性或可选 属性,应该被禁止。 所有关于必需属性和可选属性的信息集合统称为模式( s c h e m a ) ,目录模式 对存储在目录中的信息的类型和值进行控制和维护。 总之,l d a p 信息模型描述目录的基本信息单元条目。条目由属性组成,属 性由一个属性类型和一个或多个属性值组成。属性的约束用来限制作为属性值的 数据的类型和长度。目录模式规定了一个属性是必需属性还是可选属性。 第一章绪论 1 1 2l d a p 命名模型 l d a p 命名模型定义用户如何组织和使用数据。l d a p 命名模型提供的灵活 性使用户可以用一种易于管理的方式把条目放入目录。例如,可阻仓6 建一个目录, 其中保存描述组织中人的信息的所有条目。 l d a p 的命名结构与u n i x 文件系统的强录结构的有相似性之处( w i n d o w s 的目录结构也有相似之处) 。这样的文件系统由一系列目录和文件组成,每个目 录由零个或多个文件或目录组成。下图是典型的u n i x 文件系统的一部分: 图1 2u n i x 文件系统结构 但u n i x 文件系统和l d a p 蟊录之间有三点不同: 第一是l d a p 模型根条目具有特殊性。文件系统有一个根目录,它是所有 文件和目录的祖先。在l d a p 目录中,根条目是概念性的不作为个可以 存放数据的条耳存在。有一个称为r o o t d s e 的条目,包含服务器相关的信息,但 不是一个通常的目录条目。 第二是目录的每个节点都包含数据,经何节点都可能作为一个容器,即 i d a p 条目允许在他的下谢有子节点。文件系统的每个节点或者是文件或者是目 录,但不能同时是二者。在文件系统中,只有目录可以有子节点,而且只有文件 可良包含数据。圈1 3 的晷家树表示了此概念,注意条弱d c = n k , d c = e d u , o u = p e o p l e 和o u = d e v i c e s 都包含数据( 属性) ,也包含子节点。 文件系统和l d a p 目录的第三个不同是树中的结点如何念名。l d a p 名称与 文件系统名称的方向是相反的。以鞠1 2 和图1 3 中的加阴影的节点为例,图1 2 中,加阴影的节点是完整名称是u s r b i n g r e p 的文件。注意,如果从左向右读文 件名,则是从树的顶端( ,) 到命名的文件。与之穗对的是圈1 3 中加阴影的目 录条目的名称。它的名称是u i d = l i m i n g ,o u = p e o p l e ,d e - - n k ,d c = e d u 。注意,如果从 庭向右读,则从命名的条隧逆向到达树的顶端。 第一章绪论 图1 3l d a p 目录树 l d a p 支持目录条目的层次排列。但并不是强制某种类型的层次。正如可以 按照人们喜欢和方便的方式自由地排列文件,也可以自由地构造个人希望的目录 层次。 这种自由的一个例外是当l d a p 目录服务实际是一个x 5 0 0 服务的前端时。 x 5 0 0 命名模型比l d a p 严格得多。在x 5 0 01 9 9 3 标准中,目录结构规, 贝l j ( d i r e c t o r y s t r u c t u r er u l e s ) 限定能创建的层次类型。标准指定了什么类型的对象类能作一个 条目的直接子条目。例如,在x 5 0 0 模型中,只有描述国家( c o u n t r i e s ) 、地点 ( 1 0 c a l i t i e s ) 和组织( o r g a n i z a t i o n s ) 的条目才能成为目录树的根。l d a p 命名模 型不对树结构作任何限定,任何类型的条目可被放置在树的任何位置。 除指定如何排列目录条目的层次结构,l d a p 命名模型还描述了如何指向目 录中的单独条目。 命名模型是为目录中的每个条目给出一个唯一的名称。在l d a p 中,使用 分辨名( d n ) 来唯一标志条目。 类似于文件系统的路径名,l d a p 条目的名称是其父条目到根的独立名称连 接排列而成。比如,在图i 3 中的目录树中,加阴影的条目的名称是u i d = l i m i n g , o u = p e o p l e ,d c = n k ,d c = e d u 。从左向右读条目名称,我们能跟踪到从条目本身到目 录树根的路径。名称的各独立部分以逗号分隔,逗号后的空格是可选的。 在任何条目的d n 中,最左边的一段被称为相对分辨名( 砌) n ) 。在兄弟条 目间( 他们拥有共同的直接父条目) ,每个r d n 必须是唯一的。由于这个规则 在条目树中递归有效,所以没有两个条目有相同的d n 。如果我们尝试添加两个 有相同名字的条目,目录服务器将拒绝你的第二个条目,这和u n i x 文件系统很 相似。 4 第一章绪论 1 1 3l d a p 功能模型和a p i 的使用 l d a p 功能模型说明了能够使用l d a p 协议对目录执行的操作。 l d a p 功能模型包含一个可以分成三组的操作集合。查询类操作( 查询、比 较) 允许用户搜索目录并取回目录数据。更新类操作( 添加、删除、修改、重命 名) 允许用户对目录条目进行添加、删除和修改。认证和控制类操作( 绑定、解 绑定、放弃) 允许客户端向目录证明自己的身份,并在几个方面对会话进行控制。 下文给出了l d a p 的c a p i 接口,其他语言的a p i 接口是相似的。 1 查询操作 l d a p 查询操作用来在目录中搜索条目,并取出目录条目。l d a p 没有读操 作,当需要读取某条目时,必须使用一种特殊格式的查询操作,其中限定了你要 取回的条目内容。 i n tl d a p _ s e a r c h ( l d a p + l d ,c h a r+ b a s e ,i m s c o p e ,c h a r + f i l t e r , c h a r * a t t r s ,i n ta t t r s o n l y ) : 第一个参数是l d a p 连接的句柄。 第二个参数是查询的基对象,这个参数用一个d n 来表示,它表示要查询的 目录( 子) 树的根。 第三个参数是范围。范围有三个类型。一是s u b t r e e ,是指想要查询从基对 象以任何路径到树叶的整个子树。二是o n e l e v e l ,是指你想要查询的只是基对象 直接下级的条目。三是b a s e ,是指要限定查询条件为基对象。这通常用来在目 录中找一个特殊的条目。图1 7 描述了查询范围的三种类型。 第四个查询参数是查询过滤条件。这是一个描述返回条目类型的表达式。 第五个查询参数是查询结果返回的属性列表。可以指定所有的属性都要被返 回,也可要求返回条目的莱几个属性。 第六个查询参数是a t t r s o n l y 。这是一个布尔参数,如果它被设置为真的话, 服务器将只把属性类型传送给客户端,而不传送属性值。当客户端只想知道条目 所包含的属性而不想知道实际的值时,这个参数将会用到。如果这个参数被设置 为假,属性类型和属性值都将被返回。 第一章绪论 图1 7 查找范围分类 2 比较操作 另一种查询类操作是比较操作,它用于检查某条目是否包含某个属性值。如 果条目有此值,则比较结果为真,否则,比较结果为假。 第一章绪论 如果企图在一个属性上进行比较,但这个属性并不存在于目录中,比较操作 将为客户端返回一个特殊的指示f a l s e 一条目存在,但没有所指定的属性。而查 询操作则返回没有找到( 与条目根本不存在无法区别) 。比较操作的另一优势是 服务器和客户机间交换的数据量更小。 3 添加操作 i n tl d a p _ a d d ( l d a p + l d ,c h a r + d n ,l d a p m o d + a t 仃s 】) ; 添加操作创建新的目录条目,它的后两个参数:要创建的条目的分辨名d n 和新条目中包含的属性,属性值对的集合。为了使添加操作成功,必须满足以下 四个前提条件: 新条目的父条目必须已经存在。 不能存在同名( 分辨名) 的条目 新条目必须与有效的模式( s c h e m a ) 相一致。 访问控制必须允许执行此操作。 4 删除操作 i n tl d a p _ d e l e t e ( l d a p4 l d ,c h a r4 d n ) ; 删除操作只需指明要删除的条目d n 。只能删除目录的叶节点,即不支持删 除子树。删除一经进行,无法恢复。为了使删除操作成功,必须满足以下两个前 提条件: 父条目必须已经存在。 访问控制必须允许执行此操作。 5 修改操作 i n tl d a p _ m o d i f y ( l d a p + l d ,c h a r + d n ,l d a p m o dm o d s ) ; 修改操作除指明操作的条目d n 外,还包括l d a p m o d 结构数组。其中每个 数组元素是一个修改动作,记录修改的操作类型和操作数据。修改操作功能强大, 能完成对条目的属性类型和属性值的修改操作。 6 重命名( 修改r d n ) 操作 重命名,或者修改r d n 操作,用于为条目重命名。 i n tl d a p _ m o d r d n ( l d a p + l d ,c h a r + d n ,c h a r n e w r d n ,h a t e l e t e o l d r d n ) ; 它有四个参数:l d a p 连接的句柄、要重命名的条目、条目新的r d n 和删 除原r d n 标志( d e l e t e o l d r d n ) 。为了使修改r d n 操作成功,必须满足如下 前提条件: 被重命名的条目必须已经存在。 条目的新名称不能已经被其他条目使用。 访问控制必须允许执行此操作。 7 绑定操作 一般常用的是使用简单密码的绑定。使用s s l t l s 或s a s l 的绑定更加复 杂,一般需要预先配置和多步操作,目前r f c 没有对此作出规定。 8 解绑定操作 第一章绪论 用于中断持续避行的l d a p 操作,关闭连接。 9 放弃操作 放弃操作用于中断正在进行的操作。 1 1 4l d a p 安全模型 l d a p v 3 是一个功能强大的目录访问协议,它定义了一组安全功能,在所有 的l d a p 客户机和服务器之间保持这些功能睡互操 乍性非常重要。安全模型基 于绑定操作,分为一下几种。 1 无认证( 疆名) 当调用a p i 的绑定操作时分辨名( d n ) 和密码保留为空,舀录会假定是无 认证,l d a p 服务器会自动假定一个匿名用户会话并且服务相应的访问控制权 限。 2 基本认证( 简单密码) 当使用l d a p 的基本安全认证时,客户进程通过网络向服务进程发送一个 分辨名( d n ) 和口令来标识自己( 有的实现中使用b a s e 6 4 编码) 。服务进程检 蠢客户进程发送的分辨名( d n ) 和密码是否与目录中存储的分辨名( d n ) 和密 码相匹配,翔果匦醮则认为遵过了认证。 3 简单认证和安全层( s a s l ) s a s l 是向基于连接的协议中添加其它认证机制的框架。s a s l 已经发展成 为用于调和协议和认证系统之间的通用系统。 4 s s l 厂r l s 安全套接层协议的意图是提供认证和数据的安全性,它封装了t c p i p 套接 字,以便于每个t c p i p 应用都能够使用它保证通讯的安全。 1 2l 溅p 中的分布式机制 分布式目录服务系统的大优越性是它对物理上分散存储于网络上的信息 提供一种逻辑上统一的访1 ;- j 。o p e n l d a p 中的分布式部署设计包括分为复制和 弓 用两部分。 复制的目的是保证在一个分布式的环境中,主服务器的数据和从服务器的数 据保持一致,因此主服务器需定时地把自身变化的数据发送给从服务器,以便达 到主服务器的数据和从服务器的数据保持一致。它是通过在运行目录服务器 s l a p d 之外再运行s l u r p d 复制服务器来实现的。复制功能涉及到的是服务器之间 的相互操作,实际上是服务器到服务器的映射的功能。 引用是指目录服务器s l a p d 把目录树的某部分指向其他的目录服务器( 可以 运行或不运行s l a p d ) ,通过设定另一台目录服务器成为它的弓l 角来提供转向服 务。在l d a p v l 和l d a p v 2 中,服务器并不把引用返回给客户端,而在l d a p v 3 中 服务器可以将指向其他服务器的引用( r e f e r r a l ) 返回给客户端,然后由客户端根 据引用信息进行所甓操作。弓i 用主要应用于以下情况: 扩展目录服务网。引用允许将查询请求熏定向到其他的目录服务系统中,使 第一章绪论 得用户通过和本地目录服务系统的联接,去发现远地目录信息,而不需要服务提 供者将信息从远地系统复制到本地。 规模划分。对于一些极大的组织而言,例如一些国际i s p ,引用可以将他们 超过百万数量级的目录信息储存在一个单一目录系统中。 负载平衡。在某些组织中,由于带宽或安全原因,不适宜将所有目录项复制 到一个特定的目录服务器上来满足一些远程目录用户。此时可以通过引用来允许 远程用户在他们自己本地服务器上执行查询操作。 1 3 本文研究内容 本文以o p e n l d a p ( l d a p 的一个开源的实现) 为起始的研究对象,对其目 录服务器进行了分析,重点对于其引用机制进行了研究改进。然后,针对实际应 用设计并实现了一个优化的基于引用机制的分布式方案。概括地讲,此项工作取 得一下两方面的研究结果。 首先,对o p e n l d a p 项目本身的修正与创新。o p e n l d a p 项目是一个协 作开发强健的、商业等级的、具有丰富特性的、并且是开放源码的l d a p 应用 程序和工具的项目。但是其中关于使用引用机制来实现分布式资源管理部分存在 着严重的缺陷,这使得其无法满足实际分布式部署的基本要求。针对这一点,在 充分理解o p e n l d a p 整个系统构成的基础上,本文采用测试与代码修改相结合 的方式对o p e n l d a p 进行了修改和验证。最后不仅使引用机制的功能得以正确 的实现,而且没有给原系统带来额外的负担和开销,保证了目录系统整体的效率。 所实现的基于引用机制的分布式系统符合实际应用中对分布式目录的正确性和 完整性的要求,可以被应用到实际部署当中,也可以作为继续开发研究的技术基 础。 其次,通过设计实现一个新的解决方案,对引用机制进行了发展和创新。 o p e n l d a p 项目的分布式机制由于追求系统的精练,故而在考虑实际情况的复 杂度方面有所欠缺。因为引用机制仅仅是目录系统众多功能的一个方面,从而为 了尽量减少整个系统本身的负担,它过多地将实际中可能出现的问题交于系统管 理员进行维护。能否以及如何保证效率的前提下,设计一种功能更强大,更方便 实际应用的分布式目录系统呢? 这是新方案的问题来源和实现目标。新的解决方 案以系统本身的功效和实际应用的需求为出发点,给出了包括客户端和服务器两 方面的完整的引用机制的功能模式。客户端对引用信息进行记录分析是其中在思 维方式方面的主要创新之处,在此基础上本文还提出了交叉引用等新概念。然后, 以一个查找工具为例对新设计进行了实现。结果证实新的分布式系统更适合实际 应用的需求,其功能更完整,而且某些方面效率也有一定提高。诚然,这一解决 方案还存在着粗糙之处,但是这种观念的创新和结合实际需求的实践为基于引用 机制的分布式部署的发展提供了一个很好的借鉴。 第二章0 p e n l d a p 系统的实现 第二章o p e n l d a p 系统的实现 开发l d a p 相关的服务器和客户端的公司比较多,例如m m ,n e t s c a p e 等。 而开源的l d a p 服务器除了一个依赖简单的j a v a 编写的j l d a p 外,就是 o p e n l d a p o 唱开发的o p e n l d a p 。该项目由一个全世界志愿者组成的社团管 理,该社团利用i n t e m e t 来交流、计划和开发o p e n l d a p 软件和文档。经过大 规模使用,o p e n l d a p 对l d a p 协议的源代码的开发实现获得广泛肯定的,其 可靠性和性能得n t 检验。o p e n l d a p 作为l d a p 协议的个免费实现,正处 于一个逐步完善,力图完整实现整个协议的过程。它的网站是w w w o p e n l d a p o r g 。 本章对o p e n l d a p 的系统结构和源代码代码结构进行简单的分析介绍,为 接下来针对其引用机制进行深入探讨做必要的准备。 2 1o p e n l d a p 系统组成结构 o p e n l d a p 是可以运行在w i n d o w sn t 和大多数u n i x 类平台上的。为了 得到这种跨平台性,其中充斥着条件预编译指令,使其可读性受到负面影响。 o p e n l d a p 缺省的数据库是b e r l d e y d b ,这种数据库只提供了a p i 界面供程序 员而非最终用户使用。 o p e n l d a p 整个程序包括:独立的l d a p 服务器( s l a p d ) ,独立的l d a p 复 制服务器( s l u r p d ) ,软件开发工具包,客户端的例程,应用工具等,支持工具包 等。整个文件分为8 个部分: b u i l d ,c l i e n t s ,c o n t r i b ,d o e ,i n c l u d e ,l i b r a r i e s , s e r v e r s ,t e s t s 。 d o c 包括相关的r f c 草案,及帮助等;c o n t r i b 包括o p e n l d a p o r g 之外的 人士提供的l d a p 相应程序:b u i l d 包括用于编译o p e n l d a p 软件包,t e s t s 提 供了测试软件,在编译之后运行m a k et e s t 可以测试服务器是否能正常工作; c l i e n t s 包括一些典型的l d a p 应用程序,许多是由r f c 等文档定义的。 2 2o p e n l d a p 系统的源代码简析 整个o p e n l d a p 目录服务器的程序代码可以分为五大模块。分别为:主程 序模块,目录功能模块s l a p d ,目录复制模块s l u r p d ,目录操作函数库,编码解 码程序函数库。 主程序模块是程序的入口点,包含m a i n 主函数,提供程序的启动和初始化, 产生服务守护进程。 目录功能模块s l a p d 包括功能主模块,前端服务模块和后端服务模块。包含 以下几个主要的源文件: d a e m o n f c 提供主服务守护进程所需的工作函数,完成服务工作。 c o n n e c t i o n c 提供前端连接操作所需函数,对不同的连接生成不同的连接处 理线程。 o p e r a t i o n c 提供l d a p 协议标准操作所需的函数。 b a e k e n d - c 提供调用后端数据操作所需的函数。 目录复制模块s l u r p d 是独立的实现服务器之间复制的模块。其函数m a i n ( 主 第二章0 p e n l d a p 系统的实现 线程) 生成1 个文件管理线程丘i l 和1 个或多个复制线程f i 。1 个r i 对应1 个从 服务器。f m 线程监视复制日志文件,将其数据拷贝到临时文件目录,形成私有 的复制日志文件,清空复制日志文件。然后从私有的复制日志文件将复制内容写 到复制队列r q 。并以广播形式向全部r i 线程发出唤醒信号。另外,硒线程还负 责对复制队列r q 进行垃圾清理。r i 线程从复制队列r q 中取出与自己代表的从服 务器相匹配的复制项,向从服务器发出l d a p 操作。 目录操作函数库包括前端服务的b i n d c ,u n b i n d c ,a d d c ,d e l e t e e ,m o d i 母c , m o d r d n c ,f i l t e r c 和a b a n d o n c 等源文件,用于提供各个标准操作调用后端服务 所需的函数;以及后端服务b i n d c ,u n b i n d c ,a d d c ,d e l e t e c ,m o d i f y c ,m o d r d n c , f i l t e l c 和a b a n d o n c 等源文件,其中函数被后端服务调用来完成实际的数据操作。 编码解码程序函数库包括e n c o d e c ,d e c o d e c ,和i o c 等源文件,提供b e r 编码解码的库例程。 这几部分模块之间的关系可用图2 1 来表示。 图2 1 目录服务器模块关系 下面将目录服务器的几个主要的模块分别加以说明。 2 2 10 p e n l d a p 目录服务器主模块 主程序模块完成命令行处理,初始系统环境,读入配置文件,开启守护进程 等工作。它的流程图如图2 2 所示。 第二章o p e n l d a p 系统的实现 从命令行中读取参数确定调试条件 0 l 初始化守护进程分析需要监听的u 一,对其逐个调用o p e n 一s e n e 嘎) 分析确定参数- 绑定s o c k e t o 0 改变服务器主目录组和属主 j 初始化扩展操作 j 服务器初始化( s l a p j n l t o ) :初始化线程互斥标志,s a s l ( b a c k e n d i n n ( ) ) 数据库模型相关部分 j 。( s c h e m a _ i n i t o 0 靓醴据信息进行配置帐取午 j 完成代码中模式信息数据舌 l l 管蜜器9 一p r e “ - 测试习 j t l s 加密建立信号处理 器,脱离控制终端 j 配置和启动后台数据库实例 ( b a c k e n d _ s t a r t u p o ) j 初始化完成,开始守护进程的服务,s i a p 屯d a e m o n ( ) 调用 d a e m o n j a s k o 运行实际的服务器守护进程 图2 2 主程序模块流程图 服务器在初始化工程中要遵循一下几条要求: 1 先初始化属性的匹配函数和取值检查函数,再初始化属性和对象类;与 匹配函数不同,新添加的属性和对象类的定义应该放在外部配置文件中 而不是源代码中。 2 先初始化各类数据库类型再初始化它的实例;为了对服务器的功能进行 测试,数据库实例初始化放到l d a p 核心部分初始化完成之后。 3 某些对象类和属性由模式( s c h e m a ) 规定,供服务器内部使用,必须将 其实现而且有统一的解释,应该放在源代码中以保证协议得到遵守。 4 完成配置后再监听用户请求。 2 2 2 目录功能模块 l d a p 目录功能模块由四部分组成:守护进程控制,客户端连接处理部分, 协议请求操作处理部分和后端数据操作部分。其中前三个部分属于前端服务,最 后一个属于后端服务。 第二章o p e n l d a p 系统的实现 守护进程控制中主要由三个操作函数:守护进程主控制函数s l a p dd a e m o n 0 , 守护进程关闭函数s e t _ s h u t d o w n 0 ,守护进程空操作函数d o _ n o t h i n 9 0 a 守护进程 启动后,首先申请连接队列所要使用的内存空间,并初始化连接队列中的每个连 接元素。然后守护进程创建一个字节流类型的s o c k e t 对象t c p s ,并把这个s o c k e t 对象绑定到由p o r t 参数指定的t c p 端口上,监听这个端e i 的网络活动。然后守 护进程进入循环状态直至系统发出结束s l a p d 的信号。守护进程在这个循环中轮 流检查连接队列中所有的连接,确定其操作是否得到处理,并处理尚未被处理的 连接操作。同时,守护进程要从被监听的t c p 端口读入新的连接请求,并用来 创建新的连接线程。 在守护进程收到连接请求后,客户端连接处理部分激活连接线程,如果是新 的连接请求则负责创建新的连接线程。 协议请求操作处理通过函数s t a t i cv o i d + c o n n e c t i o n _ o p e r a t i o n ( ) 来处理连接 中的操作。它根据相应的操作类型来指派相应的操作处理。在可能多个的后端数 据中选择合适的后端数据。 2 2 3 目录操作函数库 目录操作函数库提供了l d a p 目录服务模块所需要的目录操作例程。它包括 两部分:前端通用l d a p 目录操作处理函数和后端l d a p 实现目录操作处理函 数。 前端通用l d a p 目录操作处理函数包括包括: 绑定操作:i n td ob i n d ( c o n n e c t i o n4 c o r m ,o p e r a t i o n + o p ) 解绑定操作: i n td o _ u n b i n d ( c o n n e c t i o n 8 c o u n ,o p e r a t i o n+ o p ) 查找操作: i n td o _ s e a r c h ( c o n n e c t i o n 4 c o i l r l ,o p e r a t i o n + o p ) 修改操作: i n td o _ m o d i f y ( c o n n e c t i o n + c o u n ,o p e r a t i o n + o p ) 重命名( 修改r d n ) 操作:i md om o d r d n ( c o n n e c t i o n + c o r m ,o p e r a t i o n + o p ) 比较操作: i n td o _ c o m p a r e ( c o n n e c t i o n c o n n ,o p e r a t i o n+ o p ) 添加操作: i n td oa d d ( c o n n e c t i o n + c o r m ,o p e r a t i o n * o p ) 删除操作: i n td o ,) _ d e l e t e ( c o n n e c t i o n * c o n no p e r a t i o n * o p 放弃操作: i n td o _ a b a n d o n ( c o n n e c t i o n 4 c o r m , o p e r a t i o n + o p ) 实际的目录操作大部分是在l d a p 目录缓存中进行的,其缓存信息存在一 个d b c a c h e 结构中,该结构定义如下: t y p e d e f s t r u c tl d b m _ d b c a c h e i n t d b c _ r e f c n t ; i n t d b c _ _ m a x i d s ; i n t d b c _ m a x i n d i r e c t ; h a t a b c _ a i r t y ; i n t d b c _ f l a g s ; t i m e td b c _ l a s t r e f ; l o n gd b c b l k s i z e ; c h a r + d b c _ n a m e ; l d b md b cd b : 第二章o p e n l d a p 系统的实现 l d a p d b c :pvt t h r e a dm u t e xt w r i t em u t e x ) d b c a c h e ; 后端l d a p 实现目录操作处理函数包括: 绑定操作: i n tl d b mb a c kb i n d ( b a e k e n d 4 b e , c o n n e c t i o n + c o l i n ,o p e r a t i o i l8 0 p , c o n s t - c h a r 一* d n , e o n s tc h a r * n d n ,i n tm e t h o d ,s t r u c tb e r v a l + c r e d ,c h a r 解绑定操作: v o i dl d b mb a c k3 m b i n d ( b a c k e n d + b e ,c o n n e c t i o n + c o n r ,o p e r a t i o n + o p ) 查找操作: i n tl d b mb a c ks e a r c h ( b a c k e n d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论