PKg60k_ldap.pydef __bootstrap__(): global __bootstrap__, __loader__, __file__ import sys, pkg_resources, imp __file__ = pkg_resources.resource_filename(__name__,'_ldap.so') del __bootstrap__, __loader__ imp.load_dynamic(__name__,__file__) __bootstrap__() PKg6&,GJ44 _ldap.pyc; H,Fc@sdatdS(cCsGdk}dk}dk}|itdabb|ittdS(Ns_ldap.so( ssyss pkg_resourcessimpsresource_filenames__name__s__file__s __bootstrap__s __loader__s load_dynamic(s pkg_resourcesssyssimp((s6build/bdist.darwin-8.10.0-Power_Macintosh/egg/_ldap.pys __bootstrap__s N(s __bootstrap__(((s6build/bdist.darwin-8.10.0-Power_Macintosh/egg/_ldap.pys?s PKg6&,GJ44 _ldap.pyo; H,Fc@sdatdS(cCsGdk}dk}dk}|itdabb|ittdS(Ns_ldap.so( ssyss pkg_resourcessimpsresource_filenames__name__s__file__s __bootstrap__s __loader__s load_dynamic(s pkg_resourcesssyssimp((s6build/bdist.darwin-8.10.0-Power_Macintosh/egg/_ldap.pys __bootstrap__s N(s __bootstrap__(((s6build/bdist.darwin-8.10.0-Power_Macintosh/egg/_ldap.pys?s PKg67OH-H-_ldap.so  H__TEXT__text__TEXTPP__picsymbolstub1__TEXT  __cstring__TEXT  __literal8__TEXT __DATA__data__DATA__dyld__DATA__la_symbol_ptr__DATAi__nl_symbol_ptr__DATAČ Č__bss__DATAĬ__common__DATAH8__LINKEDIT`]H TF/System/Library/Frameworks/LDAP.framework/Versions/A/LDAP 4F/usr/lib/libsasl2.2.dylib 4F  /usr/lib/libssl.0.9.7.dylib 8Ft  /usr/lib/libcrypto.0.9.7.dylib 4E0/usr/lib/libgcc_s.1.dylib 4FtX /usr/lib/libSystem.B.dylibP0M Pjjq|B}|}cx=}| x=N |B}h|=kk\}iN ||~xB!?;T}HYxH|iyA88@ I 8!P|N ```||~xB!/A\/AH /A<8cHH;8~ ~8H~ H88!Px|H``||3xB|+x!/A;~???``Cx8H> 8THY|}yAxH||xH/~A`xH~]8B/]@(]x| | xN!```;;{/@pH 8`H8`8!`|N ``|a|~xB|#x!?<8\8<8@@D8DH/A/@(<_<B8dbH!8`H`a@;`AH)Q|{yA`̀aD;AH)-||yA /A<8c0HHY<exx~ ~88H=8|}x~  HcxH(QxH(I/A <~8|HYQH ``a8HH `8`8!pa|N ``|a|~xB|#x8!?<\8888<@8_’i<_=?x삩~xDxHg|~yA~AD~ijxHj/@4<8rtx8vHg|dxxHgHx``<x8<888w8@Hf/AL8`Hf||y@HhH4`8 a<|}xx8{xH@]8B/]@ ]x| | xN!`8`H>m<|}xx8|xH@]8B/]@ ]x| | xN!`8`H><|}xx8|xH@E]8B/]@ ]x| | xN!`8`H=<|}xx8| xH?]8B/]@ ]x| | xN!`8`H=}<|}xx8|4xH?]8B/]@ ]x| | xN!`<8c|@H?<|}xx8|`xH?Q]8B/]@]x| | xN!8`H<<|}xx8|lxH?]8B/]@ ]x| | xN!`8`H<<|}xx8|xxH>]8B/]@ ]x| | xN!`8`H<=<|}xx8|xH>e]8B/]@ ]x| | xN!`<8c|H>i<|}xx8|xH>]8B/]@]x| | xN!<8c|H><|}xx8|xH=]8B/]@,]8!Px| | x|N 8!P|N ||exB8!+A A,<_Ti:8Bb})iDH>eH8```?<<f8cP8QH8y|dxxH8-8!P8`|N |A|}yB|#x!@ <cfH>8`H``8188H=I/@ <_8bfH(```8<_8BatT :})iD/@H8AH,``H<||yAa8H=!H<]|~yAD<xx8PxH<^8B/^@^x| | xN!x838c(I8B/I@~c(C| | xN!c(<8??_8cM?;^;ZRDH:Y<;{R`|}x|ex8M~xp?<H9]<88cN8B]c(H:<|}x|ex8N ~x`H8ـ]<88cN88B]c(H9<|}x|ex8NT~xH8]<88cNh8B]c(H9<|}x|ex8N|~xH8a]<88cN8B]c(H9a<|}x|ex8N~xTH8%]<88cN8B]c(H9%<|}x|ex8N~x,H7]<88cN8B]c(H8<|}x|ex8N~xH7]<88cN8B]c(H8<|}x|ex8N~xH7q]<88cO8B]c(H8q<|}x|ex8O~xXH75]<88cO,8B]c(H85<|}x|ex8O@~x\H6]<88cOP8B]c(H7<|}x|ex8Op~xxH6]<88cO8B]c(H7<|}x|ex8O~xH6]<88cO8B]c(H7<|}x|ex8O~xH6E]<88cO8B]c(H7E<|}x|ex8O~xH6 ]<88cP8B]c(H7 <|}x|ex8P$~x4H5̀]<88cP48B]c(H6<|}x|ex8PH~x8H5]<88cPX8B]c(H6<|}x|ex8Pl~x(H5U]<88cP|8B]c(H6U<|}x|ex8P~xH5]<88cP8B]c(H6<|}x|ex8P~xH4݀]<88cP8B]c(H5<|}x|ex8P~x H4]<88cQ 8B]c(H5<|}x|ex8Q(~xH4e]<88cQ<8B]c(H5e<|}x|ex8QT~xH4)]<88cQh8B]c(H5)<|}x|ex8Q|~xH3]<88cQ8B]c(H4<|}x|ex8Q~xH3]<88cQ8B]c(H4<|}x|ex8Q~x@0KD0U<0a@0t80@0@0H0@0΀L0P0p0@000@1 111$xN.D#D-D#D%D-D%D-D%(D&,D-0DD@DGLD0pD1D2D6D7D8D<D=D<D=D>D=D>D@DADC DDDF0DGD1$#1+@"17@"1D$81N%<1a&@1t@'1@(1*D1@+11@>111@>111X1$hNX.`D`DpDtDxDDDDDDDDDDDDDDGDDDD D4D8D@D\DhDlDDDDDDDDD1$`1@2@2 D2<2%@2882EH2XL2k@2@2P2@2`2@222@2222$N.DDDDD D$D(D0D4D8DDDHDLDPDTDXD`DdDDtDGDDDDDDDDD DD D@DDDXDDDDDDDDDDDDD0D<DHDhDDDDDDDDDDDDDD D$D(D,D0D4D8D<D`DhDpDtDDDDD D D 0D`2$2@2@3H3<3X3+3G`3R333ʀ3@34@4 L4,@4?@4N@4[@4k@4|4444@444@4 44׀P4@4D55@505<5@5 h5,H5-5.8585Z555 5@5`555$N.DD,DDD#DDD,DD,DD#D'DD,DDD,DDDG D1@D4TD6pD;D<D=DADBDCDGDHDGDHDJ DH DJ 4D< @D> DD? LD@ PDM TDN \DP dDQ lDS DT 5$5@5@5ـl5L5P5T6X6\6-`6@d6S@ 6h@!6}#p6$x6@%6'h6)H6@*66@J6 6 6@J6 46 @6@<7 @7 T7 7$(N . D D D D DD DG D! D!0D!4D!8D!<D!LD!pD!7$ 7!@7-@7:87G 7H!7I$N!.!D!D!D!D!D!D!D!D!D!D!DD" D"DD"D"D"D" D"$D"(DD",DG"0D"PD"`D"dD"pD"D"D"D"D"D"D# D#$D#(D#4D#<D#DD#LD#`D#t7J$!7`@7l@7yp7X7h7T7`7ŀ\7׀H7L7@8@8'P83@8D!8E@8S# 8T#$8U@8c#(8d#48e#8f$N#8g#.#D#D#D#D#D#D$D$(D$0D$@D$DD$LD$PD$TDs$\Dt$|DV$Dy$Dz$D|$D~%D%4D%<D%HD%LD%TD%\D%hD%|D%D%D%D%D%D%D%D%D%D%D%D%D&D&D&0D&@D&LD&dD&hD&lD&pD&|D&D&D&D&D&D&D&D&D&D'D'PD'dD'xD'D'D'D'D'DS'DT'DU'DW(DV(DY(D[( D(4D(8D(pD(|D(D(D(DS(DT(DU(DV(DW(DV(DY)D[)D)D)$D)4D)@8y$#8@8@8@88ˀ8ހ89L99@9@9@9#9рm89ڀn<9o@9@o9@q: @q:$\:@:&$:'$:(@:4':5(4:6(4:7)`:8$N)`.)`D)`D)pD)tD)D)D)D)D)D)D)DD)DG)D)D)D)D*D*D*D*$D*(D*0D*LD*XD*\D*lD*pD*tD*DS*DT*DU*DV*DW*DV*DY*D[*D*D*D*D+D+ D+D+(D+8:9$)`:P@:\@:i8:s<:@:D:@:@:ҀH:@:@:)`:@; *l; *p;@;*t;*;+L;$N+L.+PDN+PDZ+`DN+dDQ+pDZ+tDQ+xDZ+|DQ+DR+DZ+DD+DG+D]+D^+Da+Db+Dc+Dg,Dh,Di,Dm, Dn,<Dm,HDn,LDo,\Dn,`Do,dD,pDS,DT,DU,DV,DW,DV,DY,D[,D,D,Dr,Ds,Du,Dv-Dx-Dy-(; $N+P;:@M;F@M;SO8;]P<;lQ@;RD;@S;@T;VH;@W;@X;+P;@o;,\;,`;@o<,d<,p<-<< $N-<< &< '<><_<|>>P>j>{>CCCـCDD D1DJD[DvDDDDʀDۀDEEE&E7EOE`E{EEEEՀEFF(FDFUFlF}FFFπFFGGG:GRGcG|GGGG̀GHH(H8HHHXHhHxHHH؀HHI II6IFIVIfIрIJ\JlJ|JNOPPPPPӀPPQ Q%Q>QPQhQ{QQQɀQ܀QRR0RKRiR|RRÀRրRS S-S>SOS`SqSSSSSƀS@SS-@S.S$HN...D.D.D.D.D.D.D.D.D.D.D/D/D/ D/,D/4D/PD/pS$.T@T@T@T(T3@TB8TRT_TrTT<TT.T/T$N/./D/D/D/D!/D/D/D/D/D/D0D 0D%0D 00D0<D0`D0tD0|D0D0D0D!0D'0T$/T@T@T@T@U@U8U'<U3UM@UZ2Ut/Uu0Uv$hN0.1D,1D41D,1 DD1D,1D41 D91@D:1PD>1`D?1tD@1|DH1DD1DJ1Uw$,1U@+U@+U@-U@.U/@UЀ18U2<U1U1U$N1.1DV1DW2U$V1V@UV$N2 .2D42D62D42D62$D92(D+2@D,2LD-2PD92XD=2dD<2hD=2lD<2xD=2|V$42V.@3V9@5VD2VE2VF$N2.2D2D2D2D2D2D3D3D3,D3PD3\DP3dDQ3DV3DY3DZ3D[3D_3Da3Db4Dc4Db4Dc4 Dd4$D+4(Dh4@Dk4LDo4XDp4|Dq4Dt4D+4D,4D-4D4Dz4D4D4D5D5D5D50VG$2Vc@Vo@Vz@V@V@V2VI<VJ8VL@V3dV4VǀI<VҀJ8VL@V4V4V5HV$N5HV&MWW%WYWud5HWvd5PWd5PWfW<W€.5PD5PD5dD5D5D5D5D5D5D5W$5PW@ W@ W@X 5PX @X5X5X5XX'X6XLXeXY Y5YEYVYgY^.^J^Z^k^^^^^ۀ^___/_@_X_i_z____ŀ__` `)`:`k`|````р`aa#a3aDaUaqaaaaπaabb b0b@bPb`bpbbbbbccc.c>cNc^cvccd dh$i3ijj*j@jRjhjxjjjjՀjkkk0kBk_krkkk̀kll'l:l[lnllllĀlՀllmmm*m;$N5m9D?: DA:pDB:DC;DD;`DE;DF<DG0DP>DR>DS? DT?pDU?DV@DX@`D\@D]AD^APDbADcADbADcADdADfADgB@DhBDiBDjC0DkCDlCDmD DnDpDpDDqEDrE`DvEDwFDxFPDyFDzFD{G@D|GD}GD~H0DHDHDI DIpDIDJDJ`DJDKDKPDKDKDL@DLDLDM0DMDMDN DNpDNDODO`DODPDPPDPDPDQ@DQDQDR0DRDRDS DSpDSDTDT`DTDUDUPDUDUDV@DVDVDW0DWDWDX DXpDXDYDY`DYDZDZPDZDZD[@D[D[D\0D\D\D] D]pD]D^D^`D^D_D_D_ D_D_ D_PD_XD_\D_`D_pD_D_D`@D`D`D`D`D`D`D`D`D`DaDa0Da8Da<Da@DaPDaDaDaDaDaDaDaDaDaDaD b D b,D b0D b4D bDDb\D b`DbdD bhDbtD b|Db$"6@!@#@# @#6@46 7P!@5*7P+7,@757677@8@7A8@B@9K8@L8M@:V8W8X@;a8b90c@<l90m9n@=w9x9y@>9: @?: :p@A:p:@B:;@C;;`@D;`;@E;<@F<0@N>0>@P'>(>)@R2>3? 4@S=? >?p?@TH?pI?J@US?T@U@V^@_@``@Xi@`j@k@\t@uAv@]AAP@^APA@fAB@@gB@B@hBB@iBC0@jC0C@kCC@lCD @mD Dp@nDpD@pDE@qEE`@rE`E@vEF@w$F%FP&@x/FP0F1@y:F;F<@zEFFG@G@{PG@QGR@|[G\G]@}fGgH0h@~qH0rHs@|H}H~@HI @I Ip@IpI@IJ@JJ`@J`J@JK@KKP@KPK@KK@KL@@L@L@ L L @LM0@!M0"M#@,M-M.@7M8N 9@BN CNpD@MNpNNO@XNYOZ@cOdO`e@nO`oOp@yOzP{@PPP@PPP@PP@PQ@@Q@Q@QQ@QR0@R0R@RR@RS @S Sp@SpS@S T @TT`@T`T @)T*U+@4U5UP6@?UP@UA@JUKUL@UUVV@W@`V@aVb@kVlVm@vVwW0x@W0W@WW@WX @X Xp@XpX@XY@YY`@Y`Y@YZ@ZZP@ZPZ@ZZ@Z[@@[@[@[[@&['\0(@1\02\3@<\=\>@G\H] I@R] S]pT@]]p^]_@h]i^j@s^t^`u@~^`^@^_@__@_`@@`@`b$+Nb( Ĭ( İdbdbdb f <.bD$bD%bD$bD%bD&b' ĴD(bD+c3$$bB@#P_ۀˀ܀!2M^uр &7Sd€Ӏ(C^zɀ'8O`xĀԀ4Teu€ҀKcԀz/EWm}€ڀ5Gdvπ)<]pƀ׀ ,=$Nc0.c0D0c0D1c8D0c<D1cPD2cTD<cpD=cD?cDAcDBcDDcDEcDHcDIcDJcDKdDMd0DOdTDPd`DQddDRdlDSdDUdDXdDYdDZdD[dD\dD]e D`eDDaeHDbePDcedDeeDgeDheDke>$0c0O@/Z@/e68r}@7@8@9ـ;<;@cpe$Nf.fDqfDtf Dqf(Dtf4DwfDDtfHDwfLDtfXDwf\Dzf`D{ftDfDfDfDfDfDfDfDfDfDfDfDfDgDgDg0Dg<DgDDglDgxDgDgDgDgDgDgDgDh Dh,Dh4Dh\DhhDhpDhDhDhDhDhDhDiDiDi$DiLDiXDi`DiDiDiDiDiDiDjDj DjDj<DjHDjPDjxDjDjDjDjDjDjDjDkDk,Dk8Dk@DkhDktDk|DkDkDkDkDkDkDlDl(Dl0DlXDldDllDlDlDlDlDlDlDm DmDm DmHDmPDmXDm|DmDmDmDmDmDmDnDnDn0Dn<DnDDnlDntDn|DnDnDnDnDnDnDoDo$Do,DoTDo`DohDoDoDoDoDoDoDpDpDpDpDDpPDpXDpDpDpDpDpDpDpDqDq Dq4Dq@DqHDqpDq|DqDqDqDqDqDqDqDr$Dr0Dr8Dr`DrlDrtDrDrDrDrDrDrDsDs Ds(DsPDs\DsdDsDsDsDsDsDsDtDtDtDt@DtLDtTDt|DtDtDtDtDtDtDuDuDu0Du<DuDDulDuxDuDuDuDu$qf@q#@,f-f.@7f8f9@BfCfD@MfNfO@XfYfZ@cfdfe@nfofp@yfzf{@ff@ff@ff@fg@gg@gg0@g0g<@g<gD@gDgl@glgx@gxg@gg@g g @gg@gg @)g*g+@4g5g6@?g@h A@Jh Kh,L@Uh,Vh4W@`h4ah\b@kh\lhhm@vhhwhpx@hph@hh@hh@hh@hh@hh@hi@ii@ii$@i$iL@iLiX@iXi`@i`i@ii@ii@&i'i(@1i2i3@<i=i>@GiHjI@RjSj T@]j ^j_@hjij<j@sj<tjHu@~jHjP@jPjx@jxj@jj@jj@jj@jj@jj@jj@jk@kk,@k,k8@k8k@@ k@kh@khkt@#kt$k|%@.k|/k0@9k:k;@DkEkF@OkPkQ@Zk[k\@ekfkg@pkqlr@{l|l(}@l(l0@l0lX@lXld@ldll@lll@ll@ll@ll@ll@ll@lm @m m@ m m @m mH@ mH!mP"@+mP,mX-@6mX7m|8@Am|BmC@LmMmN@WmXmY@bmcmd@mmnmo@xmymz@mn@nn@nn0@n0n<@n<nD@nDnl@nlnt@ntn|@n|n@nn@nn@nn@nn @nn@no@(o)o$*@3o$4o,5@>o,?oT@@IoTJo`K@To`UohV@_oh`oa@jokol@uovow@oo@oo@oo@op@pp@pp@ppD@pDpP@pPpX@pXp@pp@pp@pp@pp@pp@%p&p'@0p1q2@;q<q =@Fq Gq4H@Qq4Rq@S@\q@]qH^@gqHhqpi@rqpsq|t@}q|~q@qq@qq@qq@qq@qq@qq@qr$@r$r0@r0r8@r8r`@r`rl@rlrt@ rt r@rr@"r#r$@-r.r/@8r9r:@CrDrE@NrOsP@YsZs [@ds es(f@os(psPq@zsP{s\|@s\sd@sds@ss@ss@ss@ss@ss@st@tt@tt@tt@@t@tL@ tL tT @tTt|@t| t!@*t+t,@5t6t7@@tAtB@KtLtM@VtWtX@atbuc@lumun@wuxu0y@u0u<@u<uD@uDul@ulux@uxu@uu@uu$Nu( Ĵ LduMduxduf<(uvyy.uDuDuDuDuDuDuDuDvDvDvDvDvDv(Dv0Dv8DvPD v`$u@"@.88Rap€π %6QbyĀՀ*;Whƀ׀,Gb~̀+<Sd|̀܀<M]m}ʀ3K̀܀b-?Ue€Ԁ/L^~ʀ$EX{Ѐ%<0CUg@r}u~@vv0vx€Հ!?cw~‘$Nvx.vD'vD4vD'vD*vD'vD4vD*vD4vD8vD9vD:vD<vD=vD@vDEwDFwDHw DIw8DiwPDQwpDWwDXwD\wD]wD`xDMx0Dbx<D@xpDixDjxDMxDlx’$'v§@&µ@&(@̀<W)8b*<nÁÙòŀ؀eĔ@+Ģ@+ĭĹvĺ@BwwP@Bwp@Owpx0xp@Bxxx$xNx.yDryDvyDry DvyDxy8DzyPD{ypD|yt$ry@q#@q/s8;t<HyIyJ$Ny.yDyDyDyDyDyDyK$yd@p@|8ʼnyŊyŋ$`Ny.yDyDzŌ$yŦ@ů$Nz Ű&(1dz 2dz]dznfo<~ƌxƕ|ƭ%>.zDzDzDzDz$D"z(D z8Dz@DzPDzXDzpDzxDz|DzDzD"zY$zy@Ǎ@ǚDzЀ\vȇ3D^o͈͙ʹŀ1BSdu΍Ξιʀ$UfςϓϪϻր /@\xАСкˀ +;K[kъѫˀ܀ )9IY€ڀK[k{׆ؕzٕ٧ٽπ(:Rd~ڐڭڿ܀,J]ۀۤ۷؀0ARct܅ܖܧܸ@@zz$Nz.zDzDz$z@$Nz.{D0{D4{D0{ D4{DD{DB{(D5{0D6{@D8{DD6{HD8{LD9{`D:{hD9{lD:{pD<{D{D {D<{D>{D?{D>{D8{D{D| D|(D|@D|HD|LD|XD5|hDD|$0{"@/6@1CViݒ@2@3@3{@!@*@9{:{;@H@Q@`{a|hb|c$N|.|DS|D\|DS|DT|DS|D\|DT|D\|D^|D_}D`} Dd} D}$D },De}@D}DD}PD}`D}hD}D}D}D}D }Df}D}D}D}D}D~D~D~ D~D ~(Dg~@D~DD~PD~`D~hD~D~D~D~D ~Dh~Di~Dj~Dk~DD D(D@DHDLDXDnhDpDqDrDsDtDvDyDD{d$S|ނ@Rގ@RޚT8ޤޯT<޺U@ʀVD׀@W@X@X)@X@@YV@Yd|e@r߅ߦ@}$}@@@}D}P@@}P}@@}}@@}}@@}~(@,@5~(6~@7@D@M~DN~PO@\@e~Pf~g@t@}~~~@@h@@0@@0P@@Pp@@p$N.DDDDDDDDDDDDDD0D<DTDXD `DpDDDDDDDDDDDD(DDDPDtDDDDDDDD4DLDdD|DDD$@%@18;<F@VDc@n@|@@⚀⭀Ѐn@wXxpy@@@@$(N.DDDDDDDDDDD(D@DLD`DlDDD DDDDDDDDDDD4DLD`D$@@@8 啀<堀@孀D@@@@@@  @@$`%&'$N.DDDDDDDDDDDDD D D,DDDHD PD`DpDDDDDDDDDD DD4D LD`D ($G@S@_@j8t懀橀T<_@lD|@@@@H`@@@@`$N&N&~+&H&k&x|蚀踀րHddeddf<鵀 8.DD%DD%DD%D(D*D+D,D-D.D/D2 D4D3D4 D3$D4(D30D4@$@T Isꂀ)9Jct﹀ʀ 6GXizπ)Zkۀ#4Ea}Ѐ,<L\l|̀ -JZjzl|ǀ݀/HZr̀߀.IgzԀ+<M^oĀ$NT& 8;WdTXd`d`f<.`D `DpD tDDDDD"D&D"D&D'D(D)D*D-D.D/D0HD1LD0PD1TD6`D7pD<D?D<D?D@DJDUDWDBDCDEDK0DL\DZD]D^D_D` Da8DbdDcpDdxDf|DdDeDfDiDWDkDmDnD9D7(Dq0DrHDsPDt|DuDvDwDDDyDzD}DD}DDDD4DPDpDDDDDDDD D4D<DPDTDXDDD{DzDD$ `@ @ @@`@  #2AP_vӀ$5!:Kfwˀ'?Pk|ŀր4E\mЀ  * B S l }    ̀ ހ     ? `     € ߀    {    $ 4?P5Pbxʀ 9Lk~Ҁ Aexπ&8J\n@!"8@#@$@:@;ۀ)<p@X݀}8@~ @@+, -./$N0d1d\dnfo<~.DD DDD D0DHDLDPDTD`DhDp$@@ˀڀ,Ve -FWpȀـ*;L]u΀߀ =Nj{ـ   ( D ` x    ʀ ۀ !!!/!?!O!_!o!!!π!!"""-"="M"]"ƀ"ހ#O#_#o#'(()}))))Ҁ))**+*=*U*g****€*߀*++,+J+]++++؀+,,,0,A,R,c,t,,,,$N,& ,΀,-!d-"d-Md-_f-`<-o.D DDDDDDD-}$ -@ -@ ?---؀..@.].t..$N. Dz D(Dz,D4Dz8DLDdDDDDDDDD DDDDDDDD$D,D0D4D@DHDLDTDXD\DdDDDDD D4DHDPD`DDDDDDDD DDlDDDDDDDDDD DDD$D(D,D0D4DHDLDTD`DtD.$z .ـ.//@/Q444$4>4O4h4y4444р4455"535D5U5m5~555ƀ5׀566616B6Y6j6666̀6ހ67 7'7?7P7i7z7777ր77888'888W8x8888ʀ8ڀ8999(99::/:@:P>[?l?ɀ@Q@l@~@@@@̀@@AA)A;AUAhAAAÀAB B'B:B]BBBBȀBBCCC1CCCTCeCvCC@yC@yCCǀCDVDiD|DDDˀD݀FG GG2GEGcGGGHH@{HƀHр|XHހ~dHlIIJJ\J!@J-`J;JHJ[JnJJK.KbK}@K@K@KK@K@K@K K@L L L @L8LHL@L+L,L-@L<L= L>@LMLNLOLP$N.DDDDDDD De0D HDND D<@D'`D,DPDUDWDDDDDDD`4Da8DfHDiPDjtDkDmDnDpDqDrDvLQ$Lh@Lv@L@L@L8L@LLȀ<LրHL@LL@MM@kMMMM$HNMd02-@C 5P6bc0 Hn61fJyz `$2N z_n{ ):EXL \m~ 6 H^ $<& \5FXl}$U m' } 4F mTasycy+%<=2 +<MTl_ pPs__dyld_func_lookupdyld_stub_binding_helper__mh_bundle_header_LDAP_Type_attrs_from_List_newLDAPObject_py_ldap_sasl_interaction_LDAPControl_List_DEL_LDAPControls_to_List_LDAP_get_option_LDAP_set_option_LDAPconstant_LDAPerr_LDAPerror_LDAPexception_class_LDAPmessage_to_python_List_to_LDAPControls_PyArg_ParseTuple_PyErr_NoMemory_PyErr_SetObject_PyErr_SetString_PyEval_RestoreThread_PyEval_SaveThread_PyExc_AttributeError_PyExc_TypeError_PyInt_FromLong_PyList_New_PyObject_CallMethod_PyObject_Free_PyObject_GetAttrString_PyObject_Init_PyObject_Malloc_PySequence_Check_PySequence_GetItem_PySequence_Size_PyString_AsString_PyString_FromStringAndSize_PyString_Size_PyString_Type_PyTuple_Type_PyType_IsSubtype_PyType_Type_Py_BuildValue_Py_FatalError_Py_FindMethod__Py_NoneStruct_ldap_abandon_ext_ldap_add_ext_ldap_cancel_ldap_compare_ext_ldap_controls_free_ldap_delete_ext_ldap_modify_ext_ldap_msgfree_ldap_msgid_ldap_parse_result_ldap_passwd_ldap_rename_ldap_result_ldap_sasl_bind_ldap_sasl_interactive_bind_s_ldap_search_ext_ldap_set_option_ldap_start_tls_s_ldap_unbind_ext_ldap_whoami_s_malloc_memcpy_set_timeval_from_double_snprintf$LDBL128_strdup_strlen_LDAPinit_control_LDAPadd_methods_ber_alloc_t_ber_flatten_ber_free_ber_init_ber_printf_ber_scanf_ldap_put_vrFilter_PyCFunction_NewEx_PyDict_SetItemString_LDAPinit_constants_PyDict_New_PyDict_SetItem_PyErr_Clear_PyObject_GetItem_PyString_FromString_LDAPinit_errors_PyErr_NewException_PyErr_SetFromErrno_PyErr_SetNone_ldap_err2string_ldap_get_option_ldap_memfree_LDAPinit_functions_PyList_Append_ldap_bv2dn_ldap_dnfree_ldap_initialize_LDAPinit_schema_c_string_array_to_python_schema_extension_to_python_PyList_SetItem_PyTuple_New_PyTuple_SetItem_ldap_attributetype_free_ldap_matchingrule_free_ldap_objectclass_free_ldap_str2attributetype_ldap_str2matchingrule_ldap_str2objectclass_ldap_str2syntax_ldap_syntax_free_init_ldap_LDAPinit_version_PyErr_Occurred_PyModule_GetDict_Py_InitModule4_PyMapping_GetItemString_PyMapping_HasKeyString_PyMapping_SetItemString_ber_memvfree_ldap_first_attribute_ldap_first_entry_ldap_first_reference_ldap_get_dn_ldap_get_values_len_ldap_next_attribute_ldap_next_entry_ldap_next_reference_ldap_parse_reference_ldap_value_free_len_PyArg_Parse_PyExc_ValueError_PyFloat_FromDouble_PyObject_IsTrue_ber_pvt_opt_on_floor_fmoddyld__mach_header/Users/tkurbad/projects/python-ldap-2.3.1/Modules/LDAPObject.cgcc2_compiled.:t(0,1)=(0,1)_dealloc_getattr_setattr_methods_l_ldap_unbind_ext_l_ldap_abandon_ext_l_ldap_add_ext_l_ldap_simple_bind_l_ldap_sasl_interactive_bind_s_l_ldap_compare_ext_l_ldap_delete_ext_l_ldap_modify_ext_l_ldap_rename_l_ldap_result3_l_ldap_search_ext_l_ldap_start_tls_s_l_ldap_whoami_s_l_ldap_passwd_l_ldap_set_option_l_ldap_get_option_l_ldap_cancelnewLDAPObject:F(0,2)l:P(0,3)self:r(0,2):t(0,2)=*(0,4):t(0,3)=*(0,5)LDAPObject:t(0,4)=(0,6):t(0,5)=(0,7):T(0,6)=s20ob_refcnt:(0,8),0,32;ob_type:(0,9),32,32;ldap:(0,3),64,32;_save:(0,10),96,32;valid:(0,8),128,32;;:t(0,7)=xsldap:int:t(0,8)=r(0,8);-2147483648;2147483647;:t(0,9)=*(0,12):t(0,11)=*(0,13)_threadstate:t(0,10)=(0,11)_typeobject:T(0,12)=s192ob_refcnt:(0,8),0,32;ob_type:(0,9),32,32;ob_size:(0,8),64,32;tp_name:(0,14),96,32;tp_basicsize:(0,8),128,32;tp_itemsize:(0,8),160,32;tp_dealloc:(0,15),192,32;tp_print:(0,17),224,32;tp_getattr:(0,19),256,32;tp_setattr:(0,21),288,32;tp_compare:(0,23),320,32;tp_repr:(0,25),352,32;tp_as_number:(0,27),384,32;tp_as_sequence:(0,28),416,32;tp_as_mapping:(0,29),448,32;tp_hash:(0,30),480,32;tp_call:(0,32),512,32;tp_str:(0,25),544,32;tp_getattro:(0,34),576,32;tp_setattro:(0,36),608,32;tp_as_buffer:(0,38),640,32;tp_flags:(0,39),672,32;tp_doc:(0,14),704,32;tp_traverse:(0,40),736,32;tp_clear:(0,42),768,32;tp_richcompare:(0,44),800,32;tp_weaklistoffset:(0,39),832,32;tp_iter:(0,46),864,32;tp_iternext:(0,47),896,32;tp_methods:(0,48),928,32;tp_members:(0,49),960,32;tp_getset:(0,50),992,32;tp_base:(0,9),1024,32;tp_dict:(0,51),1056,32;tp_descr_get:(0,52),1088,32;tp_descr_set:(0,53),1120,32;tp_dictoffset:(0,39),1152,32;tp_init:(0,54),1184,32;tp_alloc:(0,55),1216,32;tp_new:(0,57),1248,32;tp_free:(0,59),1280,32;tp_is_gc:(0,42),1312,32;tp_bases:(0,51),1344,32;tp_mro:(0,51),1376,32;tp_cache:(0,51),1408,32;tp_subclasses:(0,51),1440,32;tp_weaklist:(0,51),1472,32;tp_del:(0,15),1504,32;;PyThreadState:t(0,13)=(0,61):t(0,14)=*(0,62):t(0,16)=*(0,63)destructor:t(0,15)=(0,16):t(0,18)=*(0,64)printfunc:t(0,17)=(0,18):t(0,20)=*(0,65)getattrfunc:t(0,19)=(0,20):t(0,22)=*(0,66)setattrfunc:t(0,21)=(0,22):t(0,24)=*(0,67)cmpfunc:t(0,23)=(0,24):t(0,26)=*(0,68)reprfunc:t(0,25)=(0,26):t(0,27)=*(0,69):t(0,28)=*(0,70):t(0,29)=*(0,71):t(0,31)=*(0,72)hashfunc:t(0,30)=(0,31):t(0,33)=*(0,73)ternaryfunc:t(0,32)=(0,33):t(0,35)=*(0,74)getattrofunc:t(0,34)=(0,35):t(0,37)=*(0,75)setattrofunc:t(0,36)=(0,37):t(0,38)=*(0,76)long int:t(0,39)=r(0,39);-2147483648;2147483647;:t(0,41)=*(0,77)traverseproc:t(0,40)=(0,41):t(0,43)=*(0,78)inquiry:t(0,42)=(0,43):t(0,45)=*(0,79)richcmpfunc:t(0,44)=(0,45)getiterfunc:t(0,46)=(0,26)iternextfunc:t(0,47)=(0,26):t(0,48)=*(0,80):t(0,49)=*(0,81):t(0,50)=*(0,82):t(0,51)=*(0,83)descrgetfunc:t(0,52)=(0,33)descrsetfunc:t(0,53)=(0,37)initproc:t(0,54)=(0,37):t(0,56)=*(0,84)allocfunc:t(0,55)=(0,56):t(0,58)=*(0,85)newfunc:t(0,57)=(0,58):t(0,60)=*(0,86)freefunc:t(0,59)=(0,60)_ts:T(0,61)=s84next:(0,87),0,32;interp:(0,88),32,32;frame:(0,89),64,32;recursion_depth:(0,8),96,32;tracing:(0,8),128,32;use_tracing:(0,8),160,32;c_profilefunc:(0,90),192,32;c_tracefunc:(0,90),224,32;c_profileobj:(0,51),256,32;c_traceobj:(0,51),288,32;curexc_type:(0,51),320,32;curexc_value:(0,51),352,32;curexc_traceback:(0,51),384,32;exc_type:(0,51),416,32;exc_value:(0,51),448,32;exc_traceback:(0,51),480,32;dict:(0,51),512,32;tick_counter:(0,8),544,32;gilstate_counter:(0,8),576,32;async_exc:(0,51),608,32;thread_id:(0,39),640,32;;char:t(0,62)=r(0,62);0;127;:t(0,63)=f(0,1):t(0,64)=f(0,8):t(0,65)=f(0,51):t(0,66)=f(0,8):t(0,67)=f(0,8):t(0,68)=f(0,51)PyNumberMethods:t(0,69)=(0,92)PySequenceMethods:t(0,70)=(0,93)PyMappingMethods:t(0,71)=(0,94):t(0,72)=f(0,39):t(0,73)=f(0,51):t(0,74)=f(0,51):t(0,75)=f(0,8)PyBufferProcs:t(0,76)=(0,95):t(0,77)=f(0,8):t(0,78)=f(0,8):t(0,79)=f(0,51)PyMethodDef:T(0,80)=s16ml_name:(0,14),0,32;ml_meth:(0,96),32,32;ml_flags:(0,8),64,32;ml_doc:(0,14),96,32;;:t(0,81)=xsPyMemberDef:PyGetSetDef:T(0,82)=s20name:(0,14),0,32;get:(0,97),32,32;set:(0,99),64,32;doc:(0,14),96,32;closure:(0,101),128,32;;PyObject:t(0,83)=(0,102):t(0,84)=f(0,51):t(0,85)=f(0,51):t(0,86)=f(0,1):t(0,87)=*(0,61):t(0,88)=*(0,103):t(0,89)=*(0,104):t(0,91)=*(0,105)Py_tracefunc:t(0,90)=(0,91):T(0,92)=s152nb_add:(0,106),0,32;nb_subtract:(0,106),32,32;nb_multiply:(0,106),64,32;nb_divide:(0,106),96,32;nb_remainder:(0,106),128,32;nb_divmod:(0,106),160,32;nb_power:(0,32),192,32;nb_negative:(0,107),224,32;nb_positive:(0,107),256,32;nb_absolute:(0,107),288,32;nb_nonzero:(0,42),320,32;nb_invert:(0,107),352,32;nb_lshift:(0,106),384,32;nb_rshift:(0,106),416,32;nb_and:(0,106),448,32;nb_xor:(0,106),480,32;nb_or:(0,106),512,32;nb_coerce:(0,108),544,32;nb_int:(0,107),576,32;nb_long:(0,107),608,32;nb_float:(0,107),640,32;nb_oct:(0,107),672,32;nb_hex:(0,107),704,32;nb_inplace_add:(0,106),736,32;nb_inplace_subtract:(0,106),768,32;nb_inplace_multiply:(0,106),800,32;nb_inplace_divide:(0,106),832,32;nb_inplace_remainder:(0,106),864,32;nb_inplace_power:(0,32),896,32;nb_inplace_lshift:(0,106),928,32;nb_inplace_rshift:(0,106),960,32;nb_inplace_and:(0,106),992,32;nb_inplace_xor:(0,106),1024,32;nb_inplace_or:(0,106),1056,32;nb_floor_divide:(0,106),1088,32;nb_true_divide:(0,106),1120,32;nb_inplace_floor_divide:(0,106),1152,32;nb_inplace_true_divide:(0,106),1184,32;;:T(0,93)=s40sq_length:(0,42),0,32;sq_concat:(0,106),32,32;sq_repeat:(0,110),64,32;sq_item:(0,110),96,32;sq_slice:(0,112),128,32;sq_ass_item:(0,114),160,32;sq_ass_slice:(0,116),192,32;sq_contains:(0,118),224,32;sq_inplace_concat:(0,106),256,32;sq_inplace_repeat:(0,110),288,32;;:T(0,94)=s12mp_length:(0,42),0,32;mp_subscript:(0,106),32,32;mp_ass_subscript:(0,119),64,32;;:T(0,95)=s16bf_getreadbuffer:(0,120),0,32;bf_getwritebuffer:(0,122),32,32;bf_getsegcount:(0,123),64,32;bf_getcharbuffer:(0,125),96,32;;PyCFunction:t(0,96)=(0,35):t(0,98)=*(0,127)getter:t(0,97)=(0,98):t(0,100)=*(0,128)setter:t(0,99)=(0,100):t(0,101)=*(0,1)_object:T(0,102)=s8ob_refcnt:(0,8),0,32;ob_type:(0,9),32,32;;PyInterpreterState:t(0,103)=(0,129):t(0,104)=xs_frame::t(0,105)=f(0,8)binaryfunc:t(0,106)=(0,35)unaryfunc:t(0,107)=(0,26):t(0,109)=*(0,130)coercion:t(0,108)=(0,109):t(0,111)=*(0,131)intargfunc:t(0,110)=(0,111):t(0,113)=*(0,132)intintargfunc:t(0,112)=(0,113):t(0,115)=*(0,133)intobjargproc:t(0,114)=(0,115):t(0,117)=*(0,134)intintobjargproc:t(0,116)=(0,117)objobjproc:t(0,118)=(0,24)objobjargproc:t(0,119)=(0,37):t(0,121)=*(0,135)getreadbufferproc:t(0,120)=(0,121)getwritebufferproc:t(0,122)=(0,121):t(0,124)=*(0,136)getsegcountproc:t(0,123)=(0,124):t(0,126)=*(0,137)getcharbufferproc:t(0,125)=(0,126):t(0,127)=f(0,51):t(0,128)=f(0,8)_is:T(0,129)=s36next:(0,138),0,32;tstate_head:(0,87),32,32;modules:(0,51),64,32;sysdict:(0,51),96,32;builtins:(0,51),128,32;codec_search_path:(0,51),160,32;codec_search_cache:(0,51),192,32;codec_error_registry:(0,51),224,32;dlopenflags:(0,8),256,32;;:t(0,130)=f(0,8):t(0,131)=f(0,51):t(0,132)=f(0,51):t(0,133)=f(0,8):t(0,134)=f(0,8):t(0,135)=f(0,8):t(0,136)=f(0,8):t(0,137)=f(0,8):t(0,138)=*(0,129)dealloc:f(0,1)self:P(0,2)_save:r(0,10)_save:r(0,10)py_ldap_sasl_interaction:F(0,8)ld:P(0,3)flags:P(0,139)defaults:P(0,101)in:P(0,101)interact:r(0,140)rc:r(0,8)int:t(0,8)unsigned int:t(0,139)=r(0,139);0;037777777777;:t(0,140)=*(0,141)sasl_interact_t:t(0,141)=(0,142)sasl_interact:T(0,142)=s24id:(0,143),0,32;challenge:(0,144),32,32;prompt:(0,144),64,32;defresult:(0,144),96,32;result:(0,145),128,32;len:(0,139),160,32;;long unsigned int:t(0,143)=r(0,143);0;037777777777;:t(0,144)=*(0,146):t(0,145)=*(0,147):t(0,146)=k(0,62):t(0,147)=k(0,1)result:r(0,51)c_result:r(0,14)char:t(0,62)rc:r(0,8)l_ldap_cancel:f(0,51)self:P(0,2)args:P(0,51)msgid:(0,8)cancelid:(0,8)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)ldaperror:r(0,8):t(0,148)=*(0,149):t(0,149)=*(0,150)LDAPControl:t(0,150)=(0,151)ldapcontrol:T(0,151)=s16ldctl_oid:(0,14),0,32;ldctl_value:(0,152),32,64;ldctl_iscritical:(0,62),96,8;;berval:T(0,152)=s8bv_len:(0,153),0,32;bv_val:(0,14),32,32;;ber_len_t:t(0,153)=(0,143)_save:r(0,10)_save:r(0,10)l_ldap_whoami_s:f(0,51)self:P(0,2)args:P(0,51)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)bvalue:(0,154):t(0,154)=*(0,152)result:r(0,51)ldaperror:r(0,8)_save:r(0,10)_save:r(0,10)l_ldap_set_option:f(0,51)self:P(0,51)args:P(0,51)value:(0,51)option:(0,8)l_ldap_get_option:f(0,51)self:P(0,51)args:P(0,51)option:(0,8)getattr:f(0,51)self:P(0,2)name:P(0,14)setattr:f(0,8)self:P(0,2)name:P(0,14)value:P(0,51)attrs_from_List:F(0,8)attrlist:P(0,51)attrsp:P(0,155)attrs:r(0,156):t(0,155)=*(0,156):t(0,156)=*(0,14)i:r(0,157)Py_ssize_t:t(0,157)=(0,8)len:r(0,157)item:r(0,51)void:t(0,1)l_ldap_unbind_ext:f(0,51)self:P(0,2)args:P(0,51)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)ldaperror:r(0,8)_save:r(0,10)_save:r(0,10)l_ldap_abandon_ext:f(0,51)self:P(0,2)args:P(0,51)msgid:(0,8)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)ldaperror:r(0,8)_save:r(0,10)_save:r(0,10)l_ldap_simple_bind:f(0,51)self:P(0,2)args:P(0,51)who:(0,14)msgid:(0,8)ldaperror:r(0,8)cred_len:(0,157)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)cred:(0,152)_save:r(0,10)_save:r(0,10)_sasl_flags.8803l_ldap_sasl_interactive_bind_s:f(0,51)self:P(0,2)args:P(0,51)c_mechanism:r(0,14)who:(0,14)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)SASLObject:(0,51)mechanism:r(0,51)msgid:r(0,8)sasl_flags:V(0,139)unsigned int:t(0,139)l_ldap_compare_ext:f(0,51)self:P(0,2)args:P(0,51)dn:(0,14)attr:(0,14)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)msgid:(0,8)ldaperror:r(0,8)value_len:(0,157)value:(0,152)_save:r(0,10)_save:r(0,10)l_ldap_delete_ext:f(0,51)self:P(0,2)args:P(0,51)dn:(0,14)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)msgid:(0,8)ldaperror:r(0,8)_save:r(0,10)_save:r(0,10)l_ldap_rename:f(0,51)self:P(0,2)args:P(0,51)dn:(0,14)newrdn:(0,14)newSuperior:(0,14)delold:(0,8)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)msgid:(0,8)ldaperror:r(0,8)_save:r(0,10)_save:r(0,10)l_ldap_result3:f(0,51)self:P(0,2)args:P(0,51)msgid:(0,8)all:(0,8)timeout:(0,158)double:t(0,158)=r(0,8);8;0;tv:(0,159)timeval:T(0,159)=s8tv_sec:(0,160),0,32;tv_usec:(0,161),32,32;;__darwin_time_t:t(0,160)=(0,39)__int32_t:t(0,162)=(0,8)__darwin_suseconds_t:t(0,161)=(0,162)tvp:r(0,163):t(0,163)=*(0,159)res_type:r(0,8)msg:(0,164)result_str:r(0,51)retval:r(0,51)pmsg:r(0,51)pyctrls:r(0,51)res_msgid:r(0,8):t(0,164)=*(0,165):t(0,165)=(0,166):t(0,166)=xsldapmsg:_save:r(0,10)_save:r(0,10)result:(0,8)refs:(0,156)serverctrls:(0,148)_save:r(0,10)e:r(0,14)err:(0,167)err:(0,8):t(0,167)=ar(0,168);0;1023;(0,62)long unsigned int:t(0,168)=r(0,168);0;037777777777;pNewList:r(0,51)l_ldap_search_ext:f(0,51)self:P(0,2)args:P(0,51)base:(0,14)scope:(0,8)filter:(0,14)attrlist:(0,51)attrs:(0,156)attrsonly:(0,8)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)timeout:(0,158)tv:(0,159)tvp:r(0,163)sizelimit:(0,8)msgid:(0,8)ldaperror:r(0,8)_save:r(0,10)_save:r(0,10)attrs:r(0,156)l_ldap_start_tls_s:f(0,51)self:P(0,2)args:P(0,51)result:(0,8)l_ldap_passwd:f(0,51)self:P(0,2)args:P(0,51)user:(0,152)user_len:(0,157)oldpw:(0,152)oldpw_len:(0,157)newpw:(0,152)newpw_len:(0,157)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)msgid:(0,8)ldaperror:r(0,8)_save:r(0,10)_save:r(0,10)_List_to_LDAPModsList_to_LDAPMods:f(0,169)list:P(0,51)no_op:P(0,8)i:r(0,157):t(0,169)=*(0,170):t(0,170)=*(0,171)LDAPMod:t(0,171)=(0,172)ldapmod:T(0,172)=s12mod_op:(0,8),0,32;mod_type:(0,14),32,32;mod_vals:(0,173),64,32;;mod_vals_u:T(0,173)=u4modv_strvals:(0,156),0,32;modv_bvals:(0,174),0,32;;:t(0,174)=*(0,154)len:r(0,157)lms:r(0,169)item:r(0,51)op:(0,8)type:(0,14)list:(0,51)item:r(0,51)i:r(0,157)nstrs:r(0,157)lm:r(0,170)lm:r(0,170)l_ldap_add_ext:f(0,51)self:P(0,2)args:P(0,51)dn:(0,14)modlist:(0,51)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)msgid:(0,8)ldaperror:r(0,8)mods:r(0,169)_save:r(0,10)_save:r(0,10)l_ldap_modify_ext:f(0,51)self:P(0,2)args:P(0,51)dn:(0,14)modlist:(0,51)serverctrls:(0,51)clientctrls:(0,51)server_ldcs:r(0,148)client_ldcs:r(0,148)msgid:(0,8)ldaperror:r(0,8)mods:r(0,169)_save:r(0,10)_save:r(0,10)methods:S(0,175)LDAP_Type:G(0,176)=xsPyTypeObject::t(0,175)=ar(0,168);0;17;(0,177)PyTypeObject:t(0,176)=(0,12)PyMethodDef:t(0,177)=(0,80)/Users/tkurbad/projects/python-ldap-2.3.1/Modules/ldapcontrol.cgcc2_compiled.:t(0,1)=(0,1)_methods_encode_rfc2696_decode_rfc2696_encode_rfc3876LDAPControls_to_List:F(0,2)ldcs:P(0,3)res:r(0,2)pyctrl:r(0,2)tmp:r(0,3)num_ctrls:r(0,4)Py_ssize_t:t(0,4)=(0,5):t(0,2)=*(0,6):t(0,3)=*(0,7)int:t(0,5)=r(0,5);-2147483648;2147483647;PyObject:t(0,6)=(0,8):t(0,7)=*(0,9)_object:T(0,8)=s8ob_refcnt:(0,5),0,32;ob_type:(0,10),32,32;;LDAPControl:t(0,9)=(0,11):t(0,10)=*(0,12)ldapcontrol:T(0,11)=s16ldctl_oid:(0,13),0,32;ldctl_value:(0,14),32,64;ldctl_iscritical:(0,15),96,8;;_typeobject:T(0,12)=s192ob_refcnt:(0,5),0,32;ob_type:(0,10),32,32;ob_size:(0,5),64,32;tp_name:(0,13),96,32;tp_basicsize:(0,5),128,32;tp_itemsize:(0,5),160,32;tp_dealloc:(0,16),192,32;tp_print:(0,18),224,32;tp_getattr:(0,20),256,32;tp_setattr:(0,22),288,32;tp_compare:(0,24),320,32;tp_repr:(0,26),352,32;tp_as_number:(0,28),384,32;tp_as_sequence:(0,29),416,32;tp_as_mapping:(0,30),448,32;tp_hash:(0,31),480,32;tp_call:(0,33),512,32;tp_str:(0,26),544,32;tp_getattro:(0,35),576,32;tp_setattro:(0,37),608,32;tp_as_buffer:(0,39),640,32;tp_flags:(0,40),672,32;tp_doc:(0,13),704,32;tp_traverse:(0,41),736,32;tp_clear:(0,43),768,32;tp_richcompare:(0,45),800,32;tp_weaklistoffset:(0,40),832,32;tp_iter:(0,47),864,32;tp_iternext:(0,48),896,32;tp_methods:(0,49),928,32;tp_members:(0,50),960,32;tp_getset:(0,51),992,32;tp_base:(0,10),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,52),1088,32;tp_descr_set:(0,53),1120,32;tp_dictoffset:(0,40),1152,32;tp_init:(0,54),1184,32;tp_alloc:(0,55),1216,32;tp_new:(0,57),1248,32;tp_free:(0,59),1280,32;tp_is_gc:(0,43),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,16),1504,32;;:t(0,13)=*(0,15)berval:T(0,14)=s8bv_len:(0,61),0,32;bv_val:(0,13),32,32;;char:t(0,15)=r(0,15);0;127;:t(0,17)=*(0,63)destructor:t(0,16)=(0,17):t(0,19)=*(0,64)printfunc:t(0,18)=(0,19):t(0,21)=*(0,65)getattrfunc:t(0,20)=(0,21):t(0,23)=*(0,66)setattrfunc:t(0,22)=(0,23):t(0,25)=*(0,67)cmpfunc:t(0,24)=(0,25):t(0,27)=*(0,68)reprfunc:t(0,26)=(0,27):t(0,28)=*(0,69):t(0,29)=*(0,70):t(0,30)=*(0,71):t(0,32)=*(0,72)hashfunc:t(0,31)=(0,32):t(0,34)=*(0,73)ternaryfunc:t(0,33)=(0,34):t(0,36)=*(0,74)getattrofunc:t(0,35)=(0,36):t(0,38)=*(0,75)setattrofunc:t(0,37)=(0,38):t(0,39)=*(0,76)long int:t(0,40)=r(0,40);-2147483648;2147483647;:t(0,42)=*(0,77)traverseproc:t(0,41)=(0,42):t(0,44)=*(0,78)inquiry:t(0,43)=(0,44):t(0,46)=*(0,79)richcmpfunc:t(0,45)=(0,46)getiterfunc:t(0,47)=(0,27)iternextfunc:t(0,48)=(0,27):t(0,49)=*(0,80):t(0,50)=*(0,81):t(0,51)=*(0,82)descrgetfunc:t(0,52)=(0,34)descrsetfunc:t(0,53)=(0,38)initproc:t(0,54)=(0,38):t(0,56)=*(0,83)allocfunc:t(0,55)=(0,56):t(0,58)=*(0,84)newfunc:t(0,57)=(0,58):t(0,60)=*(0,85)freefunc:t(0,59)=(0,60)long unsigned int:t(0,62)=r(0,62);0;037777777777;ber_len_t:t(0,61)=(0,62):t(0,63)=f(0,1):t(0,64)=f(0,5):t(0,65)=f(0,2):t(0,66)=f(0,5):t(0,67)=f(0,5):t(0,68)=f(0,2)PyNumberMethods:t(0,69)=(0,86)PySequenceMethods:t(0,70)=(0,87)PyMappingMethods:t(0,71)=(0,88):t(0,72)=f(0,40):t(0,73)=f(0,2):t(0,74)=f(0,2):t(0,75)=f(0,5)PyBufferProcs:t(0,76)=(0,89):t(0,77)=f(0,5):t(0,78)=f(0,5):t(0,79)=f(0,2)PyMethodDef:T(0,80)=s16ml_name:(0,13),0,32;ml_meth:(0,90),32,32;ml_flags:(0,5),64,32;ml_doc:(0,13),96,32;;:t(0,81)=xsPyMemberDef:PyGetSetDef:T(0,82)=s20name:(0,13),0,32;get:(0,91),32,32;set:(0,93),64,32;doc:(0,13),96,32;closure:(0,95),128,32;;:t(0,83)=f(0,2):t(0,84)=f(0,2):t(0,85)=f(0,1):T(0,86)=s152nb_add:(0,96),0,32;nb_subtract:(0,96),32,32;nb_multiply:(0,96),64,32;nb_divide:(0,96),96,32;nb_remainder:(0,96),128,32;nb_divmod:(0,96),160,32;nb_power:(0,33),192,32;nb_negative:(0,97),224,32;nb_positive:(0,97),256,32;nb_absolute:(0,97),288,32;nb_nonzero:(0,43),320,32;nb_invert:(0,97),352,32;nb_lshift:(0,96),384,32;nb_rshift:(0,96),416,32;nb_and:(0,96),448,32;nb_xor:(0,96),480,32;nb_or:(0,96),512,32;nb_coerce:(0,98),544,32;nb_int:(0,97),576,32;nb_long:(0,97),608,32;nb_float:(0,97),640,32;nb_oct:(0,97),672,32;nb_hex:(0,97),704,32;nb_inplace_add:(0,96),736,32;nb_inplace_subtract:(0,96),768,32;nb_inplace_multiply:(0,96),800,32;nb_inplace_divide:(0,96),832,32;nb_inplace_remainder:(0,96),864,32;nb_inplace_power:(0,33),896,32;nb_inplace_lshift:(0,96),928,32;nb_inplace_rshift:(0,96),960,32;nb_inplace_and:(0,96),992,32;nb_inplace_xor:(0,96),1024,32;nb_inplace_or:(0,96),1056,32;nb_floor_divide:(0,96),1088,32;nb_true_divide:(0,96),1120,32;nb_inplace_floor_divide:(0,96),1152,32;nb_inplace_true_divide:(0,96),1184,32;;:T(0,87)=s40sq_length:(0,43),0,32;sq_concat:(0,96),32,32;sq_repeat:(0,100),64,32;sq_item:(0,100),96,32;sq_slice:(0,102),128,32;sq_ass_item:(0,104),160,32;sq_ass_slice:(0,106),192,32;sq_contains:(0,108),224,32;sq_inplace_concat:(0,96),256,32;sq_inplace_repeat:(0,100),288,32;;:T(0,88)=s12mp_length:(0,43),0,32;mp_subscript:(0,96),32,32;mp_ass_subscript:(0,109),64,32;;:T(0,89)=s16bf_getreadbuffer:(0,110),0,32;bf_getwritebuffer:(0,112),32,32;bf_getsegcount:(0,113),64,32;bf_getcharbuffer:(0,115),96,32;;PyCFunction:t(0,90)=(0,36):t(0,92)=*(0,117)getter:t(0,91)=(0,92):t(0,94)=*(0,118)setter:t(0,93)=(0,94):t(0,95)=*(0,1)binaryfunc:t(0,96)=(0,36)unaryfunc:t(0,97)=(0,27):t(0,99)=*(0,119)coercion:t(0,98)=(0,99):t(0,101)=*(0,120)intargfunc:t(0,100)=(0,101):t(0,103)=*(0,121)intintargfunc:t(0,102)=(0,103):t(0,105)=*(0,122)intobjargproc:t(0,104)=(0,105):t(0,107)=*(0,123)intintobjargproc:t(0,106)=(0,107)objobjproc:t(0,108)=(0,25)objobjargproc:t(0,109)=(0,38):t(0,111)=*(0,124)getreadbufferproc:t(0,110)=(0,111)getwritebufferproc:t(0,112)=(0,111):t(0,114)=*(0,125)getsegcountproc:t(0,113)=(0,114):t(0,116)=*(0,126)getcharbufferproc:t(0,115)=(0,116):t(0,117)=f(0,2):t(0,118)=f(0,5):t(0,119)=f(0,5):t(0,120)=f(0,2):t(0,121)=f(0,2):t(0,122)=f(0,5):t(0,123)=f(0,5):t(0,124)=f(0,5):t(0,125)=f(0,5):t(0,126)=f(0,5)i:r(0,4)void:t(0,1)encode_rfc3876:f(0,2)self:P(0,2)args:P(0,2)res:r(0,2)int:t(0,5)vrber:r(0,127)vrFilter:(0,13)char:t(0,15):t(0,127)=*(0,128):t(0,128)=(0,129):t(0,129)=xsberelement:ctrl_val:(0,130):t(0,130)=*(0,14)encode_rfc2696:f(0,2)self:P(0,2)args:P(0,2)res:r(0,2)ber:r(0,127)cookie:(0,14)ctrl_val:(0,130)size:(0,62)long unsigned int:t(0,62)tag:r(0,131)ber_tag_t:t(0,131)=(0,62)decode_rfc2696:f(0,2)self:P(0,2)args:P(0,2)res:r(0,2)ber:r(0,127)ldctl_value:(0,14)cookiep:(0,130)count:(0,62)LDAPinit_control:F(0,1)d:P(0,2)LDAPControl_List_DEL:F(0,1)lcs:P(0,3)lcp:r(0,3)List_to_LDAPControls:F(0,3)list:P(0,2)len:r(0,4)i:r(0,4)ldcs:r(0,3)item:r(0,2)oid:(0,13)iscritical:(0,15)bytes:(0,2)oid:(0,13)iscritical:(0,15)bytes:(0,2)methods:S(0,132):t(0,132)=ar(0,133);0;3;(0,134)long unsigned int:t(0,133)=r(0,133);0;037777777777;PyMethodDef:t(0,134)=(0,80)/Users/tkurbad/projects/python-ldap-2.3.1/Modules/common.cgcc2_compiled.:t(0,1)=(0,1)LDAPadd_methods:F(0,1)d:P(0,2)methods:P(0,3)meth:r(0,3)f:r(0,2):t(0,2)=*(0,4):t(0,3)=*(0,5)PyObject:t(0,4)=(0,6)PyMethodDef:t(0,5)=(0,7)_object:T(0,6)=s8ob_refcnt:(0,8),0,32;ob_type:(0,9),32,32;;PyMethodDef:T(0,7)=s16ml_name:(0,10),0,32;ml_meth:(0,11),32,32;ml_flags:(0,8),64,32;ml_doc:(0,10),96,32;;int:t(0,8)=r(0,8);-2147483648;2147483647;:t(0,9)=*(0,13):t(0,10)=*(0,14):t(0,12)=*(0,15)PyCFunction:t(0,11)=(0,12)_typeobject:T(0,13)=s192ob_refcnt:(0,8),0,32;ob_type:(0,9),32,32;ob_size:(0,8),64,32;tp_name:(0,10),96,32;tp_basicsize:(0,8),128,32;tp_itemsize:(0,8),160,32;tp_dealloc:(0,16),192,32;tp_print:(0,18),224,32;tp_getattr:(0,20),256,32;tp_setattr:(0,22),288,32;tp_compare:(0,24),320,32;tp_repr:(0,26),352,32;tp_as_number:(0,28),384,32;tp_as_sequence:(0,29),416,32;tp_as_mapping:(0,30),448,32;tp_hash:(0,31),480,32;tp_call:(0,33),512,32;tp_str:(0,26),544,32;tp_getattro:(0,35),576,32;tp_setattro:(0,36),608,32;tp_as_buffer:(0,38),640,32;tp_flags:(0,39),672,32;tp_doc:(0,10),704,32;tp_traverse:(0,40),736,32;tp_clear:(0,42),768,32;tp_richcompare:(0,44),800,32;tp_weaklistoffset:(0,39),832,32;tp_iter:(0,46),864,32;tp_iternext:(0,47),896,32;tp_methods:(0,48),928,32;tp_members:(0,49),960,32;tp_getset:(0,50),992,32;tp_base:(0,9),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,51),1088,32;tp_descr_set:(0,52),1120,32;tp_dictoffset:(0,39),1152,32;tp_init:(0,53),1184,32;tp_alloc:(0,54),1216,32;tp_new:(0,56),1248,32;tp_free:(0,58),1280,32;tp_is_gc:(0,42),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,16),1504,32;;char:t(0,14)=r(0,14);0;127;:t(0,15)=f(0,2):t(0,17)=*(0,60)destructor:t(0,16)=(0,17):t(0,19)=*(0,61)printfunc:t(0,18)=(0,19):t(0,21)=*(0,62)getattrfunc:t(0,20)=(0,21):t(0,23)=*(0,63)setattrfunc:t(0,22)=(0,23):t(0,25)=*(0,64)cmpfunc:t(0,24)=(0,25):t(0,27)=*(0,65)reprfunc:t(0,26)=(0,27):t(0,28)=*(0,66):t(0,29)=*(0,67):t(0,30)=*(0,68):t(0,32)=*(0,69)hashfunc:t(0,31)=(0,32):t(0,34)=*(0,70)ternaryfunc:t(0,33)=(0,34)getattrofunc:t(0,35)=(0,12):t(0,37)=*(0,71)setattrofunc:t(0,36)=(0,37):t(0,38)=*(0,72)long int:t(0,39)=r(0,39);-2147483648;2147483647;:t(0,41)=*(0,73)traverseproc:t(0,40)=(0,41):t(0,43)=*(0,74)inquiry:t(0,42)=(0,43):t(0,45)=*(0,75)richcmpfunc:t(0,44)=(0,45)getiterfunc:t(0,46)=(0,27)iternextfunc:t(0,47)=(0,27):t(0,48)=*(0,7):t(0,49)=*(0,76):t(0,50)=*(0,77)descrgetfunc:t(0,51)=(0,34)descrsetfunc:t(0,52)=(0,37)initproc:t(0,53)=(0,37):t(0,55)=*(0,78)allocfunc:t(0,54)=(0,55):t(0,57)=*(0,79)newfunc:t(0,56)=(0,57):t(0,59)=*(0,80)freefunc:t(0,58)=(0,59):t(0,60)=f(0,1):t(0,61)=f(0,8):t(0,62)=f(0,2):t(0,63)=f(0,8):t(0,64)=f(0,8):t(0,65)=f(0,2)PyNumberMethods:t(0,66)=(0,81)PySequenceMethods:t(0,67)=(0,82)PyMappingMethods:t(0,68)=(0,83):t(0,69)=f(0,39):t(0,70)=f(0,2):t(0,71)=f(0,8)PyBufferProcs:t(0,72)=(0,84):t(0,73)=f(0,8):t(0,74)=f(0,8):t(0,75)=f(0,2):t(0,76)=xsPyMemberDef:PyGetSetDef:T(0,77)=s20name:(0,10),0,32;get:(0,85),32,32;set:(0,87),64,32;doc:(0,10),96,32;closure:(0,89),128,32;;:t(0,78)=f(0,2):t(0,79)=f(0,2):t(0,80)=f(0,1):T(0,81)=s152nb_add:(0,90),0,32;nb_subtract:(0,90),32,32;nb_multiply:(0,90),64,32;nb_divide:(0,90),96,32;nb_remainder:(0,90),128,32;nb_divmod:(0,90),160,32;nb_power:(0,33),192,32;nb_negative:(0,91),224,32;nb_positive:(0,91),256,32;nb_absolute:(0,91),288,32;nb_nonzero:(0,42),320,32;nb_invert:(0,91),352,32;nb_lshift:(0,90),384,32;nb_rshift:(0,90),416,32;nb_and:(0,90),448,32;nb_xor:(0,90),480,32;nb_or:(0,90),512,32;nb_coerce:(0,92),544,32;nb_int:(0,91),576,32;nb_long:(0,91),608,32;nb_float:(0,91),640,32;nb_oct:(0,91),672,32;nb_hex:(0,91),704,32;nb_inplace_add:(0,90),736,32;nb_inplace_subtract:(0,90),768,32;nb_inplace_multiply:(0,90),800,32;nb_inplace_divide:(0,90),832,32;nb_inplace_remainder:(0,90),864,32;nb_inplace_power:(0,33),896,32;nb_inplace_lshift:(0,90),928,32;nb_inplace_rshift:(0,90),960,32;nb_inplace_and:(0,90),992,32;nb_inplace_xor:(0,90),1024,32;nb_inplace_or:(0,90),1056,32;nb_floor_divide:(0,90),1088,32;nb_true_divide:(0,90),1120,32;nb_inplace_floor_divide:(0,90),1152,32;nb_inplace_true_divide:(0,90),1184,32;;:T(0,82)=s40sq_length:(0,42),0,32;sq_concat:(0,90),32,32;sq_repeat:(0,94),64,32;sq_item:(0,94),96,32;sq_slice:(0,96),128,32;sq_ass_item:(0,98),160,32;sq_ass_slice:(0,100),192,32;sq_contains:(0,102),224,32;sq_inplace_concat:(0,90),256,32;sq_inplace_repeat:(0,94),288,32;;:T(0,83)=s12mp_length:(0,42),0,32;mp_subscript:(0,90),32,32;mp_ass_subscript:(0,103),64,32;;:T(0,84)=s16bf_getreadbuffer:(0,104),0,32;bf_getwritebuffer:(0,106),32,32;bf_getsegcount:(0,107),64,32;bf_getcharbuffer:(0,109),96,32;;:t(0,86)=*(0,111)getter:t(0,85)=(0,86):t(0,88)=*(0,112)setter:t(0,87)=(0,88):t(0,89)=*(0,1)binaryfunc:t(0,90)=(0,12)unaryfunc:t(0,91)=(0,27):t(0,93)=*(0,113)coercion:t(0,92)=(0,93):t(0,95)=*(0,114)intargfunc:t(0,94)=(0,95):t(0,97)=*(0,115)intintargfunc:t(0,96)=(0,97):t(0,99)=*(0,116)intobjargproc:t(0,98)=(0,99):t(0,101)=*(0,117)intintobjargproc:t(0,100)=(0,101)objobjproc:t(0,102)=(0,25)objobjargproc:t(0,103)=(0,37):t(0,105)=*(0,118)getreadbufferproc:t(0,104)=(0,105)getwritebufferproc:t(0,106)=(0,105):t(0,108)=*(0,119)getsegcountproc:t(0,107)=(0,108):t(0,110)=*(0,120)getcharbufferproc:t(0,109)=(0,110):t(0,111)=f(0,2):t(0,112)=f(0,8):t(0,113)=f(0,8):t(0,114)=f(0,2):t(0,115)=f(0,2):t(0,116)=f(0,8):t(0,117)=f(0,8):t(0,118)=f(0,8):t(0,119)=f(0,8):t(0,120)=f(0,8)/Users/tkurbad/projects/python-ldap-2.3.1/Modules/constants.cgcc2_compiled.:t(0,1)=(0,1)_reverseLDAPconstant:F(0,2)val:P(0,3)i:r(0,2)s:r(0,2):t(0,2)=*(0,4)int:t(0,3)=r(0,3);-2147483648;2147483647;PyObject:t(0,4)=(0,5)_object:T(0,5)=s8ob_refcnt:(0,3),0,32;ob_type:(0,6),32,32;;:t(0,6)=*(0,7)_typeobject:T(0,7)=s192ob_refcnt:(0,3),0,32;ob_type:(0,6),32,32;ob_size:(0,3),64,32;tp_name:(0,8),96,32;tp_basicsize:(0,3),128,32;tp_itemsize:(0,3),160,32;tp_dealloc:(0,9),192,32;tp_print:(0,11),224,32;tp_getattr:(0,13),256,32;tp_setattr:(0,15),288,32;tp_compare:(0,17),320,32;tp_repr:(0,19),352,32;tp_as_number:(0,21),384,32;tp_as_sequence:(0,22),416,32;tp_as_mapping:(0,23),448,32;tp_hash:(0,24),480,32;tp_call:(0,26),512,32;tp_str:(0,19),544,32;tp_getattro:(0,28),576,32;tp_setattro:(0,30),608,32;tp_as_buffer:(0,32),640,32;tp_flags:(0,33),672,32;tp_doc:(0,8),704,32;tp_traverse:(0,34),736,32;tp_clear:(0,36),768,32;tp_richcompare:(0,38),800,32;tp_weaklistoffset:(0,33),832,32;tp_iter:(0,40),864,32;tp_iternext:(0,41),896,32;tp_methods:(0,42),928,32;tp_members:(0,43),960,32;tp_getset:(0,44),992,32;tp_base:(0,6),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,45),1088,32;tp_descr_set:(0,46),1120,32;tp_dictoffset:(0,33),1152,32;tp_init:(0,47),1184,32;tp_alloc:(0,48),1216,32;tp_new:(0,50),1248,32;tp_free:(0,52),1280,32;tp_is_gc:(0,36),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,9),1504,32;;:t(0,8)=*(0,54):t(0,10)=*(0,55)destructor:t(0,9)=(0,10):t(0,12)=*(0,56)printfunc:t(0,11)=(0,12):t(0,14)=*(0,57)getattrfunc:t(0,13)=(0,14):t(0,16)=*(0,58)setattrfunc:t(0,15)=(0,16):t(0,18)=*(0,59)cmpfunc:t(0,17)=(0,18):t(0,20)=*(0,60)reprfunc:t(0,19)=(0,20):t(0,21)=*(0,61):t(0,22)=*(0,62):t(0,23)=*(0,63):t(0,25)=*(0,64)hashfunc:t(0,24)=(0,25):t(0,27)=*(0,65)ternaryfunc:t(0,26)=(0,27):t(0,29)=*(0,66)getattrofunc:t(0,28)=(0,29):t(0,31)=*(0,67)setattrofunc:t(0,30)=(0,31):t(0,32)=*(0,68)long int:t(0,33)=r(0,33);-2147483648;2147483647;:t(0,35)=*(0,69)traverseproc:t(0,34)=(0,35):t(0,37)=*(0,70)inquiry:t(0,36)=(0,37):t(0,39)=*(0,71)richcmpfunc:t(0,38)=(0,39)getiterfunc:t(0,40)=(0,20)iternextfunc:t(0,41)=(0,20):t(0,42)=*(0,72):t(0,43)=*(0,73):t(0,44)=*(0,74)descrgetfunc:t(0,45)=(0,27)descrsetfunc:t(0,46)=(0,31)initproc:t(0,47)=(0,31):t(0,49)=*(0,75)allocfunc:t(0,48)=(0,49):t(0,51)=*(0,76)newfunc:t(0,50)=(0,51):t(0,53)=*(0,77)freefunc:t(0,52)=(0,53)char:t(0,54)=r(0,54);0;127;:t(0,55)=f(0,1):t(0,56)=f(0,3):t(0,57)=f(0,2):t(0,58)=f(0,3):t(0,59)=f(0,3):t(0,60)=f(0,2)PyNumberMethods:t(0,61)=(0,78)PySequenceMethods:t(0,62)=(0,79)PyMappingMethods:t(0,63)=(0,80):t(0,64)=f(0,33):t(0,65)=f(0,2):t(0,66)=f(0,2):t(0,67)=f(0,3)PyBufferProcs:t(0,68)=(0,81):t(0,69)=f(0,3):t(0,70)=f(0,3):t(0,71)=f(0,2)PyMethodDef:T(0,72)=s16ml_name:(0,8),0,32;ml_meth:(0,82),32,32;ml_flags:(0,3),64,32;ml_doc:(0,8),96,32;;:t(0,73)=xsPyMemberDef:PyGetSetDef:T(0,74)=s20name:(0,8),0,32;get:(0,83),32,32;set:(0,85),64,32;doc:(0,8),96,32;closure:(0,87),128,32;;:t(0,75)=f(0,2):t(0,76)=f(0,2):t(0,77)=f(0,1):T(0,78)=s152nb_add:(0,88),0,32;nb_subtract:(0,88),32,32;nb_multiply:(0,88),64,32;nb_divide:(0,88),96,32;nb_remainder:(0,88),128,32;nb_divmod:(0,88),160,32;nb_power:(0,26),192,32;nb_negative:(0,89),224,32;nb_positive:(0,89),256,32;nb_absolute:(0,89),288,32;nb_nonzero:(0,36),320,32;nb_invert:(0,89),352,32;nb_lshift:(0,88),384,32;nb_rshift:(0,88),416,32;nb_and:(0,88),448,32;nb_xor:(0,88),480,32;nb_or:(0,88),512,32;nb_coerce:(0,90),544,32;nb_int:(0,89),576,32;nb_long:(0,89),608,32;nb_float:(0,89),640,32;nb_oct:(0,89),672,32;nb_hex:(0,89),704,32;nb_inplace_add:(0,88),736,32;nb_inplace_subtract:(0,88),768,32;nb_inplace_multiply:(0,88),800,32;nb_inplace_divide:(0,88),832,32;nb_inplace_remainder:(0,88),864,32;nb_inplace_power:(0,26),896,32;nb_inplace_lshift:(0,88),928,32;nb_inplace_rshift:(0,88),960,32;nb_inplace_and:(0,88),992,32;nb_inplace_xor:(0,88),1024,32;nb_inplace_or:(0,88),1056,32;nb_floor_divide:(0,88),1088,32;nb_true_divide:(0,88),1120,32;nb_inplace_floor_divide:(0,88),1152,32;nb_inplace_true_divide:(0,88),1184,32;;:T(0,79)=s40sq_length:(0,36),0,32;sq_concat:(0,88),32,32;sq_repeat:(0,92),64,32;sq_item:(0,92),96,32;sq_slice:(0,94),128,32;sq_ass_item:(0,96),160,32;sq_ass_slice:(0,98),192,32;sq_contains:(0,100),224,32;sq_inplace_concat:(0,88),256,32;sq_inplace_repeat:(0,92),288,32;;:T(0,80)=s12mp_length:(0,36),0,32;mp_subscript:(0,88),32,32;mp_ass_subscript:(0,101),64,32;;:T(0,81)=s16bf_getreadbuffer:(0,102),0,32;bf_getwritebuffer:(0,104),32,32;bf_getsegcount:(0,105),64,32;bf_getcharbuffer:(0,107),96,32;;PyCFunction:t(0,82)=(0,29):t(0,84)=*(0,109)getter:t(0,83)=(0,84):t(0,86)=*(0,110)setter:t(0,85)=(0,86):t(0,87)=*(0,1)binaryfunc:t(0,88)=(0,29)unaryfunc:t(0,89)=(0,20):t(0,91)=*(0,111)coercion:t(0,90)=(0,91):t(0,93)=*(0,112)intargfunc:t(0,92)=(0,93):t(0,95)=*(0,113)intintargfunc:t(0,94)=(0,95):t(0,97)=*(0,114)intobjargproc:t(0,96)=(0,97):t(0,99)=*(0,115)intintobjargproc:t(0,98)=(0,99)objobjproc:t(0,100)=(0,18)objobjargproc:t(0,101)=(0,31):t(0,103)=*(0,116)getreadbufferproc:t(0,102)=(0,103)getwritebufferproc:t(0,104)=(0,103):t(0,106)=*(0,117)getsegcountproc:t(0,105)=(0,106):t(0,108)=*(0,118)getcharbufferproc:t(0,107)=(0,108):t(0,109)=f(0,2):t(0,110)=f(0,3):t(0,111)=f(0,3):t(0,112)=f(0,2):t(0,113)=f(0,2):t(0,114)=f(0,3):t(0,115)=f(0,3):t(0,116)=f(0,3):t(0,117)=f(0,3):t(0,118)=f(0,3)_forwardLDAPinit_constants:F(0,1)d:P(0,2)zero:r(0,2)author:r(0,2)obj:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)i:r(0,2)reverse:S(0,2)forward:S(0,2)/Users/tkurbad/projects/python-ldap-2.3.1/Modules/errors.cgcc2_compiled.:t(0,1)=(0,1)_errobjectsLDAPerr:F(0,2)errnum:P(0,3):t(0,2)=*(0,4)int:t(0,3)=r(0,3);-2147483648;2147483647;PyObject:t(0,4)=(0,5)_object:T(0,5)=s8ob_refcnt:(0,3),0,32;ob_type:(0,6),32,32;;:t(0,6)=*(0,7)_typeobject:T(0,7)=s192ob_refcnt:(0,3),0,32;ob_type:(0,6),32,32;ob_size:(0,3),64,32;tp_name:(0,8),96,32;tp_basicsize:(0,3),128,32;tp_itemsize:(0,3),160,32;tp_dealloc:(0,9),192,32;tp_print:(0,11),224,32;tp_getattr:(0,13),256,32;tp_setattr:(0,15),288,32;tp_compare:(0,17),320,32;tp_repr:(0,19),352,32;tp_as_number:(0,21),384,32;tp_as_sequence:(0,22),416,32;tp_as_mapping:(0,23),448,32;tp_hash:(0,24),480,32;tp_call:(0,26),512,32;tp_str:(0,19),544,32;tp_getattro:(0,28),576,32;tp_setattro:(0,30),608,32;tp_as_buffer:(0,32),640,32;tp_flags:(0,33),672,32;tp_doc:(0,8),704,32;tp_traverse:(0,34),736,32;tp_clear:(0,36),768,32;tp_richcompare:(0,38),800,32;tp_weaklistoffset:(0,33),832,32;tp_iter:(0,40),864,32;tp_iternext:(0,41),896,32;tp_methods:(0,42),928,32;tp_members:(0,43),960,32;tp_getset:(0,44),992,32;tp_base:(0,6),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,45),1088,32;tp_descr_set:(0,46),1120,32;tp_dictoffset:(0,33),1152,32;tp_init:(0,47),1184,32;tp_alloc:(0,48),1216,32;tp_new:(0,50),1248,32;tp_free:(0,52),1280,32;tp_is_gc:(0,36),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,9),1504,32;;:t(0,8)=*(0,54):t(0,10)=*(0,55)destructor:t(0,9)=(0,10):t(0,12)=*(0,56)printfunc:t(0,11)=(0,12):t(0,14)=*(0,57)getattrfunc:t(0,13)=(0,14):t(0,16)=*(0,58)setattrfunc:t(0,15)=(0,16):t(0,18)=*(0,59)cmpfunc:t(0,17)=(0,18):t(0,20)=*(0,60)reprfunc:t(0,19)=(0,20):t(0,21)=*(0,61):t(0,22)=*(0,62):t(0,23)=*(0,63):t(0,25)=*(0,64)hashfunc:t(0,24)=(0,25):t(0,27)=*(0,65)ternaryfunc:t(0,26)=(0,27):t(0,29)=*(0,66)getattrofunc:t(0,28)=(0,29):t(0,31)=*(0,67)setattrofunc:t(0,30)=(0,31):t(0,32)=*(0,68)long int:t(0,33)=r(0,33);-2147483648;2147483647;:t(0,35)=*(0,69)traverseproc:t(0,34)=(0,35):t(0,37)=*(0,70)inquiry:t(0,36)=(0,37):t(0,39)=*(0,71)richcmpfunc:t(0,38)=(0,39)getiterfunc:t(0,40)=(0,20)iternextfunc:t(0,41)=(0,20):t(0,42)=*(0,72):t(0,43)=*(0,73):t(0,44)=*(0,74)descrgetfunc:t(0,45)=(0,27)descrsetfunc:t(0,46)=(0,31)initproc:t(0,47)=(0,31):t(0,49)=*(0,75)allocfunc:t(0,48)=(0,49):t(0,51)=*(0,76)newfunc:t(0,50)=(0,51):t(0,53)=*(0,77)freefunc:t(0,52)=(0,53)char:t(0,54)=r(0,54);0;127;:t(0,55)=f(0,1):t(0,56)=f(0,3):t(0,57)=f(0,2):t(0,58)=f(0,3):t(0,59)=f(0,3):t(0,60)=f(0,2)PyNumberMethods:t(0,61)=(0,78)PySequenceMethods:t(0,62)=(0,79)PyMappingMethods:t(0,63)=(0,80):t(0,64)=f(0,33):t(0,65)=f(0,2):t(0,66)=f(0,2):t(0,67)=f(0,3)PyBufferProcs:t(0,68)=(0,81):t(0,69)=f(0,3):t(0,70)=f(0,3):t(0,71)=f(0,2)PyMethodDef:T(0,72)=s16ml_name:(0,8),0,32;ml_meth:(0,82),32,32;ml_flags:(0,3),64,32;ml_doc:(0,8),96,32;;:t(0,73)=xsPyMemberDef:PyGetSetDef:T(0,74)=s20name:(0,8),0,32;get:(0,83),32,32;set:(0,85),64,32;doc:(0,8),96,32;closure:(0,87),128,32;;:t(0,75)=f(0,2):t(0,76)=f(0,2):t(0,77)=f(0,1):T(0,78)=s152nb_add:(0,88),0,32;nb_subtract:(0,88),32,32;nb_multiply:(0,88),64,32;nb_divide:(0,88),96,32;nb_remainder:(0,88),128,32;nb_divmod:(0,88),160,32;nb_power:(0,26),192,32;nb_negative:(0,89),224,32;nb_positive:(0,89),256,32;nb_absolute:(0,89),288,32;nb_nonzero:(0,36),320,32;nb_invert:(0,89),352,32;nb_lshift:(0,88),384,32;nb_rshift:(0,88),416,32;nb_and:(0,88),448,32;nb_xor:(0,88),480,32;nb_or:(0,88),512,32;nb_coerce:(0,90),544,32;nb_int:(0,89),576,32;nb_long:(0,89),608,32;nb_float:(0,89),640,32;nb_oct:(0,89),672,32;nb_hex:(0,89),704,32;nb_inplace_add:(0,88),736,32;nb_inplace_subtract:(0,88),768,32;nb_inplace_multiply:(0,88),800,32;nb_inplace_divide:(0,88),832,32;nb_inplace_remainder:(0,88),864,32;nb_inplace_power:(0,26),896,32;nb_inplace_lshift:(0,88),928,32;nb_inplace_rshift:(0,88),960,32;nb_inplace_and:(0,88),992,32;nb_inplace_xor:(0,88),1024,32;nb_inplace_or:(0,88),1056,32;nb_floor_divide:(0,88),1088,32;nb_true_divide:(0,88),1120,32;nb_inplace_floor_divide:(0,88),1152,32;nb_inplace_true_divide:(0,88),1184,32;;:T(0,79)=s40sq_length:(0,36),0,32;sq_concat:(0,88),32,32;sq_repeat:(0,92),64,32;sq_item:(0,92),96,32;sq_slice:(0,94),128,32;sq_ass_item:(0,96),160,32;sq_ass_slice:(0,98),192,32;sq_contains:(0,100),224,32;sq_inplace_concat:(0,88),256,32;sq_inplace_repeat:(0,92),288,32;;:T(0,80)=s12mp_length:(0,36),0,32;mp_subscript:(0,88),32,32;mp_ass_subscript:(0,101),64,32;;:T(0,81)=s16bf_getreadbuffer:(0,102),0,32;bf_getwritebuffer:(0,104),32,32;bf_getsegcount:(0,105),64,32;bf_getcharbuffer:(0,107),96,32;;PyCFunction:t(0,82)=(0,29):t(0,84)=*(0,109)getter:t(0,83)=(0,84):t(0,86)=*(0,110)setter:t(0,85)=(0,86):t(0,87)=*(0,1)binaryfunc:t(0,88)=(0,29)unaryfunc:t(0,89)=(0,20):t(0,91)=*(0,111)coercion:t(0,90)=(0,91):t(0,93)=*(0,112)intargfunc:t(0,92)=(0,93):t(0,95)=*(0,113)intintargfunc:t(0,94)=(0,95):t(0,97)=*(0,114)intobjargproc:t(0,96)=(0,97):t(0,99)=*(0,115)intintobjargproc:t(0,98)=(0,99)objobjproc:t(0,100)=(0,18)objobjargproc:t(0,101)=(0,31):t(0,103)=*(0,116)getreadbufferproc:t(0,102)=(0,103)getwritebufferproc:t(0,104)=(0,103):t(0,106)=*(0,117)getsegcountproc:t(0,105)=(0,106):t(0,108)=*(0,118)getcharbufferproc:t(0,107)=(0,108):t(0,109)=f(0,2):t(0,110)=f(0,3):t(0,111)=f(0,3):t(0,112)=f(0,2):t(0,113)=f(0,2):t(0,114)=f(0,3):t(0,115)=f(0,3):t(0,116)=f(0,3):t(0,117)=f(0,3):t(0,118)=f(0,3)LDAPerror:F(0,2)l:P(0,119)msg:P(0,8)errnum:(0,3)int:t(0,3):t(0,119)=*(0,120):t(0,120)=(0,121):t(0,121)=xsldap:errobj:r(0,2)info:r(0,2)str:r(0,2)matched:(0,8)char:t(0,54)error:(0,8)LDAPinit_errors:F(0,1)d:P(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)e:r(0,2)errobjects:S(0,122)LDAPexception_class:G(0,2):t(0,122)=ar(0,123);0;16672;(0,2)long unsigned int:t(0,123)=r(0,123);0;037777777777;/Users/tkurbad/projects/python-ldap-2.3.1/Modules/functions.cgcc2_compiled.:t(0,1)=(0,1)_methods_l_ldap_initialize_l_ldap_str2dn_l_ldap_set_option_l_ldap_get_optionl_ldap_initialize:f(0,2)unused:P(0,2)args:P(0,2)uri:(0,3)char:t(0,4)=r(0,4);0;127;:t(0,2)=*(0,5):t(0,3)=*(0,4)PyObject:t(0,5)=(0,6)_object:T(0,6)=s8ob_refcnt:(0,7),0,32;ob_type:(0,8),32,32;;int:t(0,7)=r(0,7);-2147483648;2147483647;:t(0,8)=*(0,9)_typeobject:T(0,9)=s192ob_refcnt:(0,7),0,32;ob_type:(0,8),32,32;ob_size:(0,7),64,32;tp_name:(0,3),96,32;tp_basicsize:(0,7),128,32;tp_itemsize:(0,7),160,32;tp_dealloc:(0,10),192,32;tp_print:(0,12),224,32;tp_getattr:(0,14),256,32;tp_setattr:(0,16),288,32;tp_compare:(0,18),320,32;tp_repr:(0,20),352,32;tp_as_number:(0,22),384,32;tp_as_sequence:(0,23),416,32;tp_as_mapping:(0,24),448,32;tp_hash:(0,25),480,32;tp_call:(0,27),512,32;tp_str:(0,20),544,32;tp_getattro:(0,29),576,32;tp_setattro:(0,31),608,32;tp_as_buffer:(0,33),640,32;tp_flags:(0,34),672,32;tp_doc:(0,3),704,32;tp_traverse:(0,35),736,32;tp_clear:(0,37),768,32;tp_richcompare:(0,39),800,32;tp_weaklistoffset:(0,34),832,32;tp_iter:(0,41),864,32;tp_iternext:(0,42),896,32;tp_methods:(0,43),928,32;tp_members:(0,44),960,32;tp_getset:(0,45),992,32;tp_base:(0,8),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,46),1088,32;tp_descr_set:(0,47),1120,32;tp_dictoffset:(0,34),1152,32;tp_init:(0,48),1184,32;tp_alloc:(0,49),1216,32;tp_new:(0,51),1248,32;tp_free:(0,53),1280,32;tp_is_gc:(0,37),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,10),1504,32;;:t(0,11)=*(0,55)destructor:t(0,10)=(0,11):t(0,13)=*(0,56)printfunc:t(0,12)=(0,13):t(0,15)=*(0,57)getattrfunc:t(0,14)=(0,15):t(0,17)=*(0,58)setattrfunc:t(0,16)=(0,17):t(0,19)=*(0,59)cmpfunc:t(0,18)=(0,19):t(0,21)=*(0,60)reprfunc:t(0,20)=(0,21):t(0,22)=*(0,61):t(0,23)=*(0,62):t(0,24)=*(0,63):t(0,26)=*(0,64)hashfunc:t(0,25)=(0,26):t(0,28)=*(0,65)ternaryfunc:t(0,27)=(0,28):t(0,30)=*(0,66)getattrofunc:t(0,29)=(0,30):t(0,32)=*(0,67)setattrofunc:t(0,31)=(0,32):t(0,33)=*(0,68)long int:t(0,34)=r(0,34);-2147483648;2147483647;:t(0,36)=*(0,69)traverseproc:t(0,35)=(0,36):t(0,38)=*(0,70)inquiry:t(0,37)=(0,38):t(0,40)=*(0,71)richcmpfunc:t(0,39)=(0,40)getiterfunc:t(0,41)=(0,21)iternextfunc:t(0,42)=(0,21):t(0,43)=*(0,72):t(0,44)=*(0,73):t(0,45)=*(0,74)descrgetfunc:t(0,46)=(0,28)descrsetfunc:t(0,47)=(0,32)initproc:t(0,48)=(0,32):t(0,50)=*(0,75)allocfunc:t(0,49)=(0,50):t(0,52)=*(0,76)newfunc:t(0,51)=(0,52):t(0,54)=*(0,77)freefunc:t(0,53)=(0,54):t(0,55)=f(0,1):t(0,56)=f(0,7):t(0,57)=f(0,2):t(0,58)=f(0,7):t(0,59)=f(0,7):t(0,60)=f(0,2)PyNumberMethods:t(0,61)=(0,78)PySequenceMethods:t(0,62)=(0,79)PyMappingMethods:t(0,63)=(0,80):t(0,64)=f(0,34):t(0,65)=f(0,2):t(0,66)=f(0,2):t(0,67)=f(0,7)PyBufferProcs:t(0,68)=(0,81):t(0,69)=f(0,7):t(0,70)=f(0,7):t(0,71)=f(0,2)PyMethodDef:T(0,72)=s16ml_name:(0,3),0,32;ml_meth:(0,82),32,32;ml_flags:(0,7),64,32;ml_doc:(0,3),96,32;;:t(0,73)=xsPyMemberDef:PyGetSetDef:T(0,74)=s20name:(0,3),0,32;get:(0,83),32,32;set:(0,85),64,32;doc:(0,3),96,32;closure:(0,87),128,32;;:t(0,75)=f(0,2):t(0,76)=f(0,2):t(0,77)=f(0,1):T(0,78)=s152nb_add:(0,88),0,32;nb_subtract:(0,88),32,32;nb_multiply:(0,88),64,32;nb_divide:(0,88),96,32;nb_remainder:(0,88),128,32;nb_divmod:(0,88),160,32;nb_power:(0,27),192,32;nb_negative:(0,89),224,32;nb_positive:(0,89),256,32;nb_absolute:(0,89),288,32;nb_nonzero:(0,37),320,32;nb_invert:(0,89),352,32;nb_lshift:(0,88),384,32;nb_rshift:(0,88),416,32;nb_and:(0,88),448,32;nb_xor:(0,88),480,32;nb_or:(0,88),512,32;nb_coerce:(0,90),544,32;nb_int:(0,89),576,32;nb_long:(0,89),608,32;nb_float:(0,89),640,32;nb_oct:(0,89),672,32;nb_hex:(0,89),704,32;nb_inplace_add:(0,88),736,32;nb_inplace_subtract:(0,88),768,32;nb_inplace_multiply:(0,88),800,32;nb_inplace_divide:(0,88),832,32;nb_inplace_remainder:(0,88),864,32;nb_inplace_power:(0,27),896,32;nb_inplace_lshift:(0,88),928,32;nb_inplace_rshift:(0,88),960,32;nb_inplace_and:(0,88),992,32;nb_inplace_xor:(0,88),1024,32;nb_inplace_or:(0,88),1056,32;nb_floor_divide:(0,88),1088,32;nb_true_divide:(0,88),1120,32;nb_inplace_floor_divide:(0,88),1152,32;nb_inplace_true_divide:(0,88),1184,32;;:T(0,79)=s40sq_length:(0,37),0,32;sq_concat:(0,88),32,32;sq_repeat:(0,92),64,32;sq_item:(0,92),96,32;sq_slice:(0,94),128,32;sq_ass_item:(0,96),160,32;sq_ass_slice:(0,98),192,32;sq_contains:(0,100),224,32;sq_inplace_concat:(0,88),256,32;sq_inplace_repeat:(0,92),288,32;;:T(0,80)=s12mp_length:(0,37),0,32;mp_subscript:(0,88),32,32;mp_ass_subscript:(0,101),64,32;;:T(0,81)=s16bf_getreadbuffer:(0,102),0,32;bf_getwritebuffer:(0,104),32,32;bf_getsegcount:(0,105),64,32;bf_getcharbuffer:(0,107),96,32;;PyCFunction:t(0,82)=(0,30):t(0,84)=*(0,109)getter:t(0,83)=(0,84):t(0,86)=*(0,110)setter:t(0,85)=(0,86):t(0,87)=*(0,1)binaryfunc:t(0,88)=(0,30)unaryfunc:t(0,89)=(0,21):t(0,91)=*(0,111)coercion:t(0,90)=(0,91):t(0,93)=*(0,112)intargfunc:t(0,92)=(0,93):t(0,95)=*(0,113)intintargfunc:t(0,94)=(0,95):t(0,97)=*(0,114)intobjargproc:t(0,96)=(0,97):t(0,99)=*(0,115)intintobjargproc:t(0,98)=(0,99)objobjproc:t(0,100)=(0,19)objobjargproc:t(0,101)=(0,32):t(0,103)=*(0,116)getreadbufferproc:t(0,102)=(0,103)getwritebufferproc:t(0,104)=(0,103):t(0,106)=*(0,117)getsegcountproc:t(0,105)=(0,106):t(0,108)=*(0,118)getcharbufferproc:t(0,107)=(0,108):t(0,109)=f(0,2):t(0,110)=f(0,7):t(0,111)=f(0,7):t(0,112)=f(0,2):t(0,113)=f(0,2):t(0,114)=f(0,7):t(0,115)=f(0,7):t(0,116)=f(0,7):t(0,117)=f(0,7):t(0,118)=f(0,7)ld:(0,119):t(0,119)=*(0,120):t(0,120)=(0,121):t(0,121)=xsldap:ret:r(0,7)int:t(0,7)_save:r(0,122):t(0,122)=*(0,123)PyThreadState:t(0,123)=(0,124)_ts:T(0,124)=s84next:(0,125),0,32;interp:(0,126),32,32;frame:(0,127),64,32;recursion_depth:(0,7),96,32;tracing:(0,7),128,32;use_tracing:(0,7),160,32;c_profilefunc:(0,128),192,32;c_tracefunc:(0,128),224,32;c_profileobj:(0,2),256,32;c_traceobj:(0,2),288,32;curexc_type:(0,2),320,32;curexc_value:(0,2),352,32;curexc_traceback:(0,2),384,32;exc_type:(0,2),416,32;exc_value:(0,2),448,32;exc_traceback:(0,2),480,32;dict:(0,2),512,32;tick_counter:(0,7),544,32;gilstate_counter:(0,7),576,32;async_exc:(0,2),608,32;thread_id:(0,34),640,32;;:t(0,125)=*(0,124):t(0,126)=*(0,130):t(0,127)=*(0,131):t(0,129)=*(0,132)Py_tracefunc:t(0,128)=(0,129)PyInterpreterState:t(0,130)=(0,133):t(0,131)=xs_frame::t(0,132)=f(0,7)_is:T(0,133)=s36next:(0,134),0,32;tstate_head:(0,125),32,32;modules:(0,2),64,32;sysdict:(0,2),96,32;builtins:(0,2),128,32;codec_search_path:(0,2),160,32;codec_search_cache:(0,2),192,32;codec_error_registry:(0,2),224,32;dlopenflags:(0,7),256,32;;:t(0,134)=*(0,133)l_ldap_str2dn:f(0,2)unused:P(0,2)args:P(0,2)str:(0,135)berval:T(0,135)=s8bv_len:(0,136),0,32;bv_val:(0,3),32,32;;long unsigned int:t(0,137)=r(0,137);0;037777777777;ber_len_t:t(0,136)=(0,137)dn:(0,138)flags:(0,7):t(0,139)=*(0,140)LDAPDN:t(0,138)=(0,139)LDAPRDN:t(0,140)=(0,141):t(0,141)=*(0,142):t(0,142)=*(0,143)LDAPAVA:t(0,143)=(0,144)ldap_ava:T(0,144)=s24la_attr:(0,135),0,64;la_value:(0,135),64,64;la_flags:(0,145),128,32;la_private:(0,87),160,32;;unsigned int:t(0,145)=r(0,145);0;037777777777;result:r(0,2)tmp:r(0,2)void:t(0,1)rdnlist:r(0,2)rdnlist:r(0,2)tuple:r(0,2)rdnlist:r(0,2)l_ldap_set_option:f(0,2)self:P(0,2)args:P(0,2)value:(0,2)option:(0,7)l_ldap_get_option:f(0,2)self:P(0,2)args:P(0,2)option:(0,7)LDAPinit_functions:F(0,1)d:P(0,2)methods:S(0,146):t(0,146)=ar(0,147);0;4;(0,148)long unsigned int:t(0,147)=r(0,147);0;037777777777;PyMethodDef:t(0,148)=(0,72)/Users/tkurbad/projects/python-ldap-2.3.1/Modules/schema.cgcc2_compiled.:t(0,1)=(0,1)_methods_l_ldap_str2objectclass_doc_ldap_str2objectclass_l_ldap_str2attributetype_doc_ldap_str2attributetype_l_ldap_str2syntax_doc_ldap_str2syntax_l_ldap_str2matchingrule_doc_ldap_str2matchingrulec_string_array_to_python:F(0,2)string_array:P(0,3)count:r(0,4)Py_ssize_t:t(0,4)=(0,5):t(0,2)=*(0,6):t(0,3)=*(0,7)int:t(0,5)=r(0,5);-2147483648;2147483647;PyObject:t(0,6)=(0,8):t(0,7)=*(0,9)_object:T(0,8)=s8ob_refcnt:(0,5),0,32;ob_type:(0,10),32,32;;char:t(0,9)=r(0,9);0;127;:t(0,10)=*(0,11)_typeobject:T(0,11)=s192ob_refcnt:(0,5),0,32;ob_type:(0,10),32,32;ob_size:(0,5),64,32;tp_name:(0,7),96,32;tp_basicsize:(0,5),128,32;tp_itemsize:(0,5),160,32;tp_dealloc:(0,12),192,32;tp_print:(0,14),224,32;tp_getattr:(0,16),256,32;tp_setattr:(0,18),288,32;tp_compare:(0,20),320,32;tp_repr:(0,22),352,32;tp_as_number:(0,24),384,32;tp_as_sequence:(0,25),416,32;tp_as_mapping:(0,26),448,32;tp_hash:(0,27),480,32;tp_call:(0,29),512,32;tp_str:(0,22),544,32;tp_getattro:(0,31),576,32;tp_setattro:(0,33),608,32;tp_as_buffer:(0,35),640,32;tp_flags:(0,36),672,32;tp_doc:(0,7),704,32;tp_traverse:(0,37),736,32;tp_clear:(0,39),768,32;tp_richcompare:(0,41),800,32;tp_weaklistoffset:(0,36),832,32;tp_iter:(0,43),864,32;tp_iternext:(0,44),896,32;tp_methods:(0,45),928,32;tp_members:(0,46),960,32;tp_getset:(0,47),992,32;tp_base:(0,10),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,48),1088,32;tp_descr_set:(0,49),1120,32;tp_dictoffset:(0,36),1152,32;tp_init:(0,50),1184,32;tp_alloc:(0,51),1216,32;tp_new:(0,53),1248,32;tp_free:(0,55),1280,32;tp_is_gc:(0,39),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,12),1504,32;;:t(0,13)=*(0,57)destructor:t(0,12)=(0,13):t(0,15)=*(0,58)printfunc:t(0,14)=(0,15):t(0,17)=*(0,59)getattrfunc:t(0,16)=(0,17):t(0,19)=*(0,60)setattrfunc:t(0,18)=(0,19):t(0,21)=*(0,61)cmpfunc:t(0,20)=(0,21):t(0,23)=*(0,62)reprfunc:t(0,22)=(0,23):t(0,24)=*(0,63):t(0,25)=*(0,64):t(0,26)=*(0,65):t(0,28)=*(0,66)hashfunc:t(0,27)=(0,28):t(0,30)=*(0,67)ternaryfunc:t(0,29)=(0,30):t(0,32)=*(0,68)getattrofunc:t(0,31)=(0,32):t(0,34)=*(0,69)setattrofunc:t(0,33)=(0,34):t(0,35)=*(0,70)long int:t(0,36)=r(0,36);-2147483648;2147483647;:t(0,38)=*(0,71)traverseproc:t(0,37)=(0,38):t(0,40)=*(0,72)inquiry:t(0,39)=(0,40):t(0,42)=*(0,73)richcmpfunc:t(0,41)=(0,42)getiterfunc:t(0,43)=(0,23)iternextfunc:t(0,44)=(0,23):t(0,45)=*(0,74):t(0,46)=*(0,75):t(0,47)=*(0,76)descrgetfunc:t(0,48)=(0,30)descrsetfunc:t(0,49)=(0,34)initproc:t(0,50)=(0,34):t(0,52)=*(0,77)allocfunc:t(0,51)=(0,52):t(0,54)=*(0,78)newfunc:t(0,53)=(0,54):t(0,56)=*(0,79)freefunc:t(0,55)=(0,56):t(0,57)=f(0,1):t(0,58)=f(0,5):t(0,59)=f(0,2):t(0,60)=f(0,5):t(0,61)=f(0,5):t(0,62)=f(0,2)PyNumberMethods:t(0,63)=(0,80)PySequenceMethods:t(0,64)=(0,81)PyMappingMethods:t(0,65)=(0,82):t(0,66)=f(0,36):t(0,67)=f(0,2):t(0,68)=f(0,2):t(0,69)=f(0,5)PyBufferProcs:t(0,70)=(0,83):t(0,71)=f(0,5):t(0,72)=f(0,5):t(0,73)=f(0,2)PyMethodDef:T(0,74)=s16ml_name:(0,7),0,32;ml_meth:(0,84),32,32;ml_flags:(0,5),64,32;ml_doc:(0,7),96,32;;:t(0,75)=xsPyMemberDef:PyGetSetDef:T(0,76)=s20name:(0,7),0,32;get:(0,85),32,32;set:(0,87),64,32;doc:(0,7),96,32;closure:(0,89),128,32;;:t(0,77)=f(0,2):t(0,78)=f(0,2):t(0,79)=f(0,1):T(0,80)=s152nb_add:(0,90),0,32;nb_subtract:(0,90),32,32;nb_multiply:(0,90),64,32;nb_divide:(0,90),96,32;nb_remainder:(0,90),128,32;nb_divmod:(0,90),160,32;nb_power:(0,29),192,32;nb_negative:(0,91),224,32;nb_positive:(0,91),256,32;nb_absolute:(0,91),288,32;nb_nonzero:(0,39),320,32;nb_invert:(0,91),352,32;nb_lshift:(0,90),384,32;nb_rshift:(0,90),416,32;nb_and:(0,90),448,32;nb_xor:(0,90),480,32;nb_or:(0,90),512,32;nb_coerce:(0,92),544,32;nb_int:(0,91),576,32;nb_long:(0,91),608,32;nb_float:(0,91),640,32;nb_oct:(0,91),672,32;nb_hex:(0,91),704,32;nb_inplace_add:(0,90),736,32;nb_inplace_subtract:(0,90),768,32;nb_inplace_multiply:(0,90),800,32;nb_inplace_divide:(0,90),832,32;nb_inplace_remainder:(0,90),864,32;nb_inplace_power:(0,29),896,32;nb_inplace_lshift:(0,90),928,32;nb_inplace_rshift:(0,90),960,32;nb_inplace_and:(0,90),992,32;nb_inplace_xor:(0,90),1024,32;nb_inplace_or:(0,90),1056,32;nb_floor_divide:(0,90),1088,32;nb_true_divide:(0,90),1120,32;nb_inplace_floor_divide:(0,90),1152,32;nb_inplace_true_divide:(0,90),1184,32;;:T(0,81)=s40sq_length:(0,39),0,32;sq_concat:(0,90),32,32;sq_repeat:(0,94),64,32;sq_item:(0,94),96,32;sq_slice:(0,96),128,32;sq_ass_item:(0,98),160,32;sq_ass_slice:(0,100),192,32;sq_contains:(0,102),224,32;sq_inplace_concat:(0,90),256,32;sq_inplace_repeat:(0,94),288,32;;:T(0,82)=s12mp_length:(0,39),0,32;mp_subscript:(0,90),32,32;mp_ass_subscript:(0,103),64,32;;:T(0,83)=s16bf_getreadbuffer:(0,104),0,32;bf_getwritebuffer:(0,106),32,32;bf_getsegcount:(0,107),64,32;bf_getcharbuffer:(0,109),96,32;;PyCFunction:t(0,84)=(0,32):t(0,86)=*(0,111)getter:t(0,85)=(0,86):t(0,88)=*(0,112)setter:t(0,87)=(0,88):t(0,89)=*(0,1)binaryfunc:t(0,90)=(0,32)unaryfunc:t(0,91)=(0,23):t(0,93)=*(0,113)coercion:t(0,92)=(0,93):t(0,95)=*(0,114)intargfunc:t(0,94)=(0,95):t(0,97)=*(0,115)intintargfunc:t(0,96)=(0,97):t(0,99)=*(0,116)intobjargproc:t(0,98)=(0,99):t(0,101)=*(0,117)intintobjargproc:t(0,100)=(0,101)objobjproc:t(0,102)=(0,21)objobjargproc:t(0,103)=(0,34):t(0,105)=*(0,118)getreadbufferproc:t(0,104)=(0,105)getwritebufferproc:t(0,106)=(0,105):t(0,108)=*(0,119)getsegcountproc:t(0,107)=(0,108):t(0,110)=*(0,120)getcharbufferproc:t(0,109)=(0,110):t(0,111)=f(0,2):t(0,112)=f(0,5):t(0,113)=f(0,5):t(0,114)=f(0,2):t(0,115)=f(0,2):t(0,116)=f(0,5):t(0,117)=f(0,5):t(0,118)=f(0,5):t(0,119)=f(0,5):t(0,120)=f(0,5)s:r(0,3)char:t(0,9)py_list:r(0,2)LDAPinit_schema:F(0,1)d:P(0,2)schema_extension_to_python:F(0,2)extensions:P(0,121)count:r(0,4):t(0,121)=*(0,122):t(0,122)=*(0,123)LDAPSchemaExtensionItem:t(0,123)=(0,124)ldap_schema_extension_item:T(0,124)=s8lsei_name:(0,7),0,32;lsei_values:(0,3),32,32;;e:r(0,121)py_list:r(0,2)item_tuple:r(0,2)count:r(0,4)s:r(0,3)py_list:r(0,2)count:r(0,4)s:r(0,3)py_list:r(0,2)l_ldap_str2objectclass:f(0,2)self:P(0,2)args:P(0,2)ret:(0,5)int:t(0,5)flag:(0,5)oc_string:(0,7)errp:(0,125):t(0,125)=*(0,126):t(0,126)=k(0,9)o:r(0,127)oc_names:r(0,2)oc_sup_oids:r(0,2)oc_at_oids_must:r(0,2)oc_at_oids_may:r(0,2)py_ret:r(0,2)count:r(0,4):t(0,127)=*(0,128)LDAPObjectClass:t(0,128)=(0,129)ldap_objectclass:T(0,129)=s36oc_oid:(0,7),0,32;oc_names:(0,3),32,32;oc_desc:(0,7),64,32;oc_obsolete:(0,5),96,32;oc_sup_oids:(0,3),128,32;oc_kind:(0,5),160,32;oc_at_oids_must:(0,3),192,32;oc_at_oids_may:(0,3),224,32;oc_extensions:(0,121),256,32;;s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)l_ldap_str2attributetype:f(0,2)self:P(0,2)args:P(0,2)ret:(0,5)flag:(0,5)at_string:(0,7)errp:(0,125)a:r(0,130)py_ret:r(0,2)at_names:r(0,2)count:r(0,4):t(0,130)=*(0,131)LDAPAttributeType:t(0,131)=(0,132)ldap_attributetype:T(0,132)=s60at_oid:(0,7),0,32;at_names:(0,3),32,32;at_desc:(0,7),64,32;at_obsolete:(0,5),96,32;at_sup_oid:(0,7),128,32;at_equality_oid:(0,7),160,32;at_ordering_oid:(0,7),192,32;at_substr_oid:(0,7),224,32;at_syntax_oid:(0,7),256,32;at_syntax_len:(0,5),288,32;at_single_value:(0,5),320,32;at_collective:(0,5),352,32;at_no_user_mod:(0,5),384,32;at_usage:(0,5),416,32;at_extensions:(0,121),448,32;;s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)l_ldap_str2syntax:f(0,2)self:P(0,2)args:P(0,2)s:r(0,133)ret:(0,5):t(0,133)=*(0,134)LDAPSyntax:t(0,134)=(0,135)ldap_syntax:T(0,135)=s16syn_oid:(0,7),0,32;syn_names:(0,3),32,32;syn_desc:(0,7),64,32;syn_extensions:(0,121),96,32;;flag:(0,5)errp:(0,125)syn_string:(0,7)py_ret:r(0,2)syn_names:r(0,2)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)l_ldap_str2matchingrule:f(0,2)self:P(0,2)args:P(0,2)m:r(0,136)ret:(0,5):t(0,136)=*(0,137)LDAPMatchingRule:t(0,137)=(0,138)ldap_matchingrule:T(0,138)=s24mr_oid:(0,7),0,32;mr_names:(0,3),32,32;mr_desc:(0,7),64,32;mr_obsolete:(0,5),96,32;mr_syntax_oid:(0,7),128,32;mr_extensions:(0,121),160,32;;flag:(0,5)errp:(0,125)mr_string:(0,7)py_ret:r(0,2)mr_names:r(0,2)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)count:r(0,4)s:r(0,3)doc_ldap_str2objectclass:S(0,139)doc_ldap_str2attributetype:S(0,140)doc_ldap_str2syntax:S(0,141)doc_ldap_str2matchingrule:S(0,142)methods:S(0,143):t(0,139)=ar(0,144);0;0;(0,9):t(0,140)=ar(0,144);0;0;(0,9):t(0,141)=ar(0,144);0;0;(0,9):t(0,142)=ar(0,144);0;0;(0,9):t(0,143)=ar(0,144);0;4;(0,145)long unsigned int:t(0,144)=r(0,144);0;037777777777;PyMethodDef:t(0,145)=(0,74)/Users/tkurbad/projects/python-ldap-2.3.1/Modules/ldapmodule.cgcc2_compiled.:t(0,1)=(0,1)_methodsinit_ldap:F(0,1)d:r(0,2):t(0,2)=*(0,3)PyObject:t(0,3)=(0,4)_object:T(0,4)=s8ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;;int:t(0,5)=r(0,5);-2147483648;2147483647;:t(0,6)=*(0,7)_typeobject:T(0,7)=s192ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;ob_size:(0,5),64,32;tp_name:(0,8),96,32;tp_basicsize:(0,5),128,32;tp_itemsize:(0,5),160,32;tp_dealloc:(0,9),192,32;tp_print:(0,11),224,32;tp_getattr:(0,13),256,32;tp_setattr:(0,15),288,32;tp_compare:(0,17),320,32;tp_repr:(0,19),352,32;tp_as_number:(0,21),384,32;tp_as_sequence:(0,22),416,32;tp_as_mapping:(0,23),448,32;tp_hash:(0,24),480,32;tp_call:(0,26),512,32;tp_str:(0,19),544,32;tp_getattro:(0,28),576,32;tp_setattro:(0,30),608,32;tp_as_buffer:(0,32),640,32;tp_flags:(0,33),672,32;tp_doc:(0,8),704,32;tp_traverse:(0,34),736,32;tp_clear:(0,36),768,32;tp_richcompare:(0,38),800,32;tp_weaklistoffset:(0,33),832,32;tp_iter:(0,40),864,32;tp_iternext:(0,41),896,32;tp_methods:(0,42),928,32;tp_members:(0,43),960,32;tp_getset:(0,44),992,32;tp_base:(0,6),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,45),1088,32;tp_descr_set:(0,46),1120,32;tp_dictoffset:(0,33),1152,32;tp_init:(0,47),1184,32;tp_alloc:(0,48),1216,32;tp_new:(0,50),1248,32;tp_free:(0,52),1280,32;tp_is_gc:(0,36),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,9),1504,32;;:t(0,8)=*(0,54):t(0,10)=*(0,55)destructor:t(0,9)=(0,10):t(0,12)=*(0,56)printfunc:t(0,11)=(0,12):t(0,14)=*(0,57)getattrfunc:t(0,13)=(0,14):t(0,16)=*(0,58)setattrfunc:t(0,15)=(0,16):t(0,18)=*(0,59)cmpfunc:t(0,17)=(0,18):t(0,20)=*(0,60)reprfunc:t(0,19)=(0,20):t(0,21)=*(0,61):t(0,22)=*(0,62):t(0,23)=*(0,63):t(0,25)=*(0,64)hashfunc:t(0,24)=(0,25):t(0,27)=*(0,65)ternaryfunc:t(0,26)=(0,27):t(0,29)=*(0,66)getattrofunc:t(0,28)=(0,29):t(0,31)=*(0,67)setattrofunc:t(0,30)=(0,31):t(0,32)=*(0,68)long int:t(0,33)=r(0,33);-2147483648;2147483647;:t(0,35)=*(0,69)traverseproc:t(0,34)=(0,35):t(0,37)=*(0,70)inquiry:t(0,36)=(0,37):t(0,39)=*(0,71)richcmpfunc:t(0,38)=(0,39)getiterfunc:t(0,40)=(0,20)iternextfunc:t(0,41)=(0,20):t(0,42)=*(0,72):t(0,43)=*(0,73):t(0,44)=*(0,74)descrgetfunc:t(0,45)=(0,27)descrsetfunc:t(0,46)=(0,31)initproc:t(0,47)=(0,31):t(0,49)=*(0,75)allocfunc:t(0,48)=(0,49):t(0,51)=*(0,76)newfunc:t(0,50)=(0,51):t(0,53)=*(0,77)freefunc:t(0,52)=(0,53)char:t(0,54)=r(0,54);0;127;:t(0,55)=f(0,1):t(0,56)=f(0,5):t(0,57)=f(0,2):t(0,58)=f(0,5):t(0,59)=f(0,5):t(0,60)=f(0,2)PyNumberMethods:t(0,61)=(0,78)PySequenceMethods:t(0,62)=(0,79)PyMappingMethods:t(0,63)=(0,80):t(0,64)=f(0,33):t(0,65)=f(0,2):t(0,66)=f(0,2):t(0,67)=f(0,5)PyBufferProcs:t(0,68)=(0,81):t(0,69)=f(0,5):t(0,70)=f(0,5):t(0,71)=f(0,2)PyMethodDef:T(0,72)=s16ml_name:(0,8),0,32;ml_meth:(0,82),32,32;ml_flags:(0,5),64,32;ml_doc:(0,8),96,32;;:t(0,73)=xsPyMemberDef:PyGetSetDef:T(0,74)=s20name:(0,8),0,32;get:(0,83),32,32;set:(0,85),64,32;doc:(0,8),96,32;closure:(0,87),128,32;;:t(0,75)=f(0,2):t(0,76)=f(0,2):t(0,77)=f(0,1):T(0,78)=s152nb_add:(0,88),0,32;nb_subtract:(0,88),32,32;nb_multiply:(0,88),64,32;nb_divide:(0,88),96,32;nb_remainder:(0,88),128,32;nb_divmod:(0,88),160,32;nb_power:(0,26),192,32;nb_negative:(0,89),224,32;nb_positive:(0,89),256,32;nb_absolute:(0,89),288,32;nb_nonzero:(0,36),320,32;nb_invert:(0,89),352,32;nb_lshift:(0,88),384,32;nb_rshift:(0,88),416,32;nb_and:(0,88),448,32;nb_xor:(0,88),480,32;nb_or:(0,88),512,32;nb_coerce:(0,90),544,32;nb_int:(0,89),576,32;nb_long:(0,89),608,32;nb_float:(0,89),640,32;nb_oct:(0,89),672,32;nb_hex:(0,89),704,32;nb_inplace_add:(0,88),736,32;nb_inplace_subtract:(0,88),768,32;nb_inplace_multiply:(0,88),800,32;nb_inplace_divide:(0,88),832,32;nb_inplace_remainder:(0,88),864,32;nb_inplace_power:(0,26),896,32;nb_inplace_lshift:(0,88),928,32;nb_inplace_rshift:(0,88),960,32;nb_inplace_and:(0,88),992,32;nb_inplace_xor:(0,88),1024,32;nb_inplace_or:(0,88),1056,32;nb_floor_divide:(0,88),1088,32;nb_true_divide:(0,88),1120,32;nb_inplace_floor_divide:(0,88),1152,32;nb_inplace_true_divide:(0,88),1184,32;;:T(0,79)=s40sq_length:(0,36),0,32;sq_concat:(0,88),32,32;sq_repeat:(0,92),64,32;sq_item:(0,92),96,32;sq_slice:(0,94),128,32;sq_ass_item:(0,96),160,32;sq_ass_slice:(0,98),192,32;sq_contains:(0,100),224,32;sq_inplace_concat:(0,88),256,32;sq_inplace_repeat:(0,92),288,32;;:T(0,80)=s12mp_length:(0,36),0,32;mp_subscript:(0,88),32,32;mp_ass_subscript:(0,101),64,32;;:T(0,81)=s16bf_getreadbuffer:(0,102),0,32;bf_getwritebuffer:(0,104),32,32;bf_getsegcount:(0,105),64,32;bf_getcharbuffer:(0,107),96,32;;PyCFunction:t(0,82)=(0,29):t(0,84)=*(0,109)getter:t(0,83)=(0,84):t(0,86)=*(0,110)setter:t(0,85)=(0,86):t(0,87)=*(0,1)binaryfunc:t(0,88)=(0,29)unaryfunc:t(0,89)=(0,20):t(0,91)=*(0,111)coercion:t(0,90)=(0,91):t(0,93)=*(0,112)intargfunc:t(0,92)=(0,93):t(0,95)=*(0,113)intintargfunc:t(0,94)=(0,95):t(0,97)=*(0,114)intobjargproc:t(0,96)=(0,97):t(0,99)=*(0,115)intintobjargproc:t(0,98)=(0,99)objobjproc:t(0,100)=(0,18)objobjargproc:t(0,101)=(0,31):t(0,103)=*(0,116)getreadbufferproc:t(0,102)=(0,103)getwritebufferproc:t(0,104)=(0,103):t(0,106)=*(0,117)getsegcountproc:t(0,105)=(0,106):t(0,108)=*(0,118)getcharbufferproc:t(0,107)=(0,108):t(0,109)=f(0,2):t(0,110)=f(0,5):t(0,111)=f(0,5):t(0,112)=f(0,2):t(0,113)=f(0,2):t(0,114)=f(0,5):t(0,115)=f(0,5):t(0,116)=f(0,5):t(0,117)=f(0,5):t(0,118)=f(0,5)methods:S(0,119):t(0,119)=ar(0,120);0;0;(0,121)long unsigned int:t(0,120)=r(0,120);0;037777777777;PyMethodDef:t(0,121)=(0,72)/Users/tkurbad/projects/python-ldap-2.3.1/Modules/message.cgcc2_compiled.:t(0,1)=(0,1)LDAPmessage_to_python:F(0,2)ld:P(0,3)m:P(0,4)result:r(0,2)entry:r(0,4)dn:r(0,5)char:t(0,6)=r(0,6);0;127;:t(0,2)=*(0,7):t(0,3)=*(0,8):t(0,4)=*(0,9):t(0,5)=*(0,6)PyObject:t(0,7)=(0,10):t(0,8)=(0,11):t(0,9)=(0,12)_object:T(0,10)=s8ob_refcnt:(0,13),0,32;ob_type:(0,14),32,32;;:t(0,11)=xsldap::t(0,12)=xsldapmsg:int:t(0,13)=r(0,13);-2147483648;2147483647;:t(0,14)=*(0,15)_typeobject:T(0,15)=s192ob_refcnt:(0,13),0,32;ob_type:(0,14),32,32;ob_size:(0,13),64,32;tp_name:(0,5),96,32;tp_basicsize:(0,13),128,32;tp_itemsize:(0,13),160,32;tp_dealloc:(0,16),192,32;tp_print:(0,18),224,32;tp_getattr:(0,20),256,32;tp_setattr:(0,22),288,32;tp_compare:(0,24),320,32;tp_repr:(0,26),352,32;tp_as_number:(0,28),384,32;tp_as_sequence:(0,29),416,32;tp_as_mapping:(0,30),448,32;tp_hash:(0,31),480,32;tp_call:(0,33),512,32;tp_str:(0,26),544,32;tp_getattro:(0,35),576,32;tp_setattro:(0,37),608,32;tp_as_buffer:(0,39),640,32;tp_flags:(0,40),672,32;tp_doc:(0,5),704,32;tp_traverse:(0,41),736,32;tp_clear:(0,43),768,32;tp_richcompare:(0,45),800,32;tp_weaklistoffset:(0,40),832,32;tp_iter:(0,47),864,32;tp_iternext:(0,48),896,32;tp_methods:(0,49),928,32;tp_members:(0,50),960,32;tp_getset:(0,51),992,32;tp_base:(0,14),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,52),1088,32;tp_descr_set:(0,53),1120,32;tp_dictoffset:(0,40),1152,32;tp_init:(0,54),1184,32;tp_alloc:(0,55),1216,32;tp_new:(0,57),1248,32;tp_free:(0,59),1280,32;tp_is_gc:(0,43),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,16),1504,32;;:t(0,17)=*(0,61)destructor:t(0,16)=(0,17):t(0,19)=*(0,62)printfunc:t(0,18)=(0,19):t(0,21)=*(0,63)getattrfunc:t(0,20)=(0,21):t(0,23)=*(0,64)setattrfunc:t(0,22)=(0,23):t(0,25)=*(0,65)cmpfunc:t(0,24)=(0,25):t(0,27)=*(0,66)reprfunc:t(0,26)=(0,27):t(0,28)=*(0,67):t(0,29)=*(0,68):t(0,30)=*(0,69):t(0,32)=*(0,70)hashfunc:t(0,31)=(0,32):t(0,34)=*(0,71)ternaryfunc:t(0,33)=(0,34):t(0,36)=*(0,72)getattrofunc:t(0,35)=(0,36):t(0,38)=*(0,73)setattrofunc:t(0,37)=(0,38):t(0,39)=*(0,74)long int:t(0,40)=r(0,40);-2147483648;2147483647;:t(0,42)=*(0,75)traverseproc:t(0,41)=(0,42):t(0,44)=*(0,76)inquiry:t(0,43)=(0,44):t(0,46)=*(0,77)richcmpfunc:t(0,45)=(0,46)getiterfunc:t(0,47)=(0,27)iternextfunc:t(0,48)=(0,27):t(0,49)=*(0,78):t(0,50)=*(0,79):t(0,51)=*(0,80)descrgetfunc:t(0,52)=(0,34)descrsetfunc:t(0,53)=(0,38)initproc:t(0,54)=(0,38):t(0,56)=*(0,81)allocfunc:t(0,55)=(0,56):t(0,58)=*(0,82)newfunc:t(0,57)=(0,58):t(0,60)=*(0,83)freefunc:t(0,59)=(0,60):t(0,61)=f(0,1):t(0,62)=f(0,13):t(0,63)=f(0,2):t(0,64)=f(0,13):t(0,65)=f(0,13):t(0,66)=f(0,2)PyNumberMethods:t(0,67)=(0,84)PySequenceMethods:t(0,68)=(0,85)PyMappingMethods:t(0,69)=(0,86):t(0,70)=f(0,40):t(0,71)=f(0,2):t(0,72)=f(0,2):t(0,73)=f(0,13)PyBufferProcs:t(0,74)=(0,87):t(0,75)=f(0,13):t(0,76)=f(0,13):t(0,77)=f(0,2)PyMethodDef:T(0,78)=s16ml_name:(0,5),0,32;ml_meth:(0,88),32,32;ml_flags:(0,13),64,32;ml_doc:(0,5),96,32;;:t(0,79)=xsPyMemberDef:PyGetSetDef:T(0,80)=s20name:(0,5),0,32;get:(0,89),32,32;set:(0,91),64,32;doc:(0,5),96,32;closure:(0,93),128,32;;:t(0,81)=f(0,2):t(0,82)=f(0,2):t(0,83)=f(0,1):T(0,84)=s152nb_add:(0,94),0,32;nb_subtract:(0,94),32,32;nb_multiply:(0,94),64,32;nb_divide:(0,94),96,32;nb_remainder:(0,94),128,32;nb_divmod:(0,94),160,32;nb_power:(0,33),192,32;nb_negative:(0,95),224,32;nb_positive:(0,95),256,32;nb_absolute:(0,95),288,32;nb_nonzero:(0,43),320,32;nb_invert:(0,95),352,32;nb_lshift:(0,94),384,32;nb_rshift:(0,94),416,32;nb_and:(0,94),448,32;nb_xor:(0,94),480,32;nb_or:(0,94),512,32;nb_coerce:(0,96),544,32;nb_int:(0,95),576,32;nb_long:(0,95),608,32;nb_float:(0,95),640,32;nb_oct:(0,95),672,32;nb_hex:(0,95),704,32;nb_inplace_add:(0,94),736,32;nb_inplace_subtract:(0,94),768,32;nb_inplace_multiply:(0,94),800,32;nb_inplace_divide:(0,94),832,32;nb_inplace_remainder:(0,94),864,32;nb_inplace_power:(0,33),896,32;nb_inplace_lshift:(0,94),928,32;nb_inplace_rshift:(0,94),960,32;nb_inplace_and:(0,94),992,32;nb_inplace_xor:(0,94),1024,32;nb_inplace_or:(0,94),1056,32;nb_floor_divide:(0,94),1088,32;nb_true_divide:(0,94),1120,32;nb_inplace_floor_divide:(0,94),1152,32;nb_inplace_true_divide:(0,94),1184,32;;:T(0,85)=s40sq_length:(0,43),0,32;sq_concat:(0,94),32,32;sq_repeat:(0,98),64,32;sq_item:(0,98),96,32;sq_slice:(0,100),128,32;sq_ass_item:(0,102),160,32;sq_ass_slice:(0,104),192,32;sq_contains:(0,106),224,32;sq_inplace_concat:(0,94),256,32;sq_inplace_repeat:(0,98),288,32;;:T(0,86)=s12mp_length:(0,43),0,32;mp_subscript:(0,94),32,32;mp_ass_subscript:(0,107),64,32;;:T(0,87)=s16bf_getreadbuffer:(0,108),0,32;bf_getwritebuffer:(0,110),32,32;bf_getsegcount:(0,111),64,32;bf_getcharbuffer:(0,113),96,32;;PyCFunction:t(0,88)=(0,36):t(0,90)=*(0,115)getter:t(0,89)=(0,90):t(0,92)=*(0,116)setter:t(0,91)=(0,92):t(0,93)=*(0,1)binaryfunc:t(0,94)=(0,36)unaryfunc:t(0,95)=(0,27):t(0,97)=*(0,117)coercion:t(0,96)=(0,97):t(0,99)=*(0,118)intargfunc:t(0,98)=(0,99):t(0,101)=*(0,119)intintargfunc:t(0,100)=(0,101):t(0,103)=*(0,120)intobjargproc:t(0,102)=(0,103):t(0,105)=*(0,121)intintobjargproc:t(0,104)=(0,105)objobjproc:t(0,106)=(0,25)objobjargproc:t(0,107)=(0,38):t(0,109)=*(0,122)getreadbufferproc:t(0,108)=(0,109)getwritebufferproc:t(0,110)=(0,109):t(0,112)=*(0,123)getsegcountproc:t(0,111)=(0,112):t(0,114)=*(0,124)getcharbufferproc:t(0,113)=(0,114):t(0,115)=f(0,2):t(0,116)=f(0,13):t(0,117)=f(0,13):t(0,118)=f(0,2):t(0,119)=f(0,2):t(0,120)=f(0,13):t(0,121)=f(0,13):t(0,122)=f(0,13):t(0,123)=f(0,13):t(0,124)=f(0,13)attr:r(0,5)ber:(0,125)entrytuple:r(0,2)attrdict:r(0,2)valuelist:r(0,2)bvals:r(0,126)berval:T(0,127)=s8bv_len:(0,128),0,32;bv_val:(0,5),32,32;;:t(0,125)=*(0,130):t(0,126)=*(0,131)long unsigned int:t(0,129)=r(0,129);0;037777777777;ber_len_t:t(0,128)=(0,129):t(0,130)=(0,132):t(0,131)=*(0,127):t(0,132)=xsberelement:valuestr:r(0,2)refs:(0,133):t(0,133)=*(0,5)entrytuple:r(0,2)reflist:r(0,2)refstr:r(0,2)/Users/tkurbad/projects/python-ldap-2.3.1/Modules/version.cgcc2_compiled.:t(0,1)=(0,1)_version_strLDAPinit_version:F(0,1)d:P(0,2)version:r(0,2):t(0,2)=*(0,3)PyObject:t(0,3)=(0,4)_object:T(0,4)=s8ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;;int:t(0,5)=r(0,5);-2147483648;2147483647;:t(0,6)=*(0,7)_typeobject:T(0,7)=s192ob_refcnt:(0,5),0,32;ob_type:(0,6),32,32;ob_size:(0,5),64,32;tp_name:(0,8),96,32;tp_basicsize:(0,5),128,32;tp_itemsize:(0,5),160,32;tp_dealloc:(0,9),192,32;tp_print:(0,11),224,32;tp_getattr:(0,13),256,32;tp_setattr:(0,15),288,32;tp_compare:(0,17),320,32;tp_repr:(0,19),352,32;tp_as_number:(0,21),384,32;tp_as_sequence:(0,22),416,32;tp_as_mapping:(0,23),448,32;tp_hash:(0,24),480,32;tp_call:(0,26),512,32;tp_str:(0,19),544,32;tp_getattro:(0,28),576,32;tp_setattro:(0,30),608,32;tp_as_buffer:(0,32),640,32;tp_flags:(0,33),672,32;tp_doc:(0,8),704,32;tp_traverse:(0,34),736,32;tp_clear:(0,36),768,32;tp_richcompare:(0,38),800,32;tp_weaklistoffset:(0,33),832,32;tp_iter:(0,40),864,32;tp_iternext:(0,41),896,32;tp_methods:(0,42),928,32;tp_members:(0,43),960,32;tp_getset:(0,44),992,32;tp_base:(0,6),1024,32;tp_dict:(0,2),1056,32;tp_descr_get:(0,45),1088,32;tp_descr_set:(0,46),1120,32;tp_dictoffset:(0,33),1152,32;tp_init:(0,47),1184,32;tp_alloc:(0,48),1216,32;tp_new:(0,50),1248,32;tp_free:(0,52),1280,32;tp_is_gc:(0,36),1312,32;tp_bases:(0,2),1344,32;tp_mro:(0,2),1376,32;tp_cache:(0,2),1408,32;tp_subclasses:(0,2),1440,32;tp_weaklist:(0,2),1472,32;tp_del:(0,9),1504,32;;:t(0,8)=*(0,54):t(0,10)=*(0,55)destructor:t(0,9)=(0,10):t(0,12)=*(0,56)printfunc:t(0,11)=(0,12):t(0,14)=*(0,57)getattrfunc:t(0,13)=(0,14):t(0,16)=*(0,58)setattrfunc:t(0,15)=(0,16):t(0,18)=*(0,59)cmpfunc:t(0,17)=(0,18):t(0,20)=*(0,60)reprfunc:t(0,19)=(0,20):t(0,21)=*(0,61):t(0,22)=*(0,62):t(0,23)=*(0,63):t(0,25)=*(0,64)hashfunc:t(0,24)=(0,25):t(0,27)=*(0,65)ternaryfunc:t(0,26)=(0,27):t(0,29)=*(0,66)getattrofunc:t(0,28)=(0,29):t(0,31)=*(0,67)setattrofunc:t(0,30)=(0,31):t(0,32)=*(0,68)long int:t(0,33)=r(0,33);-2147483648;2147483647;:t(0,35)=*(0,69)traverseproc:t(0,34)=(0,35):t(0,37)=*(0,70)inquiry:t(0,36)=(0,37):t(0,39)=*(0,71)richcmpfunc:t(0,38)=(0,39)getiterfunc:t(0,40)=(0,20)iternextfunc:t(0,41)=(0,20):t(0,42)=*(0,72):t(0,43)=*(0,73):t(0,44)=*(0,74)descrgetfunc:t(0,45)=(0,27)descrsetfunc:t(0,46)=(0,31)initproc:t(0,47)=(0,31):t(0,49)=*(0,75)allocfunc:t(0,48)=(0,49):t(0,51)=*(0,76)newfunc:t(0,50)=(0,51):t(0,53)=*(0,77)freefunc:t(0,52)=(0,53)char:t(0,54)=r(0,54);0;127;:t(0,55)=f(0,1):t(0,56)=f(0,5):t(0,57)=f(0,2):t(0,58)=f(0,5):t(0,59)=f(0,5):t(0,60)=f(0,2)PyNumberMethods:t(0,61)=(0,78)PySequenceMethods:t(0,62)=(0,79)PyMappingMethods:t(0,63)=(0,80):t(0,64)=f(0,33):t(0,65)=f(0,2):t(0,66)=f(0,2):t(0,67)=f(0,5)PyBufferProcs:t(0,68)=(0,81):t(0,69)=f(0,5):t(0,70)=f(0,5):t(0,71)=f(0,2)PyMethodDef:T(0,72)=s16ml_name:(0,8),0,32;ml_meth:(0,82),32,32;ml_flags:(0,5),64,32;ml_doc:(0,8),96,32;;:t(0,73)=xsPyMemberDef:PyGetSetDef:T(0,74)=s20name:(0,8),0,32;get:(0,83),32,32;set:(0,85),64,32;doc:(0,8),96,32;closure:(0,87),128,32;;:t(0,75)=f(0,2):t(0,76)=f(0,2):t(0,77)=f(0,1):T(0,78)=s152nb_add:(0,88),0,32;nb_subtract:(0,88),32,32;nb_multiply:(0,88),64,32;nb_divide:(0,88),96,32;nb_remainder:(0,88),128,32;nb_divmod:(0,88),160,32;nb_power:(0,26),192,32;nb_negative:(0,89),224,32;nb_positive:(0,89),256,32;nb_absolute:(0,89),288,32;nb_nonzero:(0,36),320,32;nb_invert:(0,89),352,32;nb_lshift:(0,88),384,32;nb_rshift:(0,88),416,32;nb_and:(0,88),448,32;nb_xor:(0,88),480,32;nb_or:(0,88),512,32;nb_coerce:(0,90),544,32;nb_int:(0,89),576,32;nb_long:(0,89),608,32;nb_float:(0,89),640,32;nb_oct:(0,89),672,32;nb_hex:(0,89),704,32;nb_inplace_add:(0,88),736,32;nb_inplace_subtract:(0,88),768,32;nb_inplace_multiply:(0,88),800,32;nb_inplace_divide:(0,88),832,32;nb_inplace_remainder:(0,88),864,32;nb_inplace_power:(0,26),896,32;nb_inplace_lshift:(0,88),928,32;nb_inplace_rshift:(0,88),960,32;nb_inplace_and:(0,88),992,32;nb_inplace_xor:(0,88),1024,32;nb_inplace_or:(0,88),1056,32;nb_floor_divide:(0,88),1088,32;nb_true_divide:(0,88),1120,32;nb_inplace_floor_divide:(0,88),1152,32;nb_inplace_true_divide:(0,88),1184,32;;:T(0,79)=s40sq_length:(0,36),0,32;sq_concat:(0,88),32,32;sq_repeat:(0,92),64,32;sq_item:(0,92),96,32;sq_slice:(0,94),128,32;sq_ass_item:(0,96),160,32;sq_ass_slice:(0,98),192,32;sq_contains:(0,100),224,32;sq_inplace_concat:(0,88),256,32;sq_inplace_repeat:(0,92),288,32;;:T(0,80)=s12mp_length:(0,36),0,32;mp_subscript:(0,88),32,32;mp_ass_subscript:(0,101),64,32;;:T(0,81)=s16bf_getreadbuffer:(0,102),0,32;bf_getwritebuffer:(0,104),32,32;bf_getsegcount:(0,105),64,32;bf_getcharbuffer:(0,107),96,32;;PyCFunction:t(0,82)=(0,29):t(0,84)=*(0,109)getter:t(0,83)=(0,84):t(0,86)=*(0,110)setter:t(0,85)=(0,86):t(0,87)=*(0,1)binaryfunc:t(0,88)=(0,29)unaryfunc:t(0,89)=(0,20):t(0,91)=*(0,111)coercion:t(0,90)=(0,91):t(0,93)=*(0,112)intargfunc:t(0,92)=(0,93):t(0,95)=*(0,113)intintargfunc:t(0,94)=(0,95):t(0,97)=*(0,114)intobjargproc:t(0,96)=(0,97):t(0,99)=*(0,115)intintobjargproc:t(0,98)=(0,99)objobjproc:t(0,100)=(0,18)objobjargproc:t(0,101)=(0,31):t(0,103)=*(0,116)getreadbufferproc:t(0,102)=(0,103)getwritebufferproc:t(0,104)=(0,103):t(0,106)=*(0,117)getsegcountproc:t(0,105)=(0,106):t(0,108)=*(0,118)getcharbufferproc:t(0,107)=(0,108):t(0,109)=f(0,2):t(0,110)=f(0,5):t(0,111)=f(0,5):t(0,112)=f(0,2):t(0,113)=f(0,2):t(0,114)=f(0,5):t(0,115)=f(0,5):t(0,116)=f(0,5):t(0,117)=f(0,5):t(0,118)=f(0,5)version_str:S(0,119):t(0,119)=ar(0,120);0;5;(0,54)long unsigned int:t(0,120)=r(0,120);0;037777777777;/Users/tkurbad/projects/python-ldap-2.3.1/Modules/options.cgcc2_compiled.:t(0,1)=(0,1)set_timeval_from_double:F(0,1)tv:P(0,2)d:P(0,3):t(0,2)=*(0,4)double:t(0,3)=r(0,5);8;0;timeval:T(0,4)=s8tv_sec:(0,6),0,32;tv_usec:(0,8),32,32;;long int:t(0,7)=r(0,7);-2147483648;2147483647;__darwin_time_t:t(0,6)=(0,7)__int32_t:t(0,9)=(0,5)__darwin_suseconds_t:t(0,8)=(0,9)int:t(0,5)=r(0,5);-2147483648;2147483647;LDAP_get_option:F(0,10):t(0,10)=*(0,11)PyObject:t(0,11)=(0,12)_object:T(0,12)=s8ob_refcnt:(0,5),0,32;ob_type:(0,13),32,32;;:t(0,13)=*(0,14)_typeobject:T(0,14)=s192ob_refcnt:(0,5),0,32;ob_type:(0,13),32,32;ob_size:(0,5),64,32;tp_name:(0,15),96,32;tp_basicsize:(0,5),128,32;tp_itemsize:(0,5),160,32;tp_dealloc:(0,16),192,32;tp_print:(0,18),224,32;tp_getattr:(0,20),256,32;tp_setattr:(0,22),288,32;tp_compare:(0,24),320,32;tp_repr:(0,26),352,32;tp_as_number:(0,28),384,32;tp_as_sequence:(0,29),416,32;tp_as_mapping:(0,30),448,32;tp_hash:(0,31),480,32;tp_call:(0,33),512,32;tp_str:(0,26),544,32;tp_getattro:(0,35),576,32;tp_setattro:(0,37),608,32;tp_as_buffer:(0,39),640,32;tp_flags:(0,7),672,32;tp_doc:(0,15),704,32;tp_traverse:(0,40),736,32;tp_clear:(0,42),768,32;tp_richcompare:(0,44),800,32;tp_weaklistoffset:(0,7),832,32;tp_iter:(0,46),864,32;tp_iternext:(0,47),896,32;tp_methods:(0,48),928,32;tp_members:(0,49),960,32;tp_getset:(0,50),992,32;tp_base:(0,13),1024,32;tp_dict:(0,10),1056,32;tp_descr_get:(0,51),1088,32;tp_descr_set:(0,52),1120,32;tp_dictoffset:(0,7),1152,32;tp_init:(0,53),1184,32;tp_alloc:(0,54),1216,32;tp_new:(0,56),1248,32;tp_free:(0,58),1280,32;tp_is_gc:(0,42),1312,32;tp_bases:(0,10),1344,32;tp_mro:(0,10),1376,32;tp_cache:(0,10),1408,32;tp_subclasses:(0,10),1440,32;tp_weaklist:(0,10),1472,32;tp_del:(0,16),1504,32;;:t(0,15)=*(0,60):t(0,17)=*(0,61)destructor:t(0,16)=(0,17):t(0,19)=*(0,62)printfunc:t(0,18)=(0,19):t(0,21)=*(0,63)getattrfunc:t(0,20)=(0,21):t(0,23)=*(0,64)setattrfunc:t(0,22)=(0,23):t(0,25)=*(0,65)cmpfunc:t(0,24)=(0,25):t(0,27)=*(0,66)reprfunc:t(0,26)=(0,27):t(0,28)=*(0,67):t(0,29)=*(0,68):t(0,30)=*(0,69):t(0,32)=*(0,70)hashfunc:t(0,31)=(0,32):t(0,34)=*(0,71)ternaryfunc:t(0,33)=(0,34):t(0,36)=*(0,72)getattrofunc:t(0,35)=(0,36):t(0,38)=*(0,73)setattrofunc:t(0,37)=(0,38):t(0,39)=*(0,74):t(0,41)=*(0,75)traverseproc:t(0,40)=(0,41):t(0,43)=*(0,76)inquiry:t(0,42)=(0,43):t(0,45)=*(0,77)richcmpfunc:t(0,44)=(0,45)getiterfunc:t(0,46)=(0,27)iternextfunc:t(0,47)=(0,27):t(0,48)=*(0,78):t(0,49)=*(0,79):t(0,50)=*(0,80)descrgetfunc:t(0,51)=(0,34)descrsetfunc:t(0,52)=(0,38)initproc:t(0,53)=(0,38):t(0,55)=*(0,81)allocfunc:t(0,54)=(0,55):t(0,57)=*(0,82)newfunc:t(0,56)=(0,57):t(0,59)=*(0,83)freefunc:t(0,58)=(0,59)char:t(0,60)=r(0,60);0;127;:t(0,61)=f(0,1):t(0,62)=f(0,5):t(0,63)=f(0,10):t(0,64)=f(0,5):t(0,65)=f(0,5):t(0,66)=f(0,10)PyNumberMethods:t(0,67)=(0,84)PySequenceMethods:t(0,68)=(0,85)PyMappingMethods:t(0,69)=(0,86):t(0,70)=f(0,7):t(0,71)=f(0,10):t(0,72)=f(0,10):t(0,73)=f(0,5)PyBufferProcs:t(0,74)=(0,87):t(0,75)=f(0,5):t(0,76)=f(0,5):t(0,77)=f(0,10)PyMethodDef:T(0,78)=s16ml_name:(0,15),0,32;ml_meth:(0,88),32,32;ml_flags:(0,5),64,32;ml_doc:(0,15),96,32;;:t(0,79)=xsPyMemberDef:PyGetSetDef:T(0,80)=s20name:(0,15),0,32;get:(0,89),32,32;set:(0,91),64,32;doc:(0,15),96,32;closure:(0,93),128,32;;:t(0,81)=f(0,10):t(0,82)=f(0,10):t(0,83)=f(0,1):T(0,84)=s152nb_add:(0,94),0,32;nb_subtract:(0,94),32,32;nb_multiply:(0,94),64,32;nb_divide:(0,94),96,32;nb_remainder:(0,94),128,32;nb_divmod:(0,94),160,32;nb_power:(0,33),192,32;nb_negative:(0,95),224,32;nb_positive:(0,95),256,32;nb_absolute:(0,95),288,32;nb_nonzero:(0,42),320,32;nb_invert:(0,95),352,32;nb_lshift:(0,94),384,32;nb_rshift:(0,94),416,32;nb_and:(0,94),448,32;nb_xor:(0,94),480,32;nb_or:(0,94),512,32;nb_coerce:(0,96),544,32;nb_int:(0,95),576,32;nb_long:(0,95),608,32;nb_float:(0,95),640,32;nb_oct:(0,95),672,32;nb_hex:(0,95),704,32;nb_inplace_add:(0,94),736,32;nb_inplace_subtract:(0,94),768,32;nb_inplace_multiply:(0,94),800,32;nb_inplace_divide:(0,94),832,32;nb_inplace_remainder:(0,94),864,32;nb_inplace_power:(0,33),896,32;nb_inplace_lshift:(0,94),928,32;nb_inplace_rshift:(0,94),960,32;nb_inplace_and:(0,94),992,32;nb_inplace_xor:(0,94),1024,32;nb_inplace_or:(0,94),1056,32;nb_floor_divide:(0,94),1088,32;nb_true_divide:(0,94),1120,32;nb_inplace_floor_divide:(0,94),1152,32;nb_inplace_true_divide:(0,94),1184,32;;:T(0,85)=s40sq_length:(0,42),0,32;sq_concat:(0,94),32,32;sq_repeat:(0,98),64,32;sq_item:(0,98),96,32;sq_slice:(0,100),128,32;sq_ass_item:(0,102),160,32;sq_ass_slice:(0,104),192,32;sq_contains:(0,106),224,32;sq_inplace_concat:(0,94),256,32;sq_inplace_repeat:(0,98),288,32;;:T(0,86)=s12mp_length:(0,42),0,32;mp_subscript:(0,94),32,32;mp_ass_subscript:(0,107),64,32;;:T(0,87)=s16bf_getreadbuffer:(0,108),0,32;bf_getwritebuffer:(0,110),32,32;bf_getsegcount:(0,111),64,32;bf_getcharbuffer:(0,113),96,32;;PyCFunction:t(0,88)=(0,36):t(0,90)=*(0,115)getter:t(0,89)=(0,90):t(0,92)=*(0,116)setter:t(0,91)=(0,92):t(0,93)=*(0,1)binaryfunc:t(0,94)=(0,36)unaryfunc:t(0,95)=(0,27):t(0,97)=*(0,117)coercion:t(0,96)=(0,97):t(0,99)=*(0,118)intargfunc:t(0,98)=(0,99):t(0,101)=*(0,119)intintargfunc:t(0,100)=(0,101):t(0,103)=*(0,120)intobjargproc:t(0,102)=(0,103):t(0,105)=*(0,121)intintobjargproc:t(0,104)=(0,105)objobjproc:t(0,106)=(0,25)objobjargproc:t(0,107)=(0,38):t(0,109)=*(0,122)getreadbufferproc:t(0,108)=(0,109)getwritebufferproc:t(0,110)=(0,109):t(0,112)=*(0,123)getsegcountproc:t(0,111)=(0,112):t(0,114)=*(0,124)getcharbufferproc:t(0,113)=(0,114):t(0,115)=f(0,10):t(0,116)=f(0,5):t(0,117)=f(0,5):t(0,118)=f(0,10):t(0,119)=f(0,10):t(0,120)=f(0,5):t(0,121)=f(0,5):t(0,122)=f(0,5):t(0,123)=f(0,5):t(0,124)=f(0,5)self:P(0,125)option:P(0,5):t(0,125)=*(0,126)LDAPObject:t(0,126)=(0,127):T(0,127)=s20ob_refcnt:(0,5),0,32;ob_type:(0,13),32,32;ldap:(0,128),64,32;_save:(0,129),96,32;valid:(0,5),128,32;;:t(0,128)=*(0,131):t(0,130)=*(0,132)_threadstate:t(0,129)=(0,130):t(0,131)=(0,133)PyThreadState:t(0,132)=(0,134):t(0,133)=xsldap:_ts:T(0,134)=s84next:(0,135),0,32;interp:(0,136),32,32;frame:(0,137),64,32;recursion_depth:(0,5),96,32;tracing:(0,5),128,32;use_tracing:(0,5),160,32;c_profilefunc:(0,138),192,32;c_tracefunc:(0,138),224,32;c_profileobj:(0,10),256,32;c_traceobj:(0,10),288,32;curexc_type:(0,10),320,32;curexc_value:(0,10),352,32;curexc_traceback:(0,10),384,32;exc_type:(0,10),416,32;exc_value:(0,10),448,32;exc_traceback:(0,10),480,32;dict:(0,10),512,32;tick_counter:(0,5),544,32;gilstate_counter:(0,5),576,32;async_exc:(0,10),608,32;thread_id:(0,7),640,32;;:t(0,135)=*(0,134):t(0,136)=*(0,140):t(0,137)=*(0,141):t(0,139)=*(0,142)Py_tracefunc:t(0,138)=(0,139)PyInterpreterState:t(0,140)=(0,143):t(0,141)=xs_frame::t(0,142)=f(0,5)_is:T(0,143)=s36next:(0,144),0,32;tstate_head:(0,135),32,32;modules:(0,10),64,32;sysdict:(0,10),96,32;builtins:(0,10),128,32;codec_search_path:(0,10),160,32;codec_search_cache:(0,10),192,32;codec_error_registry:(0,10),224,32;dlopenflags:(0,5),256,32;;:t(0,144)=*(0,143)res:r(0,5)int:t(0,5)intval:(0,5)tv:(0,4)apiinfo:(0,145)=xsLDAPAPIInfo:ldapapiinfo:T(0,146)=s24ldapai_info_version:(0,5),0,32;ldapai_api_version:(0,5),32,32;ldapai_protocol_version:(0,5),64,32;ldapai_extensions:(0,147),96,32;ldapai_vendor_name:(0,15),128,32;ldapai_vendor_version:(0,5),160,32;;LDAPAPIInfo:t(0,145)=(0,146):t(0,147)=*(0,15)lcs:(0,148)lc:r(0,149)strval:(0,15)char:t(0,60):t(0,148)=*(0,149):t(0,149)=*(0,150)LDAPControl:t(0,150)=(0,151)ldapcontrol:T(0,151)=s16ldctl_oid:(0,15),0,32;ldctl_value:(0,152),32,64;ldctl_iscritical:(0,60),96,8;;berval:T(0,152)=s8bv_len:(0,153),0,32;bv_val:(0,15),32,32;;long unsigned int:t(0,154)=r(0,154);0;037777777777;ber_len_t:t(0,153)=(0,154)extensions:r(0,10)v:r(0,10)i:r(0,155)Py_ssize_t:t(0,155)=(0,5)num_extensions:r(0,155)num_controls:r(0,155)ld:r(0,128)_save:r(0,129)_save:r(0,129)_save:r(0,129)_save:r(0,129)_save:r(0,129)LDAP_set_option:F(0,5)self:P(0,125)option:P(0,5)value:P(0,10)res:r(0,5)intval:(0,5)doubleval:(0,3)double:t(0,3)strval:(0,15)tv:(0,4)ptr:r(0,93)void:t(0,1)ld:r(0,128)_save:r(0,129)PK~0!!dsml.py""" dsml - generate and parse DSMLv1 data (see http://www.oasis-open.org/committees/dsml/) written by Michael Stroeder See http://python-ldap.sourceforge.net for details. $Id: dsml.py,v 1.9 2004/06/17 13:52:07 stroeder Exp $ Python compability note: Tested with Python 2.0+. """ __version__ = '0.5.2' import string,base64 def list_dict(l): """ return a dictionary with all items of l being the keys of the dictionary """ d = {} for i in l: d[i]=None return d special_entities = ( ('&','&'), ('<','<'), ('"','"'), ("'",'''), ) def replace_char(s): for char,entity in special_entities: s = string.replace(s,char,entity) return s class DSMLWriter: def __init__( self,f,base64_attrs=[],dsml_comment='',indent=' ' ): """ Parameters: f File object for output. base64_attrs Attribute types to be base64-encoded. dsml_comment Text placed in comment lines behind . indent String used for indentiation of next nested level. """ self._output_file = f self._base64_attrs = list_dict(map(string.lower,base64_attrs)) self._dsml_comment = dsml_comment self._indent = indent def _needs_base64_encoding(self,attr_type,attr_value): if self._base64_attrs: return self._base64_attrs.has_key(string.lower(attr_type)) else: try: unicode(attr_value,'utf-8') except UnicodeError: return 1 else: return 0 def writeHeader(self): """ Write the header """ self._output_file.write('\n'.join([ '', '', '', '%s\n' % (self._indent), ]) ) if self._dsml_comment: self._output_file.write('%s\n' % (self._indent)) def writeFooter(self): """ Write the footer """ self._output_file.write('%s\n' % (self._indent)) self._output_file.write('\n') def unparse(self,dn,entry): return self.writeRecord(dn,entry) def writeRecord(self,dn,entry): """ dn string-representation of distinguished name entry dictionary holding the LDAP entry {attr:data} """ # Write line dn: first self._output_file.write( '%s\n' % ( self._indent*2,replace_char(dn) ) ) objectclasses = entry.get('objectclass',entry.get('objectClass',[])) self._output_file.write('%s\n' % (self._indent*3)) for oc in objectclasses: self._output_file.write('%s%s\n' % (self._indent*4,oc)) self._output_file.write('%s\n' % (self._indent*3)) attr_types = entry.keys()[:] try: attr_types.remove('objectclass') attr_types.remove('objectClass') except ValueError: pass attr_types.sort() for attr_type in attr_types: self._output_file.write('%s\n' % (self._indent*3,attr_type)) for attr_value_item in entry[attr_type]: needs_base64_encoding = self._needs_base64_encoding( attr_type,attr_value_item ) if needs_base64_encoding: attr_value_item = base64.encodestring(attr_value_item) else: attr_value_item = replace_char(attr_value_item) self._output_file.write('%s\n' % ( self._indent*4, ' encoding="base64"'*needs_base64_encoding ) ) self._output_file.write('%s%s\n' % ( self._indent*5, attr_value_item ) ) self._output_file.write('%s\n' % ( self._indent*4, ) ) self._output_file.write('%s\n' % (self._indent*3)) self._output_file.write('%s\n' % (self._indent*2)) return try: import xml.sax,xml.sax.handler except ImportError: pass else: class DSMLv1Handler(xml.sax.handler.ContentHandler): """ Content handler class for DSMLv1 """ def __init__(self,parser_instance): self._parser_instance = parser_instance xml.sax.handler.ContentHandler.__init__(self) def startDocument(self): pass def endDocument(self): pass def startElement(self,raw_name,attrs): assert raw_name.startswith(''),'Illegal name' name = raw_name[5:] if name=='dsml': pass elif name=='directory-entries': self._parsing_entries = 1 elif name=='entry': self._dn = attrs['dn'] self._entry = {} elif name=='attr': self._attr_type = attrs['name'].encode('utf-8') self._attr_values = [] elif name=='value': self._attr_value = '' self._base64_encoding = attrs.get('encoding','').lower()=='base64' # Handle object class tags elif name=='objectclass': self._object_classes = [] elif name=='oc-value': self._oc_value = '' # Unhandled tags else: raise ValueError,'Unknown tag %s' % (raw_name) def endElement(self,raw_name): assert raw_name.startswith('dsml:'),'Illegal name' name = raw_name[5:] if name=='dsml': pass elif name=='directory-entries': self._parsing_entries = 0 elif name=='entry': self._parser_instance.handle(self._dn,self._entry) del self._dn del self._entry elif name=='attr': self._entry[self._attr_type] = self._attr_values del self._attr_type del self._attr_values elif name=='value': if self._base64_encoding: attr_value = base64.decodestring(self._attr_value.strip()) else: attr_value = self._attr_value.strip().encode('utf-8') self._attr_values.append(attr_value) del attr_value del self._attr_value del self._base64_encoding # Handle object class tags elif name=='objectclass': self._entry['objectClass'] = self._object_classes del self._object_classes elif name=='oc-value': self._object_classes.append(self._oc_value.strip().encode('utf-8')) del self._oc_value # Unhandled tags else: raise ValueError,'Unknown tag %s' % (raw_name) def characters(self,ch): if self.__dict__.has_key('_oc_value'): self._oc_value = self._oc_value + ch elif self.__dict__.has_key('_attr_value'): self._attr_value = self._attr_value + ch else: pass class DSMLParser: """ Base class for a DSMLv1 parser. Applications should sub-class this class and override method handle() to implement something meaningful. Public class attributes: records_read Counter for records processed so far """ def __init__( self, input_file, ContentHandlerClass, ignored_attr_types=None, max_entries=0, ): """ Parameters: input_file File-object to read the LDIF input from ignored_attr_types Attributes with these attribute type names will be ignored. max_entries If non-zero specifies the maximum number of entries to be read from f. line_sep String used as line separator """ self._input_file = input_file self._max_entries = max_entries self._ignored_attr_types = list_dict(map(string.lower,(ignored_attr_types or []))) self._current_record = None,None self.records_read = 0 self._parser = xml.sax.make_parser() self._parser.setFeature(xml.sax.handler.feature_namespaces,0) content_handler = ContentHandlerClass(self) self._parser.setContentHandler(content_handler) def handle(self,*args,**kwargs): """ Process a single content LDIF record. This method should be implemented by applications using LDIFParser. """ import pprint pprint.pprint(args) pprint.pprint(kwargs) def parse(self): """ Continously read and parse DSML records """ self._parser.parse(self._input_file) PKg6%--dsml.pyc; @c@sdZdZdkZdkZdZddfddfdd fd d ffZd Zd fdYZydkZ dk Z Wne j on4Xde i i ifdYZdfdYZdS(s* dsml - generate and parse DSMLv1 data (see http://www.oasis-open.org/committees/dsml/) written by Michael Stroeder See http://python-ldap.sourceforge.net for details. $Id: dsml.py,v 1.9 2004/06/17 13:52:07 stroeder Exp $ Python compability note: Tested with Python 2.0+. s0.5.2NcCs)h}x|D]}t||. indent String used for indentiation of next nested level. N( sfsselfs _output_files list_dictsmapsstringslowers base64_attrss _base64_attrss dsml_comments _dsml_commentsindents_indent(sselfsfs base64_attrss dsml_commentsindent((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys__init__*s   cCsZ|io|iiti|Sn0yt|dWntj o dSnXdSdS(Nsutf-8ii( sselfs _base64_attrsshas_keysstringslowers attr_typesunicodes attr_values UnicodeError(sselfs attr_types attr_value((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys_needs_base64_encoding=s  cCs|iididddd|ig|ioR|iid|i|iid|i|if|iid|ind S( s Write the header s s&sDs1s%s s%s N(sselfs _output_fileswritesjoins_indents _dsml_comment(sself((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys writeHeaderHs ,  cCs+|iid|i|iiddS(s Write the footer s%s s N(sselfs _output_fileswrites_indent(sself((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys writeFooterXscCs|i||SdS(N(sselfs writeRecordsdnsentry(sselfsdnsentry((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pysunparse_sc Cs|iid|idt|f|id|idg}|iid|idx/|D]'}|iid|id|fqgW|iid |id|i }y|i d|i dWnt j onX|ix|D]}|iid |id|fx||D]}|i||}|oti|}n t|}|iid |idd |f|iid |id|f|iid|idfq1W|iid|idqW|iid|iddSdS(s dn string-representation of distinguished name entry dictionary holding the LDAP entry {attr:data} s%s is objectclasss objectClasss%s is$%s%s is%s s%s s%s s encoding="base64"s%s%s is%s s%s s%s N(sselfs _output_fileswrites_indents replace_charsdnsentrysgets objectclassessocskeyss attr_typessremoves ValueErrorssorts attr_typesattr_value_items_needs_base64_encodingsneeds_base64_encodingsbase64s encodestring( sselfsdnsentrys attr_typessattr_value_itemsocs attr_types objectclassessneeds_base64_encoding((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys writeRecordbs<'%   !  %!"(s__name__s __module__s__init__s_needs_base64_encodings writeHeaders writeFootersunparses writeRecord(((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys DSMLWriter(s    s DSMLv1HandlercBsDtZdZdZdZdZdZdZdZRS(s* Content handler class for DSMLv1 cCs#||_tiiii|dS(N(sparser_instancesselfs_parser_instancesxmlssaxshandlersContentHandlers__init__(sselfsparser_instance((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys__init__s cCsdS(N((sself((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys startDocumentscCsdS(N((sself((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys endDocumentscCs&|idp td|d}|djon|djo d|_n|djo|d|_h|_n|d jo#|d i d |_ g|_ n}|d jo.d|_ |i d didj|_nB|djo g|_n(|djo d|_ntd|dS(Nss Illegal nameisdsmlsdirectory-entriesisentrysdnsattrsnamesutf-8svaluesencodingsbase64s objectclasssoc-valuesUnknown tag %s(sraw_names startswithsAssertionErrorsnamesselfs_parsing_entriessattrss_dns_entrysencodes _attr_types _attr_valuess _attr_valuesgetslowers_base64_encodings_object_classess _oc_values ValueError(sselfsraw_namesattrssname((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys startElements(           %    cCs|idp td|d}|djon\|djo d|_nB|djo)|ii|i|i |`|` n |djo#|i |i |i <|` |` n|d joa|i ot i|ii}n|iiid }|i i|~|`|` nn|d jo|i|i d <|`nG|d jo,|ii|iiid |`ntd|dS(Nsdsml:s Illegal nameisdsmlsdirectory-entriesisentrysattrsvaluesutf-8s objectclasss objectClasssoc-valuesUnknown tag %s(sraw_names startswithsAssertionErrorsnamesselfs_parsing_entriess_parser_instanceshandles_dns_entrys _attr_valuess _attr_types_base64_encodingsbase64s decodestrings _attr_valuesstrips attr_valuesencodesappends_object_classess _oc_values ValueError(sselfsraw_namesnames attr_value((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys endElements:              " cCsR|iido|i||_n(|iido|i||_ndS(Ns _oc_values _attr_value(sselfs__dict__shas_keys _oc_valueschs _attr_value(sselfsch((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys characterss ( s__name__s __module__s__doc__s__init__s startDocuments endDocuments startElements endElements characters(((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys DSMLv1Handlers      #s DSMLParsercBs/tZdZeddZdZdZRS(s Base class for a DSMLv1 parser. Applications should sub-class this class and override method handle() to implement something meaningful. Public class attributes: records_read Counter for records processed so far icCs||_||_ttti|pg|_ t t f|_ d|_ tii|_|iitiiid||}|ii|dS(s_ Parameters: input_file File-object to read the LDIF input from ignored_attr_types Attributes with these attribute type names will be ignored. max_entries If non-zero specifies the maximum number of entries to be read from f. line_sep String used as line separator iN(s input_filesselfs _input_files max_entriess _max_entriess list_dictsmapsstringslowersignored_attr_typess_ignored_attr_typessNones_current_records records_readsxmlssaxs make_parsers_parsers setFeatureshandlersfeature_namespacessContentHandlerClassscontent_handlerssetContentHandler(sselfs input_filesContentHandlerClasssignored_attr_typess max_entriesscontent_handler((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys__init__s  "  cOs'dk}|i||i|dS(s} Process a single content LDIF record. This method should be implemented by applications using LDIFParser. N(spprintsargsskwargs(sselfsargsskwargsspprint((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pyshandle s  cCs|ii|idS(s5 Continously read and parse DSML records N(sselfs_parsersparses _input_file(sself((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pysparse)s(s__name__s __module__s__doc__sNones__init__shandlesparse(((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys DSMLParsers  (s__doc__s __version__sstringsbase64s list_dictsspecial_entitiess replace_chars DSMLWritersxml.saxsxmlsxml.sax.handlers ImportErrorssaxshandlersContentHandlers DSMLv1Handlers DSMLParser( sxmls replace_charsstringsbase64s DSMLv1Handlersspecial_entitiess DSMLParsers list_dicts __version__s DSMLWriter((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys? s * tTPKg6۱N-N-dsml.pyo; @c@sdZdZdkZdkZdZddfddfdd fd d ffZd Zd fdYZydkZ dk Z Wne j on4Xde i i ifdYZdfdYZdS(s* dsml - generate and parse DSMLv1 data (see http://www.oasis-open.org/committees/dsml/) written by Michael Stroeder See http://python-ldap.sourceforge.net for details. $Id: dsml.py,v 1.9 2004/06/17 13:52:07 stroeder Exp $ Python compability note: Tested with Python 2.0+. s0.5.2NcCs)h}x|D]}t||. indent String used for indentiation of next nested level. N( sfsselfs _output_files list_dictsmapsstringslowers base64_attrss _base64_attrss dsml_comments _dsml_commentsindents_indent(sselfsfs base64_attrss dsml_commentsindent((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys__init__*s   cCsZ|io|iiti|Sn0yt|dWntj o dSnXdSdS(Nsutf-8ii( sselfs _base64_attrsshas_keysstringslowers attr_typesunicodes attr_values UnicodeError(sselfs attr_types attr_value((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys_needs_base64_encoding=s  cCs|iididddd|ig|ioR|iid|i|iid|i|if|iid|ind S( s Write the header s s&sDs1s%s s%s N(sselfs _output_fileswritesjoins_indents _dsml_comment(sself((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys writeHeaderHs ,  cCs+|iid|i|iiddS(s Write the footer s%s s N(sselfs _output_fileswrites_indent(sself((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys writeFooterXscCs|i||SdS(N(sselfs writeRecordsdnsentry(sselfsdnsentry((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pysunparse_sc Cs|iid|idt|f|id|idg}|iid|idx/|D]'}|iid|id|fqgW|iid |id|i }y|i d|i dWnt j onX|ix|D]}|iid |id|fx||D]}|i||}|oti|}n t|}|iid |idd |f|iid |id|f|iid|idfq1W|iid|idqW|iid|iddSdS(s dn string-representation of distinguished name entry dictionary holding the LDAP entry {attr:data} s%s is objectclasss objectClasss%s is$%s%s is%s s%s s%s s encoding="base64"s%s%s is%s s%s s%s N(sselfs _output_fileswrites_indents replace_charsdnsentrysgets objectclassessocskeyss attr_typessremoves ValueErrorssorts attr_typesattr_value_items_needs_base64_encodingsneeds_base64_encodingsbase64s encodestring( sselfsdnsentrys attr_typessattr_value_itemsocs attr_types objectclassessneeds_base64_encoding((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys writeRecordbs<'%   !  %!"(s__name__s __module__s__init__s_needs_base64_encodings writeHeaders writeFootersunparses writeRecord(((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys DSMLWriter(s    s DSMLv1HandlercBsDtZdZdZdZdZdZdZdZRS(s* Content handler class for DSMLv1 cCs#||_tiiii|dS(N(sparser_instancesselfs_parser_instancesxmlssaxshandlersContentHandlers__init__(sselfsparser_instance((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys__init__s cCsdS(N((sself((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys startDocumentscCsdS(N((sself((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys endDocumentscCs |d}|djon|djo d|_n|djo|d|_h|_n|djo#|did |_g|_ n}|d jo.d |_ |i d d i d j|_ nB|djo g|_n(|djo d |_ntd|dS(Nisdsmlsdirectory-entriesisentrysdnsattrsnamesutf-8svaluessencodingsbase64s objectclasssoc-valuesUnknown tag %s(sraw_namesnamesselfs_parsing_entriessattrss_dns_entrysencodes _attr_types _attr_valuess _attr_valuesgetslowers_base64_encodings_object_classess _oc_values ValueError(sselfsraw_namesattrssname((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys startElements(           %    cCsz|d}|djon\|djo d|_nB|djo)|ii|i|i|`|`n |djo#|i|i|i <|` |`n|djoa|i ot i |i i}n|i iid}|ii|~|` |` nn|d jo|i|id <|`nG|d jo,|ii|iiid|`ntd |dS( Nisdsmlsdirectory-entriesisentrysattrsvaluesutf-8s objectclasss objectClasssoc-valuesUnknown tag %s(sraw_namesnamesselfs_parsing_entriess_parser_instanceshandles_dns_entrys _attr_valuess _attr_types_base64_encodingsbase64s decodestrings _attr_valuesstrips attr_valuesencodesappends_object_classess _oc_values ValueError(sselfsraw_namesnames attr_value((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys endElements:              " cCsR|iido|i||_n(|iido|i||_ndS(Ns _oc_values _attr_value(sselfs__dict__shas_keys _oc_valueschs _attr_value(sselfsch((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys characterss ( s__name__s __module__s__doc__s__init__s startDocuments endDocuments startElements endElements characters(((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys DSMLv1Handlers      #s DSMLParsercBs/tZdZeddZdZdZRS(s Base class for a DSMLv1 parser. Applications should sub-class this class and override method handle() to implement something meaningful. Public class attributes: records_read Counter for records processed so far icCs||_||_ttti|pg|_ t t f|_ d|_ tii|_|iitiiid||}|ii|dS(s_ Parameters: input_file File-object to read the LDIF input from ignored_attr_types Attributes with these attribute type names will be ignored. max_entries If non-zero specifies the maximum number of entries to be read from f. line_sep String used as line separator iN(s input_filesselfs _input_files max_entriess _max_entriess list_dictsmapsstringslowersignored_attr_typess_ignored_attr_typessNones_current_records records_readsxmlssaxs make_parsers_parsers setFeatureshandlersfeature_namespacessContentHandlerClassscontent_handlerssetContentHandler(sselfs input_filesContentHandlerClasssignored_attr_typess max_entriesscontent_handler((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys__init__s  "  cOs'dk}|i||i|dS(s} Process a single content LDIF record. This method should be implemented by applications using LDIFParser. N(spprintsargsskwargs(sselfsargsskwargsspprint((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pyshandle s  cCs|ii|idS(s5 Continously read and parse DSML records N(sselfs_parsersparses _input_file(sself((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pysparse)s(s__name__s __module__s__doc__sNones__init__shandlesparse(((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys DSMLParsers  (s__doc__s __version__sstringsbase64s list_dictsspecial_entitiess replace_chars DSMLWritersxml.saxsxmlsxml.sax.handlers ImportErrorssaxshandlersContentHandlers DSMLv1Handlers DSMLParser( sxmls replace_charsstringsbase64s DSMLv1Handlersspecial_entitiess DSMLParsers list_dicts __version__s DSMLWriter((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/dsml.pys? s * tTPKj2ާ0.. ldapurl.py""" ldapurl - handling of LDAP URLs as described in RFC 2255 written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: ldapurl.py,v 1.33 2005/06/01 22:11:20 stroeder Exp $ Python compability note: This module only works with Python 2.0+ since 1. string methods are used instead of module string and 2. list comprehensions are used. """ __version__ = '0.5.2' __all__ = [ # constants 'SEARCH_SCOPE','SEARCH_SCOPE_STR', 'LDAP_SCOPE_BASE','LDAP_SCOPE_ONELEVEL','LDAP_SCOPE_SUBTREE', # functions 'isLDAPUrl', # classes 'LDAPUrlExtension','LDAPUrlExtensions','LDAPUrl' ] import UserDict from urllib import quote,unquote LDAP_SCOPE_BASE = 0 LDAP_SCOPE_ONELEVEL = 1 LDAP_SCOPE_SUBTREE = 2 SEARCH_SCOPE_STR = {None:'',0:'base',1:'one',2:'sub'} SEARCH_SCOPE = { '':None, # the search scope strings defined in RFC2255 'base':LDAP_SCOPE_BASE, 'one':LDAP_SCOPE_ONELEVEL, 'sub':LDAP_SCOPE_SUBTREE, } # Some widely used types StringType = type('') TupleType=type(()) def isLDAPUrl(s): """ Returns 1 if s is a LDAP URL, 0 else """ s_lower = s.lower() return \ s_lower.startswith('ldap://') or \ s_lower.startswith('ldaps://') or \ s_lower.startswith('ldapi://') def ldapUrlEscape(s): """Returns URL encoding of string s""" return quote(s).replace(',','%2C').replace('/','%2F') class LDAPUrlExtension: """ Class for parsing and unparsing LDAP URL extensions as described in RFC 2255. BNF definition of LDAP URL extensions: extensions = extension *("," extension) extension = ["!"] extype ["=" exvalue] extype = token / xtoken exvalue = LDAPString from section 4.1.2 of [2] token = oid from section 4.1 of [3] xtoken = ("X-" / "x-") token Usable class attributes: critical Boolean integer marking the extension as critical extype Type of extension exvalue Value of extension """ def __init__(self,extensionStr=None,critical=0,extype=None,exvalue=None): self.critical = critical self.extype = extype self.exvalue = exvalue if extensionStr: self._parse(extensionStr) def _parse(self,extension): extension = extension.strip() if not extension: # Don't parse empty strings self.extype,self.exvalue = None,None return self.critical = extension[0]=='!' if extension[0]=='!': extension = extension[1:].strip() self.extype,self.exvalue = extension.split('=',1) self.extype = self.extype.strip() self.exvalue = unquote(self.exvalue.strip()) def unparse(self): return '%s%s=%s' % ( '!'*(self.critical>0), self.extype,(self.exvalue or '').replace(',',r'%2C') ) def __str__(self): return self.unparse() def __repr__(self): return '<%s.%s instance at %s: %s>' % ( self.__class__.__module__, self.__class__.__name__, hex(id(self)), self.__dict__ ) def __eq__(self,other): return \ (self.critical==other.critical) and \ (self.extype==other.extype) and \ (self.exvalue==other.exvalue) def __ne__(self,other): return not self.__eq__(other) class LDAPUrlExtensions(UserDict.UserDict): """ Models a collection of LDAP URL extensions as dictionary type """ def __init__(self,default=None): UserDict.UserDict.__init__(self) for k,v in (default or {}).items(): self[k]=v def __setitem__(self,name,value): """ value Either LDAPUrlExtension instance, (critical,exvalue) or string'ed exvalue """ assert isinstance(value,LDAPUrlExtension) assert name==value.extype self.data[name] = value def values(self): return [ self[k] for k in self.keys() ] def __str__(self): return ','.join(map(str,self.values())) def __repr__(self): return '<%s.%s instance at %s: %s>' % ( self.__class__.__module__, self.__class__.__name__, hex(id(self)), self.data ) def __eq__(self,other): assert isinstance(other,self.__class__),TypeError( "other has to be instance of %s" % (self.__class__) ) return self.data==other.data def parse(self,extListStr): for extension_str in extListStr.strip().split(','): e = LDAPUrlExtension(extension_str) self[e.extype] = e def unparse(self): return ','.join([ v.unparse() for v in self.values() ]) class LDAPUrl: """ Class for parsing and unparsing LDAP URLs as described in RFC 2255. BNF definition of LDAP URL: hostport host:port dn distinguished name attributes list with attributes scope search scope string filter LDAP search filter ldapurl = scheme "://" [hostport] ["/" [dn ["?" [attrs] ["?" [scope] ["?" [filter] ["?" extensions]]]]]] Usable class attributes: urlscheme URL scheme (either ldap, ldaps or ldapi) hostport LDAP host (default '') dn String holding distinguished name (default '') attrs list of attribute types (default None) scope integer search scope for ldap-module filterstr String representation of LDAP Search Filters (see RFC 2254) extensions Dictionary used as extensions store who Maps automagically to bindname LDAP URL extension cred Maps automagically to X-BINDPW LDAP URL extension """ attr2extype = {'who':'bindname','cred':'X-BINDPW'} def __init__( self, ldapUrl=None, urlscheme='ldap', hostport='',dn='',attrs=None,scope=None,filterstr=None, extensions=None, who=None,cred=None ): self.urlscheme=urlscheme self.hostport=hostport self.dn=dn self.attrs=attrs self.scope=scope self.filterstr=filterstr self.extensions=(extensions or LDAPUrlExtensions({})) if ldapUrl!=None: self._parse(ldapUrl) if who!=None: self.who = who if cred!=None: self.cred = cred def __eq__(self,other): return \ self.urlscheme==other.urlscheme and \ self.hostport==other.hostport and \ self.dn==other.dn and \ self.attrs==other.attrs and \ self.scope==other.scope and \ self.filterstr==other.filterstr and \ self.extensions==other.extensions def __ne__(self,other): return not self.__eq__(other) def _parse(self,ldap_url): """ parse a LDAP URL and set the class attributes urlscheme,host,dn,attrs,scope,filterstr,extensions """ if not isLDAPUrl(ldap_url): raise ValueError,'Parameter ldap_url does not seem to be a LDAP URL.' scheme,rest = ldap_url.split('://',1) self.urlscheme = scheme.strip() if not self.urlscheme in ['ldap','ldaps','ldapi']: raise ValueError,'LDAP URL contains unsupported URL scheme %s.' % (self.urlscheme) slash_pos = rest.find('/') qemark_pos = rest.find('?') if (slash_pos==-1) and (qemark_pos==-1): # No / and ? found at all self.hostport = unquote(rest) self.dn = '' return else: if slash_pos!=-1 and (qemark_pos==-1 or (slash_posqemark_pos)): # Question mark separates hostport from rest, DN is assumed to be empty self.hostport = unquote(rest[:qemark_pos]) # Do not eat question mark rest = rest[qemark_pos:] else: raise ValueError,'Something completely weird happened!' paramlist=rest.split('?') paramlist_len = len(paramlist) if paramlist_len>=1: self.dn = unquote(paramlist[0]).strip() if (paramlist_len>=2) and (paramlist[1]): self.attrs = unquote(paramlist[1].strip()).split(',') if paramlist_len>=3: scope = paramlist[2].strip() try: self.scope = SEARCH_SCOPE[scope] except KeyError: raise ValueError,"Search scope must be either one of base, one or sub. LDAP URL contained %s" % (repr(scope)) if paramlist_len>=4: filterstr = paramlist[3].strip() if not filterstr: self.filterstr = None else: self.filterstr = unquote(filterstr) if paramlist_len>=5: self.extensions = LDAPUrlExtensions() self.extensions.parse(paramlist[4]) return def applyDefaults(self,defaults): """ Apply defaults to all class attributes which are None. defaults Dictionary containing a mapping from class attributes to default values """ for k in defaults.keys(): if getattr(self,k) is None: setattr(self,k,defaults[k]) def initializeUrl(self): """ Returns LDAP URL suitable to be passed to ldap.initialize() """ if self.urlscheme=='ldapi': # hostport part might contain slashes when ldapi:// is used hostport = ldapUrlEscape(self.hostport) else: hostport = self.hostport return '%s://%s' % (self.urlscheme,hostport) def unparse(self): """ Returns LDAP URL depending on class attributes set. """ if self.attrs is None: attrs_str = '' else: attrs_str = ','.join(self.attrs) scope_str = SEARCH_SCOPE_STR[self.scope] if self.filterstr is None: filterstr = '' else: filterstr = ldapUrlEscape(self.filterstr) dn = ldapUrlEscape(self.dn) if self.urlscheme=='ldapi': # hostport part might contain slashes when ldapi:// is used hostport = ldapUrlEscape(self.hostport) else: hostport = self.hostport ldap_url = '%s://%s/%s?%s?%s?%s' % ( self.urlscheme, hostport,dn,attrs_str,scope_str,filterstr ) if self.extensions: ldap_url = ldap_url+'?'+self.extensions.unparse() return ldap_url def htmlHREF(self,urlPrefix='',hrefText=None,hrefTarget=None): """Complete """ assert type(urlPrefix)==StringType, "urlPrefix must be StringType" if hrefText is None: hrefText = self.unparse() assert type(hrefText)==StringType, "hrefText must be StringType" if hrefTarget is None: target = '' else: assert type(hrefTarget)==StringType, "hrefTarget must be StringType" target = ' target="%s"' % hrefTarget return '%s' % ( target,urlPrefix,self.unparse(),hrefText ) def __str__(self): return self.unparse() def __repr__(self): return '<%s.%s instance at %s: %s>' % ( self.__class__.__module__, self.__class__.__name__, hex(id(self)), self.__dict__ ) def __getattr__(self,name): if self.attr2extype.has_key(name): extype = self.attr2extype[name] if self.extensions.has_key(extype): result = unquote(self.extensions[extype].exvalue) else: return None else: raise AttributeError,"%s has no attribute %s" % ( self.__class__.__name__,name ) return result # __getattr__() def __setattr__(self,name,value): if self.attr2extype.has_key(name): extype = self.attr2extype[name] if value is None: # A value of None means that extension is deleted delattr(self,name) elif value!=None: # Add appropriate extension self.extensions[extype] = LDAPUrlExtension( extype=extype,exvalue=unquote(value) ) else: self.__dict__[name] = value def __delattr__(self,name): if self.attr2extype.has_key(name): extype = self.attr2extype[name] try: del self.extensions[extype] except KeyError: pass else: del self.__dict__[name] PKg6}CC ldapurl.pyc; 2Bc @sdZdZdddddddd d g Zd kZd klZlZd ZdZdZ he d<d d<dd<dd See http://python-ldap.sourceforge.net for details. \$Id: ldapurl.py,v 1.33 2005/06/01 22:11:20 stroeder Exp $ Python compability note: This module only works with Python 2.0+ since 1. string methods are used instead of module string and 2. list comprehensions are used. s0.5.2s SEARCH_SCOPEsSEARCH_SCOPE_STRsLDAP_SCOPE_BASEsLDAP_SCOPE_ONELEVELsLDAP_SCOPE_SUBTREEs isLDAPUrlsLDAPUrlExtensionsLDAPUrlExtensionssLDAPUrlN(squotesunquoteiiissbasesonessubcCs=|i}|idp|idp |idSdS(s* Returns 1 if s is a LDAP URL, 0 else sldap://sldaps://sldapi://N(ssslowerss_lowers startswith(ssss_lower((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys isLDAPUrl2s cCs&t|iddiddSdS(s Returns URL encoding of string ss,s%2Cs/s%2FN(squotesssreplace(ss((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys ldapUrlEscape=scBsYtZdZedeedZdZdZdZdZdZ dZ RS( s? Class for parsing and unparsing LDAP URL extensions as described in RFC 2255. BNF definition of LDAP URL extensions: extensions = extension *("," extension) extension = ["!"] extype ["=" exvalue] extype = token / xtoken exvalue = LDAPString from section 4.1.2 of [2] token = oid from section 4.1 of [3] xtoken = ("X-" / "x-") token Usable class attributes: critical Boolean integer marking the extension as critical extype Type of extension exvalue Value of extension icCs7||_||_||_|o|i|ndS(N(scriticalsselfsextypesexvalues extensionStrs_parse(sselfs extensionStrscriticalsextypesexvalue((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__init__Ys    cCs|i}| o ttf\|_|_dSn|ddj|_|ddjo|di}n|idd\|_|_|ii|_t|ii|_dS(Nis!is=( s extensionsstripsNonesselfsextypesexvaluescriticalssplitsunquote(sselfs extension((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys_parse`s cCs;dd|idj|i|ipdiddfSdS(Ns%s%s=%ss!iss,s%2C(sselfscriticalsextypesexvaluesreplace(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pysunparsemscCs|iSdS(N(sselfsunparse(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__str__sscCs3d|ii|iitt||ifSdS(Ns<%s.%s instance at %s: %s>(sselfs __class__s __module__s__name__shexsids__dict__(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__repr__vscCs:|i|ijo#|i|ijo|i|ijSdS(N(sselfscriticalsothersextypesexvalue(sselfsother((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__eq__~scCs|i| SdS(N(sselfs__eq__sother(sselfsother((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__ne__s( s__name__s __module__s__doc__sNones__init__s_parsesunparses__str__s__repr__s__eq__s__ne__(((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pysLDAPUrlExtensionBs     cBsYtZdZedZdZdZdZdZdZ dZ dZ RS( sE Models a collection of LDAP URL extensions as dictionary type cCsBtii|x+|phiD]\}}|||(sselfs __class__s __module__s__name__shexsidsdata(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__repr__scCs>t||ipttd|i|i|ijSdS(Nsother has to be instance of %s(s isinstancesothersselfs __class__sAssertionErrors TypeErrorsdata(sselfsother((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__eq__s*cCs=x6|iidD]}t|}|||idigi}|iD]}||iq~SdS(Ns,(sjoinsappends_[1]sselfsvaluessvsunparse(sselfs_[1]sv((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pysunparses( s__name__s __module__s__doc__sNones__init__s __setitem__svaluess__str__s__repr__s__eq__sparsesunparse(((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pysLDAPUrlExtensionss       c BstZdZhdd<dds  cCsA|idjot|i}n |i}d|i|fSdS(sE Returns LDAP URL suitable to be passed to ldap.initialize() sldapis%s://%sN(sselfs urlschemes ldapUrlEscapeshostport(sselfshostport((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys initializeUrlJs  cCs|itjo d}ndi|i}t|i}|itjo d}nt |i}t |i }|i djot |i }n |i }d|i |||||f}|io|d|ii}n|SdS(s= Returns LDAP URL depending on class attributes set. ss,sldapis%s://%s/%s?%s?%s?%ss?N(sselfsattrssNones attrs_strsjoinsSEARCH_SCOPE_STRsscopes scope_strs filterstrs ldapUrlEscapesdns urlschemeshostportsldap_urls extensionssunparse(sselfsdnsldap_urls filterstrs attrs_strshostports scope_str((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pysunparseUs      cCst|tjp td|tjo|i}nt|tjp td|tjo d}n(t|tjp tdd|}d|||i|fSdS(s Complete surlPrefix must be StringTypeshrefText must be StringTypesshrefTarget must be StringTypes target="%s"s%sN( stypes urlPrefixs StringTypesAssertionErrorshrefTextsNonesselfsunparses hrefTargetstarget(sselfs urlPrefixshrefTexts hrefTargetstarget((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pyshtmlHREFps    cCs|iSdS(N(sselfsunparse(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__str__scCs3d|ii|iitt||ifSdS(Ns<%s.%s instance at %s: %s>(sselfs __class__s __module__s__name__shexsids__dict__(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__repr__scCsv|ii|oB|i|}|ii|ot|i|i}qnt Snt d|i i |f|SdS(Ns%s has no attribute %s( sselfs attr2extypeshas_keysnamesextypes extensionssunquotesexvaluesresultsNonesAttributeErrors __class__s__name__(sselfsnamesextypesresult((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys __getattr__s cCs|ii|ob|i|}|tjot||q|tjo&td|dt ||i | See http://python-ldap.sourceforge.net for details. \$Id: ldapurl.py,v 1.33 2005/06/01 22:11:20 stroeder Exp $ Python compability note: This module only works with Python 2.0+ since 1. string methods are used instead of module string and 2. list comprehensions are used. s0.5.2s SEARCH_SCOPEsSEARCH_SCOPE_STRsLDAP_SCOPE_BASEsLDAP_SCOPE_ONELEVELsLDAP_SCOPE_SUBTREEs isLDAPUrlsLDAPUrlExtensionsLDAPUrlExtensionssLDAPUrlN(squotesunquoteiiissbasesonessubcCs=|i}|idp|idp |idSdS(s* Returns 1 if s is a LDAP URL, 0 else sldap://sldaps://sldapi://N(ssslowerss_lowers startswith(ssss_lower((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys isLDAPUrl2s cCs&t|iddiddSdS(s Returns URL encoding of string ss,s%2Cs/s%2FN(squotesssreplace(ss((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys ldapUrlEscape=scBsYtZdZedeedZdZdZdZdZdZ dZ RS( s? Class for parsing and unparsing LDAP URL extensions as described in RFC 2255. BNF definition of LDAP URL extensions: extensions = extension *("," extension) extension = ["!"] extype ["=" exvalue] extype = token / xtoken exvalue = LDAPString from section 4.1.2 of [2] token = oid from section 4.1 of [3] xtoken = ("X-" / "x-") token Usable class attributes: critical Boolean integer marking the extension as critical extype Type of extension exvalue Value of extension icCs7||_||_||_|o|i|ndS(N(scriticalsselfsextypesexvalues extensionStrs_parse(sselfs extensionStrscriticalsextypesexvalue((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__init__Ys    cCs|i}| o ttf\|_|_dSn|ddj|_|ddjo|di}n|idd\|_|_|ii|_t|ii|_dS(Nis!is=( s extensionsstripsNonesselfsextypesexvaluescriticalssplitsunquote(sselfs extension((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys_parse`s cCs;dd|idj|i|ipdiddfSdS(Ns%s%s=%ss!iss,s%2C(sselfscriticalsextypesexvaluesreplace(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pysunparsemscCs|iSdS(N(sselfsunparse(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__str__sscCs3d|ii|iitt||ifSdS(Ns<%s.%s instance at %s: %s>(sselfs __class__s __module__s__name__shexsids__dict__(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__repr__vscCs:|i|ijo#|i|ijo|i|ijSdS(N(sselfscriticalsothersextypesexvalue(sselfsother((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__eq__~scCs|i| SdS(N(sselfs__eq__sother(sselfsother((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__ne__s( s__name__s __module__s__doc__sNones__init__s_parsesunparses__str__s__repr__s__eq__s__ne__(((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pysLDAPUrlExtensionBs     cBsYtZdZedZdZdZdZdZdZ dZ dZ RS( sE Models a collection of LDAP URL extensions as dictionary type cCsBtii|x+|phiD]\}}|||(sselfs __class__s __module__s__name__shexsidsdata(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__repr__scCs|i|ijSdS(N(sselfsdatasother(sselfsother((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__eq__scCs=x6|iidD]}t|}|||idigi}|iD]}||iq~SdS(Ns,(sjoinsappends_[1]sselfsvaluessvsunparse(sselfs_[1]sv((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pysunparses( s__name__s __module__s__doc__sNones__init__s __setitem__svaluess__str__s__repr__s__eq__sparsesunparse(((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pysLDAPUrlExtensionss       c BstZdZhdd<dds  cCsA|idjot|i}n |i}d|i|fSdS(sE Returns LDAP URL suitable to be passed to ldap.initialize() sldapis%s://%sN(sselfs urlschemes ldapUrlEscapeshostport(sselfshostport((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys initializeUrlJs  cCs|itjo d}ndi|i}t|i}|itjo d}nt |i}t |i }|i djot |i }n |i }d|i |||||f}|io|d|ii}n|SdS(s= Returns LDAP URL depending on class attributes set. ss,sldapis%s://%s/%s?%s?%s?%ss?N(sselfsattrssNones attrs_strsjoinsSEARCH_SCOPE_STRsscopes scope_strs filterstrs ldapUrlEscapesdns urlschemeshostportsldap_urls extensionssunparse(sselfsdnsldap_urls filterstrs attrs_strshostports scope_str((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pysunparseUs      cCs\|tjo|i}n|tjo d}n d|}d|||i|fSdS(s Complete ss target="%s"s%sN(shrefTextsNonesselfsunparses hrefTargetstargets urlPrefix(sselfs urlPrefixshrefTexts hrefTargetstarget((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pyshtmlHREFps    cCs|iSdS(N(sselfsunparse(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__str__scCs3d|ii|iitt||ifSdS(Ns<%s.%s instance at %s: %s>(sselfs __class__s __module__s__name__shexsids__dict__(sself((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys__repr__scCsv|ii|oB|i|}|ii|ot|i|i}qnt Snt d|i i |f|SdS(Ns%s has no attribute %s( sselfs attr2extypeshas_keysnamesextypes extensionssunquotesexvaluesresultsNonesAttributeErrors __class__s__name__(sselfsnamesextypesresult((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldapurl.pys __getattr__s cCs|ii|ob|i|}|tjot||q|tjo&td|dt ||i | See http://python-ldap.sourceforge.net for details. $Id: ldif.py,v 1.46 2007/05/23 22:04:15 stroeder Exp $ Python compability note: Tested with Python 2.0+, but should work with Python 1.5.2+. """ __version__ = '0.5.5' __all__ = [ # constants 'ldif_pattern', # functions 'AttrTypeandValueLDIF','CreateLDIF','ParseLDIF', # classes 'LDIFWriter', 'LDIFParser', 'LDIFRecordList', 'LDIFCopy', ] import urlparse,urllib,base64,re,types try: from cStringIO import StringIO except ImportError: from StringIO import StringIO attrtype_pattern = r'[\w;.]+(;[\w_-]+)*' attrvalue_pattern = r'(([^,]|\\,)+|".*?")' rdn_pattern = attrtype_pattern + r'[ ]*=[ ]*' + attrvalue_pattern dn_pattern = rdn_pattern + r'([ ]*,[ ]*' + rdn_pattern + r')*[ ]*' dn_regex = re.compile('^%s$' % dn_pattern) ldif_pattern = '^((dn(:|::) %(dn_pattern)s)|(%(attrtype_pattern)s(:|::) .*)$)+' % vars() MOD_OP_INTEGER = { 'add':0,'delete':1,'replace':2 } MOD_OP_STR = { 0:'add',1:'delete',2:'replace' } CHANGE_TYPES = ['add','delete','modify','modrdn'] valid_changetype_dict = {} for c in CHANGE_TYPES: valid_changetype_dict[c]=None SAFE_STRING_PATTERN = '(^(\000|\n|\r| |:|<)|[\000\n\r\200-\377]+|[ ]+$)' safe_string_re = re.compile(SAFE_STRING_PATTERN) def is_dn(s): """ returns 1 if s is a LDAP DN """ if s=='': return 1 rm = dn_regex.match(s) return rm!=None and rm.group(0)==s def needs_base64(s): """ returns 1 if s has to be base-64 encoded because of special chars """ return not safe_string_re.search(s) is None def list_dict(l): """ return a dictionary with all items of l being the keys of the dictionary """ return dict([(i,None) for i in l]) class LDIFWriter: """ Write LDIF entry or change records to file object Copy LDIF input to a file output object containing all data retrieved via URLs """ def __init__(self,output_file,base64_attrs=None,cols=76,line_sep='\n'): """ output_file file object for output base64_attrs list of attribute types to be base64-encoded in any case cols Specifies how many columns a line may have before it's folded into many lines. line_sep String used as line separator """ self._output_file = output_file self._base64_attrs = list_dict([a.lower() for a in (base64_attrs or [])]) self._cols = cols self._line_sep = line_sep self.records_written = 0 def _unfoldLDIFLine(self,line): """ Write string line as one or more folded lines """ # Check maximum line length line_len = len(line) if line_len<=self._cols: self._output_file.write(line) self._output_file.write(self._line_sep) else: # Fold line pos = self._cols self._output_file.write(line[0:min(line_len,self._cols)]) self._output_file.write(self._line_sep) while pos See http://python-ldap.sourceforge.net for details. $Id: ldif.py,v 1.46 2007/05/23 22:04:15 stroeder Exp $ Python compability note: Tested with Python 2.0+, but should work with Python 1.5.2+. s0.5.5s ldif_patternsAttrTypeandValueLDIFs CreateLDIFs ParseLDIFs LDIFWriters LDIFParsersLDIFRecordListsLDIFCopyN(sStringIOs[\w;.]+(;[\w_-]+)*s(([^,]|\\,)+|".*?")s [ ]*=[ ]*s ([ ]*,[ ]*s)*[ ]*s^%s$s>^((dn(:|::) %(dn_pattern)s)|(%(attrtype_pattern)s(:|::) .*)$)+saddisdeleteisreplaceismodifysmodrdns (^(| | | |:|<)|[ -]+|[ ]+$)cCsH|djodSnti|}|tjo|id|jSdS(s! returns 1 if s is a LDAP DN siiN(sssdn_regexsmatchsrmsNonesgroup(sssrm((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pysis_dn;s  cCsti|tj SdS(sG returns 1 if s has to be base-64 encoded because of special chars N(ssafe_string_ressearchsssNone(ss((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys needs_base64EscCs5tgi}|D]}||tfq~SdS(sN return a dictionary with all items of l being the keys of the dictionary N(sdictsappends_[1]slsisNone(sls_[1]si((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys list_dictLscBsMtZdZedddZdZdZdZdZdZ RS( s Write LDIF entry or change records to file object Copy LDIF input to a file output object containing all data retrieved via URLs iLs cCse||_tgi}|pgD]}||iq!~|_ ||_ ||_ d|_dS(s! output_file file object for output base64_attrs list of attribute types to be base64-encoded in any case cols Specifies how many columns a line may have before it's folded into many lines. line_sep String used as line separator iN(s output_filesselfs _output_files list_dictsappends_[1]s base64_attrssaslowers _base64_attrsscolss_colssline_seps _line_sepsrecords_written(sselfs output_files base64_attrsscolssline_sepsas_[1]((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys__init__Zs  =  cCst|}||ijo'|ii||ii|in|i}|ii|dt ||i!|ii|ixq||joc|iid|ii||t |||id!|ii|i||id}qWdSdS(s7 Write string line as one or more folded lines is iN( slenslinesline_lensselfs_colss _output_fileswrites _line_sepspossmin(sselfslinesline_lenspos((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys_unfoldLDIFLinels  # +cCs|ii|ip t|o5|idi|t i |i ddgn|idi||gdSdS(s Write a single attribute type/value pair attr_type attribute type attr_value attribute value s:: s ss: N( sselfs _base64_attrsshas_keys attr_typeslowers needs_base64s attr_values_unfoldLDIFLinesjoinsbase64s encodestringsreplace(sselfs attr_types attr_value((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys_unparseAttrTypeandValues &5cCsQ|i}|ix3|D]+}x"||D]}|i||q/WqWdS(s3 entry dictionary holding an entry N(sentryskeyss attr_typesssorts attr_types attr_valuesselfs_unparseAttrTypeandValue(sselfsentrys attr_values attr_typess attr_type((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys_unparseEntryRecords   c Cst|d}|djo d}n!|djo d}n td|id|x|D]}|djo|\}}n>|djo'|\}}}|it ||n td|o%x"|D]}|i||qWn|djo|i id |iq^q^Wd S( sP modlist list of additions (2-tuple) or modifications (3-tuple) iisaddismodifysmodlist item of wrong lengths changetypes'Subsequent modlist item of wrong lengths-N(slensmodlistsmod_lens changetypes ValueErrorsselfs_unparseAttrTypeandValuesmodsmod_typesmod_valssmod_ops MOD_OP_STRsmod_vals _output_fileswrites _line_sep( sselfsmodlistsmod_valsmod_typesmod_lens changetypesmod_valssmod_opsmod((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys_unparseChangeRecords,         cCs| odSn|id|t|tio|i|n.t|tio|i |n t d|i i |i |id|_dSdS(s dn string-representation of distinguished name record Either a dictionary holding the LDAP entry {attrtype:record} or a list with a modify list like for LDAPObject.modify(). Nsdns*Argument record must be dictionary or listi(srecordsselfs_unparseAttrTypeandValuesdns isinstancestypessDictTypes_unparseEntryRecordsListTypes_unparseChangeRecords ValueErrors _output_fileswrites _line_sepsrecords_written(sselfsdnsrecord((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pysunparses ( s__name__s __module__s__doc__sNones__init__s_unfoldLDIFLines_unparseAttrTypeandValues_unparseEntryRecords_unparseChangeRecordsunparse(((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys LDIFWriterSs    iLcCsLt}t|||d}|i|||i }|i |SdS(s Create LDIF single formatted record including trailing empty line. This is a compability function. Use is deprecated! dn string-representation of distinguished name record Either a dictionary holding the LDAP entry {attrtype:record} or a list with a modify list like for LDAPObject.modify(). base64_attrs list of attribute types to be base64-encoded in any case cols Specifies how many columns a line may have before it's folded into many lines. s N( sStringIOsfs LDIFWriters base64_attrsscolss ldif_writersunparsesdnsrecordsgetvaluesssclose(sdnsrecords base64_attrsscolssfs ldif_writerss((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys CreateLDIFs   cBsPtZdZdZededdZdZdZdZdZ RS( s Base class for a LDIF parser. Applications should sub-class this class and override method handle() to implement something meaningful. Public class attributes: records_read Counter for records processed so far cCsB|ddjo |d Sn"|ddjo |d Sn|SdS(sI Strip trailing line separators from s, but no other whitespaces is is N(ss(sselfss((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys _stripLineSeps   is c Cs||_||_tgi}|pgD]}||i q*~|_ tgi}|pgD]}||i qg~|_||_d|_dS(s Parameters: input_file File-object to read the LDIF input from ignored_attr_types Attributes with these attribute type names will be ignored. max_entries If non-zero specifies the maximum number of entries to be read from f. process_url_schemes List containing strings with URLs schemes to process with urllib. An empty list turns off all URL processing and the attribute is ignored completely. line_sep String used as line separator iN(s input_filesselfs _input_files max_entriess _max_entriess list_dictsappends_[1]sprocess_url_schemesssslowers_process_url_schemessignored_attr_typessas_ignored_attr_typessline_seps _line_seps records_read( sselfs input_filesignored_attr_typess max_entriessprocess_url_schemessline_sepsas_[1]ss((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys__init__s  == cCsdS(sw Process a single content LDIF record. This method should be implemented by applications using LDIFParser. N((sselfsdnsentry((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pyshandlescCs|i|ig}|ii|_xR|io|iddjo3|i|i|id|ii|_q*Wdi|SdS(sG Unfold several folded lines with trailing space into one line is isN(sselfs _stripLineSeps_linesunfolded_liness _input_filesreadlinesappendsjoin(sselfsunfolded_lines((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys_unfoldLDIFLine%scCs|i}x)|o|ddjo|i}qW| p|djp |djottfSny|id}Wntj ottfSnX|d|!}|||d!}|djot i ||d}n|djok||di }t}|ioCti|}|ii|doti|i}qUqn9|d jp |djo d }n||di}||fSd S( s^ Parse a single attribute type and value pair from one or more lines of LDIF data is#s s s:is::s: - !!  PKg6G޹EEldif.pyo; pFc@sdZdZdddddddd gZd kZd kZd kZd kZd kZyd kl Z Wn e j od k l Z nXd Z d Z e de Z e de dZeideZdeZhdd<dd<dd See http://python-ldap.sourceforge.net for details. $Id: ldif.py,v 1.46 2007/05/23 22:04:15 stroeder Exp $ Python compability note: Tested with Python 2.0+, but should work with Python 1.5.2+. s0.5.5s ldif_patternsAttrTypeandValueLDIFs CreateLDIFs ParseLDIFs LDIFWriters LDIFParsersLDIFRecordListsLDIFCopyN(sStringIOs[\w;.]+(;[\w_-]+)*s(([^,]|\\,)+|".*?")s [ ]*=[ ]*s ([ ]*,[ ]*s)*[ ]*s^%s$s>^((dn(:|::) %(dn_pattern)s)|(%(attrtype_pattern)s(:|::) .*)$)+saddisdeleteisreplaceismodifysmodrdns (^(| | | |:|<)|[ -]+|[ ]+$)cCsH|djodSnti|}|tjo|id|jSdS(s! returns 1 if s is a LDAP DN siiN(sssdn_regexsmatchsrmsNonesgroup(sssrm((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pysis_dn;s  cCsti|tj SdS(sG returns 1 if s has to be base-64 encoded because of special chars N(ssafe_string_ressearchsssNone(ss((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys needs_base64EscCs5tgi}|D]}||tfq~SdS(sN return a dictionary with all items of l being the keys of the dictionary N(sdictsappends_[1]slsisNone(sls_[1]si((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys list_dictLscBsMtZdZedddZdZdZdZdZdZ RS( s Write LDIF entry or change records to file object Copy LDIF input to a file output object containing all data retrieved via URLs iLs cCse||_tgi}|pgD]}||iq!~|_ ||_ ||_ d|_dS(s! output_file file object for output base64_attrs list of attribute types to be base64-encoded in any case cols Specifies how many columns a line may have before it's folded into many lines. line_sep String used as line separator iN(s output_filesselfs _output_files list_dictsappends_[1]s base64_attrssaslowers _base64_attrsscolss_colssline_seps _line_sepsrecords_written(sselfs output_files base64_attrsscolssline_sepsas_[1]((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys__init__Zs  =  cCst|}||ijo'|ii||ii|in|i}|ii|dt ||i!|ii|ixq||joc|iid|ii||t |||id!|ii|i||id}qWdSdS(s7 Write string line as one or more folded lines is iN( slenslinesline_lensselfs_colss _output_fileswrites _line_sepspossmin(sselfslinesline_lenspos((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys_unfoldLDIFLinels  # +cCs|ii|ip t|o5|idi|t i |i ddgn|idi||gdSdS(s Write a single attribute type/value pair attr_type attribute type attr_value attribute value s:: s ss: N( sselfs _base64_attrsshas_keys attr_typeslowers needs_base64s attr_values_unfoldLDIFLinesjoinsbase64s encodestringsreplace(sselfs attr_types attr_value((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys_unparseAttrTypeandValues &5cCsQ|i}|ix3|D]+}x"||D]}|i||q/WqWdS(s3 entry dictionary holding an entry N(sentryskeyss attr_typesssorts attr_types attr_valuesselfs_unparseAttrTypeandValue(sselfsentrys attr_values attr_typess attr_type((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys_unparseEntryRecords   c Cst|d}|djo d}n!|djo d}n td|id|x|D]}|djo|\}}n>|djo'|\}}}|it ||n td|o%x"|D]}|i||qWn|djo|i id |iq^q^Wd S( sP modlist list of additions (2-tuple) or modifications (3-tuple) iisaddismodifysmodlist item of wrong lengths changetypes'Subsequent modlist item of wrong lengths-N(slensmodlistsmod_lens changetypes ValueErrorsselfs_unparseAttrTypeandValuesmodsmod_typesmod_valssmod_ops MOD_OP_STRsmod_vals _output_fileswrites _line_sep( sselfsmodlistsmod_valsmod_typesmod_lens changetypesmod_valssmod_opsmod((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys_unparseChangeRecords,         cCs| odSn|id|t|tio|i|n.t|tio|i |n t d|i i |i |id|_dSdS(s dn string-representation of distinguished name record Either a dictionary holding the LDAP entry {attrtype:record} or a list with a modify list like for LDAPObject.modify(). Nsdns*Argument record must be dictionary or listi(srecordsselfs_unparseAttrTypeandValuesdns isinstancestypessDictTypes_unparseEntryRecordsListTypes_unparseChangeRecords ValueErrors _output_fileswrites _line_sepsrecords_written(sselfsdnsrecord((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pysunparses ( s__name__s __module__s__doc__sNones__init__s_unfoldLDIFLines_unparseAttrTypeandValues_unparseEntryRecords_unparseChangeRecordsunparse(((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys LDIFWriterSs    iLcCsLt}t|||d}|i|||i }|i |SdS(s Create LDIF single formatted record including trailing empty line. This is a compability function. Use is deprecated! dn string-representation of distinguished name record Either a dictionary holding the LDAP entry {attrtype:record} or a list with a modify list like for LDAPObject.modify(). base64_attrs list of attribute types to be base64-encoded in any case cols Specifies how many columns a line may have before it's folded into many lines. s N( sStringIOsfs LDIFWriters base64_attrsscolss ldif_writersunparsesdnsrecordsgetvaluesssclose(sdnsrecords base64_attrsscolssfs ldif_writerss((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys CreateLDIFs   cBsPtZdZdZededdZdZdZdZdZ RS( s Base class for a LDIF parser. Applications should sub-class this class and override method handle() to implement something meaningful. Public class attributes: records_read Counter for records processed so far cCsB|ddjo |d Sn"|ddjo |d Sn|SdS(sI Strip trailing line separators from s, but no other whitespaces is is N(ss(sselfss((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys _stripLineSeps   is c Cs||_||_tgi}|pgD]}||i q*~|_ tgi}|pgD]}||i qg~|_||_d|_dS(s Parameters: input_file File-object to read the LDIF input from ignored_attr_types Attributes with these attribute type names will be ignored. max_entries If non-zero specifies the maximum number of entries to be read from f. process_url_schemes List containing strings with URLs schemes to process with urllib. An empty list turns off all URL processing and the attribute is ignored completely. line_sep String used as line separator iN(s input_filesselfs _input_files max_entriess _max_entriess list_dictsappends_[1]sprocess_url_schemesssslowers_process_url_schemessignored_attr_typessas_ignored_attr_typessline_seps _line_seps records_read( sselfs input_filesignored_attr_typess max_entriessprocess_url_schemessline_sepsas_[1]ss((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys__init__s  == cCsdS(sw Process a single content LDIF record. This method should be implemented by applications using LDIFParser. N((sselfsdnsentry((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pyshandlescCs|i|ig}|ii|_xR|io|iddjo3|i|i|id|ii|_q*Wdi|SdS(sG Unfold several folded lines with trailing space into one line is isN(sselfs _stripLineSeps_linesunfolded_liness _input_filesreadlinesappendsjoin(sselfsunfolded_lines((s5build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldif.pys_unfoldLDIFLine%scCs|i}x)|o|ddjo|i}qW| p|djp |djottfSny|id}Wntj ottfSnX|d|!}|||d!}|djot i ||d}n|djok||di }t}|ioCti|}|ii|doti|i}qUqn9|d jp |djo d }n||di}||fSd S( s^ Parse a single attribute type and value pair from one or more lines of LDIF data is#s s s:is::s: - !!  PKf62EGG-INFO/dependency_links.txt PKie62EGG-INFO/not-zip-safe PKf6=I//EGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: python-ldap Version: 2.3.1 Summary: Various LDAP-related Python modules Home-page: http://python-ldap.sourceforge.net/ Author: David Leonard, Michael Stroeder, et al. Author-email: python-ldap-dev@lists.sourceforge.net License: UNKNOWN Description: UNKNOWN Platform: UNKNOWN PKf6KְY EGG-INFO/requires.txtsetuptoolsPKf6(lEGG-INFO/SOURCES.txtCHANGES INSTALL LICENCE MANIFEST.in README TODO setup.cfg setup.py Build/setup.cfg.mingw Build/setup.cfg.suse-linux Build/setup.cfg.win32 Demo/initialize.py Demo/ldapcontrols.py Demo/options.py Demo/page_control.py Demo/passwd_ext_op.py Demo/pickle_ldapobject.py Demo/reconnect.py Demo/rename.py Demo/resiter.py Demo/sasl_bind.py Demo/schema.py Demo/schema_tree.py Demo/simple.py Demo/simplebrowse.py Demo/Lib/ldap/async/deltree.py Demo/Lib/ldap/async/ldifwriter.py Demo/Lib/ldap/async/sizelimit.py Demo/Lib/ldapurl/urlsearch.py Demo/Lib/ldif/ldifcopy.py Demo/pyasn1/prereadcontrol.py Lib/dsml.py Lib/ldapurl.py Lib/ldif.py Lib/ldap/__init__.py Lib/ldap/async.py Lib/ldap/cidict.py Lib/ldap/controls.py Lib/ldap/dn.py Lib/ldap/filter.py Lib/ldap/functions.py Lib/ldap/ldapobject.py Lib/ldap/modlist.py Lib/ldap/resiter.py Lib/ldap/sasl.py Lib/ldap/schema/__init__.py Lib/ldap/schema/models.py Lib/ldap/schema/subentry.py Lib/ldap/schema/tokenizer.py Lib/python_ldap.egg-info/PKG-INFO Lib/python_ldap.egg-info/SOURCES.txt Lib/python_ldap.egg-info/dependency_links.txt Lib/python_ldap.egg-info/not-zip-safe Lib/python_ldap.egg-info/requires.txt Lib/python_ldap.egg-info/top_level.txt Modules/LDAPObject.c Modules/LDAPObject.h Modules/common.c Modules/common.h Modules/constants.c Modules/constants.h Modules/errors.c Modules/errors.h Modules/functions.c Modules/functions.h Modules/ldapcontrol.c Modules/ldapcontrol.h Modules/ldapmodule.c Modules/message.c Modules/message.h Modules/options.c Modules/options.h Modules/schema.c Modules/schema.h Modules/version.c Modules/version.h Tests/Lib/test_ldapurl.py Tests/Lib/ldap/test_modlist.py Tests/Lib/ldap/schema/test_tokenizer.py PKf6/EGG-INFO/top_level.txtdsml ldapurl ldap _ldap ldif PK\6 4  ldap/__init__.py""" ldap - base module written by Michael Stroeder See http://python-ldap.sourceforge.net for details. $Id: __init__.py,v 1.53 2007/05/23 22:04:15 stroeder Exp $ """ # This is also the overall release version number __version__ = '2.3.1' import sys if __debug__: # Tracing is only supported in debugging mode import traceback _trace_level = 0 _trace_file = sys.stderr _trace_stack_limit = None from _ldap import * class DummyLock: """Define dummy class with methods compatible to threading.Lock""" def __init__(self): pass def acquire(self): pass def release(self): pass try: # Check if Python installation was build with thread support import thread except ImportError: LDAPLock = DummyLock else: import threading LDAPLock = threading.Lock # Create module-wide lock for serializing all calls # into underlying LDAP lib _ldap_module_lock = LDAPLock() from functions import open,initialize,init,get_option,set_option from ldap.dn import explode_dn,explode_rdn PKg6XXldap/__init__.pyc; pFc@sdZdZdkZeo"dkZdZeiZeZ ndk TdfdYZ y dk Z Wne j o e ZnXdkZeiZeZdklZlZlZlZlZdklZlZdS( s ldap - base module written by Michael Stroeder See http://python-ldap.sourceforge.net for details. $Id: __init__.py,v 1.53 2007/05/23 22:04:15 stroeder Exp $ s2.3.1Ni(s*s DummyLockcBs)tZdZdZdZdZRS(s<Define dummy class with methods compatible to threading.LockcCsdS(N((sself((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/__init__.pys__init__scCsdS(N((sself((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/__init__.pysacquirescCsdS(N((sself((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/__init__.pysreleases(s__name__s __module__s__doc__s__init__sacquiresrelease(((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/__init__.pys DummyLocks   (sopens initializesinits get_options set_option(s explode_dns explode_rdn(s__doc__s __version__ssyss __debug__s tracebacks _trace_levelsstderrs _trace_filesNones_trace_stack_limits_ldaps DummyLocksthreads ImportErrorsLDAPLocks threadingsLocks_ldap_module_locks functionssopens initializesinits get_options set_optionsldap.dns explode_dns explode_rdn(s set_optionsopens _trace_levelsthreads threadings DummyLocks tracebacks get_optionssyssinits_trace_stack_limits initializesLDAPLocks __version__s _trace_files explode_dns_ldap_module_locks explode_rdn((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/__init__.pys?s$          %PKg6ttldap/__init__.pyo; pFc@sdZdZdkZdkTdfdYZy dkZWnej o eZnXdkZei ZeZ dk l Z l Z lZlZlZdklZlZdS(s ldap - base module written by Michael Stroeder See http://python-ldap.sourceforge.net for details. $Id: __init__.py,v 1.53 2007/05/23 22:04:15 stroeder Exp $ s2.3.1N(s*s DummyLockcBs)tZdZdZdZdZRS(s<Define dummy class with methods compatible to threading.LockcCsdS(N((sself((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/__init__.pys__init__scCsdS(N((sself((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/__init__.pysacquirescCsdS(N((sself((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/__init__.pysreleases(s__name__s __module__s__doc__s__init__sacquiresrelease(((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/__init__.pys DummyLocks   (sopens initializesinits get_options set_option(s explode_dns explode_rdn(s__doc__s __version__ssyss_ldaps DummyLocksthreads ImportErrorsLDAPLocks threadingsLocks_ldap_module_locks functionssopens initializesinits get_options set_optionsldap.dns explode_dns explode_rdn(s get_optionsthreads threadings DummyLockssyssinits set_options initializesLDAPLocks __version__sopens explode_dns_ldap_module_locks explode_rdn((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/__init__.pys?s       %PKd:4f*!! ldap/async.py""" ldap.async - handle async LDAP operations written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: async.py,v 1.25 2006/04/10 05:19:09 stroeder Exp $ Python compability note: Tested on Python 2.0+ but should run on Python 1.5.x. """ import ldap __version__ = '0.1.0' _searchResultTypes={ ldap.RES_SEARCH_ENTRY:None, ldap.RES_SEARCH_RESULT:None, ldap.RES_SEARCH_REFERENCE:None, } _entryResultTypes={ ldap.RES_SEARCH_ENTRY:None, ldap.RES_SEARCH_RESULT:None, } class WrongResultType(Exception): def __init__(self,receivedResultType,expectedResultTypes): self.receivedResultType = receivedResultType self.expectedResultTypes = expectedResultTypes Exception.__init__(self) def __str__(self): return 'Received wrong result type %s (expected one of %s).' % ( self.receivedResultType, ', '.join(self.expectedResultTypes), ) class AsyncSearchHandler: """ Class for stream-processsing LDAP search results """ def __init__(self,l): """ Initialize a StreamResultHandler Parameters: l LDAPObject instance """ self._l = l self._msgId = None def startSearch( self, searchRoot, searchScope, filterStr, attrList=None, attrsOnly=0, timeout=-1, sizelimit=0, serverctrls=None, clientctrls=None ): """ searchRoot See parameter base of method LDAPObject.search() searchScope See parameter scope of method LDAPObject.search() filterStr See parameter filter of method LDAPObject.search() attrList=None See parameter attrlist of method LDAPObject.search() attrsOnly See parameter attrsonly of method LDAPObject.search() timeout Maximum time the server shall use for search operation sizelimit Maximum number of entries a server should return (request client-side limit) serverctrls list of server-side LDAP controls clientctrls list of client-side LDAP controls """ self._msgId = self._l.search_ext( searchRoot,searchScope,filterStr, attrList,attrsOnly,serverctrls,clientctrls,timeout,sizelimit ) return # startSearch() def preProcessing(self): """ Do anything you want after starting search but before receiving and processing results """ def postProcessing(self): """ Do anything you want after receiving and processing results """ def processResults(self,ignoreResultsNumber=0,processResultsCount=0,timeout=-1): """ ignoreResultsNumber Don't process the first ignoreResultsNumber results. processResultsCount If non-zero this parameters indicates the number of results processed is limited to processResultsCount. timeout See parameter timeout of ldap.LDAPObject.result() """ self.preProcessing() result_counter = 0 end_result_counter = ignoreResultsNumber+processResultsCount go_ahead = 1 partial = 0 self.beginResultsDropped = 0 self.endResultBreak = result_counter try: result_type,result_list = None,None while go_ahead: while result_type is None and not result_list: result_type,result_list,result_msgid,result_serverctrls = self._l.result3(self._msgId,0,timeout) if not result_list: break if not _searchResultTypes.has_key(result_type): raise WrongResultType(result_type,_searchResultTypes.keys()) # Loop over list of search results for result_item in result_list: if result_counter See http://python-ldap.sourceforge.net for details. \$Id: async.py,v 1.25 2006/04/10 05:19:09 stroeder Exp $ Python compability note: Tested on Python 2.0+ but should run on Python 1.5.x. Ns0.1.0sWrongResultTypecBstZdZdZRS(NcCs#||_||_ti|dS(N(sreceivedResultTypesselfsexpectedResultTypess Exceptions__init__(sselfsreceivedResultTypesexpectedResultTypes((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys__init__ s  cCs!d|idi|ifSdS(Ns3Received wrong result type %s (expected one of %s).s, (sselfsreceivedResultTypesjoinsexpectedResultTypes(sself((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys__str__%s(s__name__s __module__s__init__s__str__(((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pysWrongResultTypes sAsyncSearchHandlercBs_tZdZdZedddeedZdZdZddddZdZ RS( s6 Class for stream-processsing LDAP search results cCs||_t|_dS(sa Initialize a StreamResultHandler Parameters: l LDAPObject instance N(slsselfs_lsNones_msgId(sselfsl((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys__init__1s iic Cs5|ii||||||| || |_ dSdS(s searchRoot See parameter base of method LDAPObject.search() searchScope See parameter scope of method LDAPObject.search() filterStr See parameter filter of method LDAPObject.search() attrList=None See parameter attrlist of method LDAPObject.search() attrsOnly See parameter attrsonly of method LDAPObject.search() timeout Maximum time the server shall use for search operation sizelimit Maximum number of entries a server should return (request client-side limit) serverctrls list of server-side LDAP controls clientctrls list of client-side LDAP controls N( sselfs_ls search_exts searchRoots searchScopes filterStrsattrLists attrsOnlys serverctrlss clientctrlsstimeouts sizelimits_msgId( sselfs searchRoots searchScopes filterStrsattrLists attrsOnlystimeouts sizelimits serverctrlss clientctrls((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys startSearch<s cCsdS(sd Do anything you want after starting search but before receiving and processing results N((sself((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys preProcessingcscCsdS(sE Do anything you want after receiving and processing results N((sself((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pyspostProcessingisc Cs|id}||} d} d}d|_||_ z2t t f\} }x| oxA| t jo| o+|i i|id|\} }}} qZW| oPnti|  ot| tinxt|D]l}||jo|id|_n<|djp || jo|i| |nd} d}P|d}qWt t f\} }||_ qPWWd|o |it jo|i i|inX|i|SdS(s1 ignoreResultsNumber Don't process the first ignoreResultsNumber results. processResultsCount If non-zero this parameters indicates the number of results processed is limited to processResultsCount. timeout See parameter timeout of ldap.LDAPObject.result() iiN(sselfs preProcessingsresult_countersignoreResultsNumbersprocessResultsCountsend_result_countersgo_aheadspartialsbeginResultsDroppedsendResultBreaksNones result_types result_lists_lsresult3s_msgIdstimeouts result_msgidsresult_serverctrlss_searchResultTypesshas_keysWrongResultTypeskeyss result_items_processSingleResultsabandonspostProcessing( sselfsignoreResultsNumbersprocessResultsCountstimeouts result_listspartialsresult_counters result_msgids result_itemsresult_serverctrlssend_result_countersgo_aheads result_type((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pysprocessResultsnsH     ,  cCsdS(sv Process single entry resultType result type resultItem Single item of a result list N((sselfs resultTypes resultItem((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys_processSingleResults( s__name__s __module__s__doc__s__init__sNones startSearchs preProcessingspostProcessingsprocessResultss_processSingleResult(((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pysAsyncSearchHandler,s  '  -sListcBs tZdZdZdZRS(s Class for collecting all search results. This does not seem to make sense in the first place but think of retrieving exactly a certain portion of the available search results. cCsti||g|_dS(N(sAsyncSearchHandlers__init__sselfsls allResults(sselfsl((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys__init__scCs|ii||fdS(N(sselfs allResultssappends resultTypes resultItem(sselfs resultTypes resultItem((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys_processSingleResults(s__name__s __module__s__doc__s__init__s_processSingleResult(((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pysLists  sDictcBs tZdZdZdZRS(sJ Class for collecting all search results into a dictionary {dn:entry} cCsti||h|_dS(N(sAsyncSearchHandlers__init__sselfsls allEntries(sselfsl((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys__init__scCs1ti|o|\}}||i| See http://python-ldap.sourceforge.net for details. \$Id: async.py,v 1.25 2006/04/10 05:19:09 stroeder Exp $ Python compability note: Tested on Python 2.0+ but should run on Python 1.5.x. Ns0.1.0sWrongResultTypecBstZdZdZRS(NcCs#||_||_ti|dS(N(sreceivedResultTypesselfsexpectedResultTypess Exceptions__init__(sselfsreceivedResultTypesexpectedResultTypes((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys__init__ s  cCs!d|idi|ifSdS(Ns3Received wrong result type %s (expected one of %s).s, (sselfsreceivedResultTypesjoinsexpectedResultTypes(sself((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys__str__%s(s__name__s __module__s__init__s__str__(((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pysWrongResultTypes sAsyncSearchHandlercBs_tZdZdZedddeedZdZdZddddZdZ RS( s6 Class for stream-processsing LDAP search results cCs||_t|_dS(sa Initialize a StreamResultHandler Parameters: l LDAPObject instance N(slsselfs_lsNones_msgId(sselfsl((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys__init__1s iic Cs5|ii||||||| || |_ dSdS(s searchRoot See parameter base of method LDAPObject.search() searchScope See parameter scope of method LDAPObject.search() filterStr See parameter filter of method LDAPObject.search() attrList=None See parameter attrlist of method LDAPObject.search() attrsOnly See parameter attrsonly of method LDAPObject.search() timeout Maximum time the server shall use for search operation sizelimit Maximum number of entries a server should return (request client-side limit) serverctrls list of server-side LDAP controls clientctrls list of client-side LDAP controls N( sselfs_ls search_exts searchRoots searchScopes filterStrsattrLists attrsOnlys serverctrlss clientctrlsstimeouts sizelimits_msgId( sselfs searchRoots searchScopes filterStrsattrLists attrsOnlystimeouts sizelimits serverctrlss clientctrls((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys startSearch<s cCsdS(sd Do anything you want after starting search but before receiving and processing results N((sself((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys preProcessingcscCsdS(sE Do anything you want after receiving and processing results N((sself((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pyspostProcessingisc Cs|id}||} d} d}d|_||_ z2t t f\} }x| oxA| t jo| o+|i i|id|\} }}} qZW| oPnti|  ot| tinxt|D]l}||jo|id|_n<|djp || jo|i| |nd} d}P|d}qWt t f\} }||_ qPWWd|o |it jo|i i|inX|i|SdS(s1 ignoreResultsNumber Don't process the first ignoreResultsNumber results. processResultsCount If non-zero this parameters indicates the number of results processed is limited to processResultsCount. timeout See parameter timeout of ldap.LDAPObject.result() iiN(sselfs preProcessingsresult_countersignoreResultsNumbersprocessResultsCountsend_result_countersgo_aheadspartialsbeginResultsDroppedsendResultBreaksNones result_types result_lists_lsresult3s_msgIdstimeouts result_msgidsresult_serverctrlss_searchResultTypesshas_keysWrongResultTypeskeyss result_items_processSingleResultsabandonspostProcessing( sselfsignoreResultsNumbersprocessResultsCountstimeouts result_listspartialsresult_counters result_msgids result_itemsresult_serverctrlssend_result_countersgo_aheads result_type((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pysprocessResultsnsH     ,  cCsdS(sv Process single entry resultType result type resultItem Single item of a result list N((sselfs resultTypes resultItem((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys_processSingleResults( s__name__s __module__s__doc__s__init__sNones startSearchs preProcessingspostProcessingsprocessResultss_processSingleResult(((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pysAsyncSearchHandler,s  '  -sListcBs tZdZdZdZRS(s Class for collecting all search results. This does not seem to make sense in the first place but think of retrieving exactly a certain portion of the available search results. cCsti||g|_dS(N(sAsyncSearchHandlers__init__sselfsls allResults(sselfsl((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys__init__scCs|ii||fdS(N(sselfs allResultssappends resultTypes resultItem(sselfs resultTypes resultItem((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys_processSingleResults(s__name__s __module__s__doc__s__init__s_processSingleResult(((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pysLists  sDictcBs tZdZdZdZRS(sJ Class for collecting all search results into a dictionary {dn:entry} cCsti||h|_dS(N(sAsyncSearchHandlers__init__sselfsls allEntries(sselfsl((s;build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/async.pys__init__scCs1ti|o|\}}||i|s <cCskt}x|D]}|||s <cCskt}x|D]}|||build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys__init__s  cCs'd|ii|i|i|ifSdS(Ns %s(%s,%s,%s)(sselfs __class__s__name__s controlTypes criticalitys controlValue(sself((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys__repr__#scCs|SdS(N(svalue(sselfsvalue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysencodeControlValue&scCs|SdS(N(s encodedValue(sselfs encodedValue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysdecodeControlValue)scCs#|i|i|i|ifSdS(N(sselfs controlTypes criticalitysencodeControlValues controlValue(sself((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysgetEncodedTuple,s( s__name__s __module__s__doc__sNones__init__s__repr__sencodeControlValuesdecodeControlValuesgetEncodedTuple(((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys LDAPControls    sBooleanControlcBsPtZdZhdd<ddbuild/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysencodeControlValue:scCs|i|SdS(N(sselfs ber2booleans encodedValue(sselfs encodedValue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysdecodeControlValue=s(s__name__s __module__s__doc__s boolean2bers ber2booleansencodeControlValuesdecodeControlValue(((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysBooleanControl0s  sSimplePagedResultsControlcBs8tZdZeiZeedZdZdZ RS(sR LDAP Control Extension for Simple Paged Results Manipulation see RFC 2696 cCs ti|ti|||dS(N(s LDAPControls__init__sselfsldapsLDAP_CONTROL_PAGE_OIDs criticalitys controlValuesencodedControlValue(sselfs controlTypes criticalitys controlValuesencodedControlValue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys__init__IscCs |\}}ti||SdS(N(svaluessizescookies_ldapsencode_page_control(sselfsvaluescookiessize((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysencodeControlValueLs cCs#ti|\}}||fSdS(N(s_ldapsdecode_page_controls encodedValuessizescookie(sselfs encodedValuescookiessize((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysdecodeControlValuePs( s__name__s __module__s__doc__sldapsLDAP_CONTROL_PAGE_OIDs controlTypesNones__init__sencodeControlValuesdecodeControlValue(((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysSimplePagedResultsControlAs   sMatchedValuesControlcBs,tZdZeiZedZdZRS(s LDAP Matched Values control, as defined in RFC 3876 from ldap.controls import MatchedValuesControl control = MatchedValuesControl(criticality, filter) cCs ti||i||tdS(N(s LDAPControls__init__sselfs controlTypes criticalitys controlValuesNone(sselfs criticalitys controlValue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys__init___scCsti|SdS(N(s_ldaps!encode_valuesreturnfilter_controlsvalue(sselfsvalue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysencodeControlValuebs( s__name__s __module__s__doc__sldapsLDAP_CONTROL_VALUESRETURNFILTERs controlTypesNones__init__sencodeControlValue(((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysMatchedValuesControlUs   cCsJ|tjotSn2gi}|D]}||iq#~}|SdS(s^ Return list of readily encoded 3-tuples which can be directly passed to C module _ldap N(s ldapControlssNonesappends_[1]scsgetEncodedTuplesresult(s ldapControlss_[1]scsresult((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysEncodeControlTuplesfs  -cCsTgi}|pgD]4\}}}|ti|t||d|q~SdS(s^ Return list of readily encoded 3-tuples which can be directly passed to C module _ldap sencodedControlValueN( sappends_[1]sldapControlTupless controlTypes criticalitysencodedControlValuesknownLDAPControlssgets LDAPControl(sldapControlTupless criticalitys_[1]s controlTypesencodedControlValue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysDecodeControlTuplesuss controlType(s__doc__s __version__s__all__stypess ClassTypes_ldapsldaps LDAPControlsBooleanControlsSimplePagedResultsControlsMatchedValuesControlsEncodeControlTuplessDecodeControlTuplessknownLDAPControlssdirs symbol_namesevalscstypeshasattrs controlType(sknownLDAPControlsscs symbol_namesMatchedValuesControls__all__sEncodeControlTupless ClassTypes LDAPControlsSimplePagedResultsControlsBooleanControlsldaps_ldaps __version__sDecodeControlTuples((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys? s       #PKg6a5ldap/controls.pyo; pFc@sdZdZdgZdklZdkZdkZdfdYZdefdYZdefd YZ d efd YZ d Z d Z hZ xQeD]FZeeZeeejo eedoee eibuild/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys__init__s  cCs'd|ii|i|i|ifSdS(Ns %s(%s,%s,%s)(sselfs __class__s__name__s controlTypes criticalitys controlValue(sself((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys__repr__#scCs|SdS(N(svalue(sselfsvalue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysencodeControlValue&scCs|SdS(N(s encodedValue(sselfs encodedValue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysdecodeControlValue)scCs#|i|i|i|ifSdS(N(sselfs controlTypes criticalitysencodeControlValues controlValue(sself((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysgetEncodedTuple,s( s__name__s __module__s__doc__sNones__init__s__repr__sencodeControlValuesdecodeControlValuesgetEncodedTuple(((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys LDAPControls    sBooleanControlcBsPtZdZhdd<ddbuild/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysencodeControlValue:scCs|i|SdS(N(sselfs ber2booleans encodedValue(sselfs encodedValue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysdecodeControlValue=s(s__name__s __module__s__doc__s boolean2bers ber2booleansencodeControlValuesdecodeControlValue(((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysBooleanControl0s  sSimplePagedResultsControlcBs8tZdZeiZeedZdZdZ RS(sR LDAP Control Extension for Simple Paged Results Manipulation see RFC 2696 cCs ti|ti|||dS(N(s LDAPControls__init__sselfsldapsLDAP_CONTROL_PAGE_OIDs criticalitys controlValuesencodedControlValue(sselfs controlTypes criticalitys controlValuesencodedControlValue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys__init__IscCs |\}}ti||SdS(N(svaluessizescookies_ldapsencode_page_control(sselfsvaluescookiessize((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysencodeControlValueLs cCs#ti|\}}||fSdS(N(s_ldapsdecode_page_controls encodedValuessizescookie(sselfs encodedValuescookiessize((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysdecodeControlValuePs( s__name__s __module__s__doc__sldapsLDAP_CONTROL_PAGE_OIDs controlTypesNones__init__sencodeControlValuesdecodeControlValue(((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysSimplePagedResultsControlAs   sMatchedValuesControlcBs,tZdZeiZedZdZRS(s LDAP Matched Values control, as defined in RFC 3876 from ldap.controls import MatchedValuesControl control = MatchedValuesControl(criticality, filter) cCs ti||i||tdS(N(s LDAPControls__init__sselfs controlTypes criticalitys controlValuesNone(sselfs criticalitys controlValue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys__init___scCsti|SdS(N(s_ldaps!encode_valuesreturnfilter_controlsvalue(sselfsvalue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysencodeControlValuebs( s__name__s __module__s__doc__sldapsLDAP_CONTROL_VALUESRETURNFILTERs controlTypesNones__init__sencodeControlValue(((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysMatchedValuesControlUs   cCsJ|tjotSn2gi}|D]}||iq#~}|SdS(s^ Return list of readily encoded 3-tuples which can be directly passed to C module _ldap N(s ldapControlssNonesappends_[1]scsgetEncodedTuplesresult(s ldapControlss_[1]scsresult((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysEncodeControlTuplesfs  -cCsTgi}|pgD]4\}}}|ti|t||d|q~SdS(s^ Return list of readily encoded 3-tuples which can be directly passed to C module _ldap sencodedControlValueN( sappends_[1]sldapControlTupless controlTypes criticalitysencodedControlValuesknownLDAPControlssgets LDAPControl(sldapControlTupless criticalitys_[1]s controlTypesencodedControlValue((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pysDecodeControlTuplesuss controlType(s__doc__s __version__s__all__stypess ClassTypes_ldapsldaps LDAPControlsBooleanControlsSimplePagedResultsControlsMatchedValuesControlsEncodeControlTuplessDecodeControlTuplessknownLDAPControlssdirs symbol_namesevalscstypeshasattrs controlType(sknownLDAPControlsscs symbol_namesMatchedValuesControls__all__sEncodeControlTupless ClassTypes LDAPControlsSimplePagedResultsControlsBooleanControlsldaps_ldaps __version__sDecodeControlTuples((s>build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/controls.pys? s       #PKO{6*' ldap/dn.py""" dn.py - misc stuff for handling distinguished names (see RFC 4514) written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: dn.py,v 1.4 2007/03/22 23:15:30 stroeder Exp $ Compability: - Tested with Python 2.0+ """ __version__ = '0.1.0' import _ldap import ldap.functions def escape_dn_chars(s): """ Escape all DN special characters found in s with a back-slash """ if s: s = s.replace('\\','\\\\') s = s.replace(',' ,'\\,') s = s.replace('+' ,'\\+') s = s.replace('"' ,'\\"') s = s.replace('<' ,'\\<') s = s.replace('>' ,'\\>') s = s.replace(';' ,'\\;') s = s.replace('=' ,'\\=') if s[0]=='#': s = ''.join(('\\',s)) if s[-1]==' ': s = ''.join((s[:-1],'\\ ')) return s def str2dn(dn,flags=0): """ This function takes a DN as string as parameter and returns a decomposed DN. It's the inverse to dn2str(). """ if not dn: return [] return ldap.functions._ldap_function_call(_ldap.str2dn,dn,flags) def dn2str(dn): """ This function takes a decomposed DN as parameter and returns a single string. It's the inverse to str2dn(). """ return ','.join([ '+'.join([ '='.join((atype,escape_dn_chars(avalue or ''))) for atype,avalue,dummy in rdn]) for rdn in dn ]) def explode_dn(dn,notypes=0): """ explode_dn(dn [, notypes=0]) -> list This function takes a DN and breaks it up into its component parts. The notypes parameter is used to specify that only the component's attribute values be returned and not the attribute types. """ if not dn: return [] dn_decomp = str2dn(dn) rdn_list = [] for rdn in dn_decomp: if notypes: rdn_list.append('+'.join([ escape_dn_chars(avalue or '') for atype,avalue,dummy in rdn ])) else: rdn_list.append('+'.join([ '='.join((atype,escape_dn_chars(avalue or ''))) for atype,avalue,dummy in rdn ])) return rdn_list def explode_rdn(rdn,notypes=0): """ explode_rdn(rdn [, notypes=0]) -> list This function takes a RDN and breaks it up into its component parts if it is a multi-valued RDN. The notypes parameter is used to specify that only the component's attribute values be returned and not the attribute types. """ if not rdn: return [] rdn_decomp = str2dn(rdn)[0] if notypes: return [avalue or '' for atype,avalue,dummy in rdn_decomp] else: return ['='.join((atype,escape_dn_chars(avalue or ''))) for atype,avalue,dummy in rdn_decomp] PKg6:D!! ldap/dn.pyc;  Fc@sXdZdZdkZdkZdZddZdZddZddZ dS( s  dn.py - misc stuff for handling distinguished names (see RFC 4514) written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: dn.py,v 1.4 2007/03/22 23:15:30 stroeder Exp $ Compability: - Tested with Python 2.0+ s0.1.0NcCs|o|idd}|idd}|idd}|idd}|id d }|id d }|id d}|idd}|ddjodid|f}n|ddjodi|d df}qn|SdS(sE Escape all DN special characters found in s with a back-slash s\s\\s,s\,s+s\+s"s\"ss\>s;s\;s=s\=is#sis s\ N(sssreplacesjoin(ss((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pysescape_dn_charss!icCs-| ogSntiiti||SdS(sr This function takes a DN as string as parameter and returns a decomposed DN. It's the inverse to dn2str(). N(sdnsldaps functionss_ldap_function_calls_ldapsstr2dnsflags(sdnsflags((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pysstr2dn*sc Csdigi}|D]_}|digi}|D]5\}}}|di|t |pdfq1~q~SdS(ss This function takes a decomposed DN as parameter and returns a single string. It's the inverse to str2dn(). s,s+s=sN( sjoinsappends_[1]sdnsrdns_[2]satypesavaluesdummysescape_dn_chars(sdnsdummysavaluesatypes_[1]s_[2]srdn((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pysdn2str4sc Cs| ogSnt|}g}x|D]}|oQ|idigi}|D]&\}}}|t |pdqP~q)|idigi}|D]5\}}}|di|t |pdfq~q)W|SdS(s explode_dn(dn [, notypes=0]) -> list This function takes a DN and breaks it up into its component parts. The notypes parameter is used to specify that only the component's attribute values be returned and not the attribute types. s+ss=N( sdnsstr2dns dn_decompsrdn_listsrdnsnotypessappendsjoins_[1]satypesavaluesdummysescape_dn_chars( sdnsnotypessavaluesdummysatypes_[1]srdn_listsrdns dn_decomp((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pys explode_dn@s Q`cCs| ogSnt|d}|o9gi}|D] \}}}||pdq5~SnKgi}|D]5\}}}|di |t |pdfqn~SdS(s explode_rdn(rdn [, notypes=0]) -> list This function takes a RDN and breaks it up into its component parts if it is a multi-valued RDN. The notypes parameter is used to specify that only the component's attribute values be returned and not the attribute types. iss=N( srdnsstr2dns rdn_decompsnotypessappends_[1]satypesavaluesdummysjoinsescape_dn_chars(srdnsnotypessavaluesdummysatypes_[1]s rdn_decomp((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pys explode_rdnZs9( s__doc__s __version__s_ldapsldap.functionssldapsescape_dn_charssstr2dnsdn2strs explode_dns explode_rdn(sstr2dns __version__s explode_rdnsldaps_ldaps explode_dnsescape_dn_charssdn2str((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pys? s    PKg6:D!! ldap/dn.pyo;  Fc@sXdZdZdkZdkZdZddZdZddZddZ dS( s  dn.py - misc stuff for handling distinguished names (see RFC 4514) written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: dn.py,v 1.4 2007/03/22 23:15:30 stroeder Exp $ Compability: - Tested with Python 2.0+ s0.1.0NcCs|o|idd}|idd}|idd}|idd}|id d }|id d }|id d}|idd}|ddjodid|f}n|ddjodi|d df}qn|SdS(sE Escape all DN special characters found in s with a back-slash s\s\\s,s\,s+s\+s"s\"ss\>s;s\;s=s\=is#sis s\ N(sssreplacesjoin(ss((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pysescape_dn_charss!icCs-| ogSntiiti||SdS(sr This function takes a DN as string as parameter and returns a decomposed DN. It's the inverse to dn2str(). N(sdnsldaps functionss_ldap_function_calls_ldapsstr2dnsflags(sdnsflags((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pysstr2dn*sc Csdigi}|D]_}|digi}|D]5\}}}|di|t |pdfq1~q~SdS(ss This function takes a decomposed DN as parameter and returns a single string. It's the inverse to str2dn(). s,s+s=sN( sjoinsappends_[1]sdnsrdns_[2]satypesavaluesdummysescape_dn_chars(sdnsdummysavaluesatypes_[1]s_[2]srdn((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pysdn2str4sc Cs| ogSnt|}g}x|D]}|oQ|idigi}|D]&\}}}|t |pdqP~q)|idigi}|D]5\}}}|di|t |pdfq~q)W|SdS(s explode_dn(dn [, notypes=0]) -> list This function takes a DN and breaks it up into its component parts. The notypes parameter is used to specify that only the component's attribute values be returned and not the attribute types. s+ss=N( sdnsstr2dns dn_decompsrdn_listsrdnsnotypessappendsjoins_[1]satypesavaluesdummysescape_dn_chars( sdnsnotypessavaluesdummysatypes_[1]srdn_listsrdns dn_decomp((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pys explode_dn@s Q`cCs| ogSnt|d}|o9gi}|D] \}}}||pdq5~SnKgi}|D]5\}}}|di |t |pdfqn~SdS(s explode_rdn(rdn [, notypes=0]) -> list This function takes a RDN and breaks it up into its component parts if it is a multi-valued RDN. The notypes parameter is used to specify that only the component's attribute values be returned and not the attribute types. iss=N( srdnsstr2dns rdn_decompsnotypessappends_[1]satypesavaluesdummysjoinsescape_dn_chars(srdnsnotypessavaluesdummysatypes_[1]s rdn_decomp((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pys explode_rdnZs9( s__doc__s __version__s_ldapsldap.functionssldapsescape_dn_charssstr2dnsdn2strs explode_dns explode_rdn(sstr2dns __version__s explode_rdnsldaps_ldaps explode_dnsescape_dn_charssdn2str((s8build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/dn.pys? s    PKO{6Sldap/filter.py""" filters.py - misc stuff for handling LDAP filter strings (see RFC2254) written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: filter.py,v 1.4 2006/11/16 13:49:24 stroeder Exp $ Compability: - Tested with Python 2.0+ """ __version__ = '0.0.3' def escape_filter_chars(assertion_value,escape_mode=0): """ Replace all special characters found in assertion_value by quoted notation. escape_mode If 0 only special chars mentioned in RFC 2254 are escaped. If 1 all NON-ASCII chars are escaped. If 2 all chars are escaped. """ if escape_mode: r = [] if escape_mode==1: for c in assertion_value: if c < '0' or c > 'z' or c in "\\*()": c = "\\%02x" % ord(c) r.append(c) elif escape_mode==2: for c in assertion_value: r.append("\\%02x" % ord(c)) else: raise ValueError('escape_mode must be 0, 1 or 2.') s = ''.join(r) else: s = assertion_value.replace('\\', r'\5c') s = s.replace(r'*', r'\2a') s = s.replace(r'(', r'\28') s = s.replace(r')', r'\29') s = s.replace('\x00', r'\00') return s def filter_format(filter_template,assertion_values): """ filter_template String containing %s as placeholder for assertion values. assertion_values List or tuple of assertion values. Length must match count of %s in filter_template. """ return filter_template % (tuple(map(escape_filter_chars,assertion_values))) PKg6qhkkldap/filter.pyc;  Fc@s%dZdZddZdZdS(s filters.py - misc stuff for handling LDAP filter strings (see RFC2254) written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: filter.py,v 1.4 2006/11/16 13:49:24 stroeder Exp $ Compability: - Tested with Python 2.0+ s0.0.3icCs1|og}|djo]x|D]N}|djp|djp |djodt|}n|i|q!WnF|djo,x5|D]}|idt|qWn tddi|}n[|i d d }|i d d }|i d d}|i dd}|i dd}|SdS(s Replace all special characters found in assertion_value by quoted notation. escape_mode If 0 only special chars mentioned in RFC 2254 are escaped. If 1 all NON-ASCII chars are escaped. If 2 all chars are escaped. is0szs\*()s\%02xisescape_mode must be 0, 1 or 2.ss\s\5cs*s\2as(s\28s)s\29ss\00N( s escape_modesrsassertion_valuescsordsappends ValueErrorsjoinsssreplace(sassertion_values escape_modescsssr((s<build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/filter.pysescape_filter_charss*  '  cCs|ttt|SdS(s filter_template String containing %s as placeholder for assertion values. assertion_values List or tuple of assertion values. Length must match count of %s in filter_template. N(sfilter_templatestuplesmapsescape_filter_charssassertion_values(sfilter_templatesassertion_values((s<build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/filter.pys filter_format1sN(s__doc__s __version__sescape_filter_charss filter_format(s __version__sescape_filter_charss filter_format((s<build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/filter.pys? s !PKg6qhkkldap/filter.pyo;  Fc@s%dZdZddZdZdS(s filters.py - misc stuff for handling LDAP filter strings (see RFC2254) written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: filter.py,v 1.4 2006/11/16 13:49:24 stroeder Exp $ Compability: - Tested with Python 2.0+ s0.0.3icCs1|og}|djo]x|D]N}|djp|djp |djodt|}n|i|q!WnF|djo,x5|D]}|idt|qWn tddi|}n[|i d d }|i d d }|i d d}|i dd}|i dd}|SdS(s Replace all special characters found in assertion_value by quoted notation. escape_mode If 0 only special chars mentioned in RFC 2254 are escaped. If 1 all NON-ASCII chars are escaped. If 2 all chars are escaped. is0szs\*()s\%02xisescape_mode must be 0, 1 or 2.ss\s\5cs*s\2as(s\28s)s\29ss\00N( s escape_modesrsassertion_valuescsordsappends ValueErrorsjoinsssreplace(sassertion_values escape_modescsssr((s<build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/filter.pysescape_filter_charss*  '  cCs|ttt|SdS(s filter_template String containing %s as placeholder for assertion values. assertion_values List or tuple of assertion values. Length must match count of %s in filter_template. N(sfilter_templatestuplesmapsescape_filter_charssassertion_values(sfilter_templatesassertion_values((s<build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/filter.pys filter_format1sN(s__doc__s __version__sescape_filter_charss filter_format(s __version__sescape_filter_charss filter_format((s<build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/filter.pys? s !PKO{6n^ ldap/functions.py""" functions.py - wraps functions of module _ldap written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: functions.py,v 1.20 2007/03/22 23:12:36 stroeder Exp $ Compability: - Tested with Python 2.0+ but should work with Python 1.5.x - functions should behave exactly the same like in _ldap Usage: Directly imported by ldap/__init__.py. The symbols of _ldap are overridden. Thread-lock: Basically calls into the LDAP lib are serialized by the module-wide lock _ldapmodule_lock. """ __version__ = '0.1.2' __all__ = [ 'open','initialize','init', 'explode_dn','explode_rdn', 'get_option','set_option', ] import sys,_ldap from ldap import _ldap_module_lock,LDAPError from ldap.dn import explode_dn,explode_rdn from ldap.ldapobject import LDAPObject if __debug__: # Tracing is only supported in debugging mode import traceback from ldap import _trace_level,_trace_file,_trace_stack_limit def _ldap_function_call(func,*args,**kwargs): """ Wrapper function which locks calls to func with via module-wide ldap_lock """ if __debug__: if _trace_level>=1: _trace_file.write('*** %s.%s (%s,%s)\n' % ( '_ldap',repr(func), repr(args),repr(kwargs) )) if _trace_level>=3: traceback.print_stack(limit=_trace_stack_limit,file=_trace_file) _ldap_module_lock.acquire() try: try: result = func(*args,**kwargs) finally: _ldap_module_lock.release() except LDAPError,e: if __debug__ and _trace_level>=2: _trace_file.write('=> LDAPError: %s\n' % (str(e))) raise if __debug__ and _trace_level>=2: if result!=None and result!=(None,None): _trace_file.write('=> result: %s\n' % (repr(result))) return result def initialize(uri,trace_level=0,trace_file=sys.stdout,trace_stack_limit=None): """ Return LDAPObject instance by opening LDAP connection to LDAP host specified by LDAP URL Parameters: uri LDAP URL containing at least connection scheme and hostport, e.g. ldap://localhost:389 trace_level If non-zero a trace output of LDAP calls is generated. trace_file File object where to write the trace output to. Default is to use stdout. """ return LDAPObject(uri,trace_level,trace_file,trace_stack_limit) def open(host,port=389,trace_level=0,trace_file=sys.stdout,trace_stack_limit=None): """ Return LDAPObject instance by opening LDAP connection to specified LDAP host Parameters: host LDAP host and port, e.g. localhost port integer specifying the port number to use, e.g. 389 trace_level If non-zero a trace output of LDAP calls is generated. trace_file File object where to write the trace output to. Default is to use stdout. """ return initialize('ldap://%s:%d' % (host,port),trace_level,trace_file,trace_stack_limit) init = open def get_option(option): """ get_option(name) -> value Get the value of an LDAP global option. """ return _ldap_function_call(_ldap.get_option,option) def set_option(option,invalue): """ set_option(name, value) Set the value of an LDAP global option. """ _ldap_function_call(_ldap.set_option,option,invalue) PKg6Bwwldap/functions.pyc;  Fc@sdZdZdddddddgZd kZd kZd klZlZd kl Z l Z d k l Z e o&d kZd klZlZlZndZdeiedZddeiedZeZdZdZd S(s functions.py - wraps functions of module _ldap written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: functions.py,v 1.20 2007/03/22 23:12:36 stroeder Exp $ Compability: - Tested with Python 2.0+ but should work with Python 1.5.x - functions should behave exactly the same like in _ldap Usage: Directly imported by ldap/__init__.py. The symbols of _ldap are overridden. Thread-lock: Basically calls into the LDAP lib are serialized by the module-wide lock _ldapmodule_lock. s0.1.2sopens initializesinits explode_dns explode_rdns get_options set_optionN(s_ldap_module_locks LDAPError(s explode_dns explode_rdn(s LDAPObject(s _trace_levels _trace_files_trace_stack_limitcOsFtoktdjoZtiddt|t|t|ftdjoti dt dtqnqrnt i y%z|||}Wdt iXWnGtj o;}to tdjotid t|nnXto tdjo?|tjo|ttfjotid t|q>n|SdS( sQ Wrapper function which locks calls to func with via module-wide ldap_lock is*** %s.%s (%s,%s) s_ldapislimitsfileNis=> LDAPError: %s s=> result: %s (s __debug__s _trace_levels _trace_fileswritesreprsfuncsargsskwargss tracebacks print_stacks_trace_stack_limits_ldap_module_locksacquiresresultsreleases LDAPErrorsesstrsNone(sfuncsargsskwargssesresult((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pys_ldap_function_call+s( / "  icCst||||SdS(s Return LDAPObject instance by opening LDAP connection to LDAP host specified by LDAP URL Parameters: uri LDAP URL containing at least connection scheme and hostport, e.g. ldap://localhost:389 trace_level If non-zero a trace output of LDAP calls is generated. trace_file File object where to write the trace output to. Default is to use stdout. N(s LDAPObjectsuris trace_levels trace_filestrace_stack_limit(suris trace_levels trace_filestrace_stack_limit((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pys initializeHsicCs!td||f|||SdS(s Return LDAPObject instance by opening LDAP connection to specified LDAP host Parameters: host LDAP host and port, e.g. localhost port integer specifying the port number to use, e.g. 389 trace_level If non-zero a trace output of LDAP calls is generated. trace_file File object where to write the trace output to. Default is to use stdout. s ldap://%s:%dN(s initializeshostsports trace_levels trace_filestrace_stack_limit(shostsports trace_levels trace_filestrace_stack_limit((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pysopenZscCstti|SdS(sJ get_option(name) -> value Get the value of an LDAP global option. N(s_ldap_function_calls_ldaps get_optionsoption(soption((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pys get_optionoscCstti||dS(sJ set_option(name, value) Set the value of an LDAP global option. N(s_ldap_function_calls_ldaps set_optionsoptionsinvalue(soptionsinvalue((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pys set_optionxs(s__doc__s __version__s__all__ssyss_ldapsldaps_ldap_module_locks LDAPErrorsldap.dns explode_dns explode_rdnsldap.ldapobjects LDAPObjects __debug__s tracebacks _trace_levels _trace_files_trace_stack_limits_ldap_function_callsstdoutsNones initializesopensinits get_options set_option(s set_options_ldap_function_calls _trace_levels__all__s LDAPObjects _trace_files tracebacks get_optionsinitssyssopens explode_rdns LDAPErrors initializes_ldaps explode_dns __version__s_ldap_module_locks_trace_stack_limit((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pys?s    PKg6^ldap/functions.pyo;  Fc@sdZdZdddddddgZd kZd kZd klZlZd kl Z l Z d k l Z d Z deiedZddeiedZeZdZdZd S(s functions.py - wraps functions of module _ldap written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: functions.py,v 1.20 2007/03/22 23:12:36 stroeder Exp $ Compability: - Tested with Python 2.0+ but should work with Python 1.5.x - functions should behave exactly the same like in _ldap Usage: Directly imported by ldap/__init__.py. The symbols of _ldap are overridden. Thread-lock: Basically calls into the LDAP lib are serialized by the module-wide lock _ldapmodule_lock. s0.1.2sopens initializesinits explode_dns explode_rdns get_options set_optionN(s_ldap_module_locks LDAPError(s explode_dns explode_rdn(s LDAPObjectcOstiy%z|||}WdtiXWnGtj o;}t o t djot i dt |nnXt o t djo?|tjo|ttfjot i dt|qn|SdS(sQ Wrapper function which locks calls to func with via module-wide ldap_lock Nis=> LDAPError: %s s=> result: %s (s_ldap_module_locksacquiresfuncsargsskwargssresultsreleases LDAPErrorses __debug__s _trace_levels _trace_fileswritesstrsNonesrepr(sfuncsargsskwargssesresult((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pys_ldap_function_call+s   icCst||||SdS(s Return LDAPObject instance by opening LDAP connection to LDAP host specified by LDAP URL Parameters: uri LDAP URL containing at least connection scheme and hostport, e.g. ldap://localhost:389 trace_level If non-zero a trace output of LDAP calls is generated. trace_file File object where to write the trace output to. Default is to use stdout. N(s LDAPObjectsuris trace_levels trace_filestrace_stack_limit(suris trace_levels trace_filestrace_stack_limit((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pys initializeHsicCs!td||f|||SdS(s Return LDAPObject instance by opening LDAP connection to specified LDAP host Parameters: host LDAP host and port, e.g. localhost port integer specifying the port number to use, e.g. 389 trace_level If non-zero a trace output of LDAP calls is generated. trace_file File object where to write the trace output to. Default is to use stdout. s ldap://%s:%dN(s initializeshostsports trace_levels trace_filestrace_stack_limit(shostsports trace_levels trace_filestrace_stack_limit((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pysopenZscCstti|SdS(sJ get_option(name) -> value Get the value of an LDAP global option. N(s_ldap_function_calls_ldaps get_optionsoption(soption((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pys get_optionoscCstti||dS(sJ set_option(name, value) Set the value of an LDAP global option. N(s_ldap_function_calls_ldaps set_optionsoptionsinvalue(soptionsinvalue((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pys set_optionxs(s__doc__s __version__s__all__ssyss_ldapsldaps_ldap_module_locks LDAPErrorsldap.dns explode_dns explode_rdnsldap.ldapobjects LDAPObjects_ldap_function_callsstdoutsNones initializesopensinits get_options set_option(s set_options__all__s LDAPObjects get_optionssyssinits explode_rdns LDAPErrors initializes_ldaps explode_dns __version__sopens_ldap_module_locks_ldap_function_call((s?build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/functions.pys?s   PK\6=Rldap/ldapobject.py""" ldapobject.py - wraps class _ldap.LDAPObject written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: ldapobject.py,v 1.98 2007/06/05 09:56:15 stroeder Exp $ Compability: - Tested with Python 2.0+ but should work with Python 1.5.x - LDAPObject class should be exactly the same like _ldap.LDAPObject Usage: Directly imported by ldap/__init__.py. The symbols of _ldap are overridden. Thread-lock: Basically calls into the LDAP lib are serialized by the module-wide lock self._ldap_object_lock. """ __version__ = '0.7.0' __all__ = [ 'LDAPObject', 'SimpleLDAPObject', 'NonblockingLDAPObject', 'ReconnectLDAPObject', 'SmartLDAPObject' ] if __debug__: # Tracing is only supported in debugging mode import traceback import sys,time,_ldap,ldap,ldap.functions from ldap.schema import SCHEMA_ATTRS from ldap.controls import LDAPControl,DecodeControlTuples,EncodeControlTuples from ldap import LDAPError class SimpleLDAPObject: """ Drop-in wrapper class around _ldap.LDAPObject """ CLASSATTR_OPTION_MAPPING = { "protocol_version": ldap.OPT_PROTOCOL_VERSION, "deref": ldap.OPT_DEREF, "referrals": ldap.OPT_REFERRALS, "timelimit": ldap.OPT_TIMELIMIT, "sizelimit": ldap.OPT_SIZELIMIT, "network_timeout": ldap.OPT_NETWORK_TIMEOUT, "error_number":ldap.OPT_ERROR_NUMBER, "error_string":ldap.OPT_ERROR_STRING, "matched_dn":ldap.OPT_MATCHED_DN, } def __init__( self,uri, trace_level=0,trace_file=None,trace_stack_limit=5 ): self._trace_level = trace_level self._trace_file = trace_file or sys.stdout self._trace_stack_limit = trace_stack_limit self._uri = uri self._ldap_object_lock = self._ldap_lock() self._l = ldap.functions._ldap_function_call(_ldap.initialize,uri) self.timeout = -1 self.protocol_version = ldap.VERSION3 def _ldap_lock(self): if ldap.LIBLDAP_R: return ldap.LDAPLock() else: return ldap._ldap_module_lock def _ldap_call(self,func,*args,**kwargs): """ Wrapper method mainly for serializing calls into OpenLDAP libs and trace logs """ if __debug__: if self._trace_level>=1:# and func.__name__!='result': self._trace_file.write('*** %s - %s (%s,%s)\n' % ( self._uri, self.__class__.__name__+'.'+func.__name__, repr(args),repr(kwargs) )) if self._trace_level>=3: traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file) self._ldap_object_lock.acquire() try: try: result = func(*args,**kwargs) finally: self._ldap_object_lock.release() except LDAPError,e: if __debug__ and self._trace_level>=2: self._trace_file.write('=> LDAPError - %s: %s\n' % (e.__class__.__name__,str(e))) raise if __debug__ and self._trace_level>=2: if result!=None and result!=(None,None): self._trace_file.write('=> result: %s\n' % (repr(result))) return result def __setattr__(self,name,value): if self.CLASSATTR_OPTION_MAPPING.has_key(name): self.set_option(self.CLASSATTR_OPTION_MAPPING[name],value) else: self.__dict__[name] = value def __getattr__(self,name): if self.CLASSATTR_OPTION_MAPPING.has_key(name): return self.get_option(self.CLASSATTR_OPTION_MAPPING[name]) elif self.__dict__.has_key(name): return self.__dict__[name] else: raise AttributeError,'%s has no attribute %s' % ( self.__class__.__name__,repr(name) ) def abandon_ext(self,msgid,serverctrls=None,clientctrls=None): """ abandon_ext(msgid[,serverctrls=None[,clientctrls=None]]) -> None abandon(msgid) -> None Abandons or cancels an LDAP operation in progress. The msgid should be the message id of an outstanding LDAP operation as returned by the asynchronous methods search(), modify() etc. The caller can expect that the result of an abandoned operation will not be returned from a future call to result(). """ return self._ldap_call(self._l.abandon_ext,msgid,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) def abandon(self,msgid): return self.abandon_ext(msgid,None,None) def cancel(self,cancelid,serverctrls=None,clientctrls=None): """ cancel(cancelid[,serverctrls=None[,clientctrls=None]]) -> int Send cancels extended operation for an LDAP operation specified by cancelid. The cancelid should be the message id of an outstanding LDAP operation as returned by the asynchronous methods search(), modify() etc. The caller can expect that the result of an abandoned operation will not be returned from a future call to result(). In opposite to abandon() this extended operation gets an result from the server and thus should be preferred if the server supports it. """ return self._ldap_call(self._l.cancel,cancelid,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) def cancel_s(self,cancelid,serverctrls=None,clientctrls=None): msgid = self.cancel(cancelid,serverctrls,clientctrls) try: res = self.result(msgid,all=1,timeout=self.timeout) except (ldap.CANCELLED,ldap.SUCCESS): pass def add_ext(self,dn,modlist,serverctrls=None,clientctrls=None): """ add_ext(dn, modlist[,serverctrls=None[,clientctrls=None]]) -> int This function adds a new entry with a distinguished name specified by dn which means it must not already exist. The parameter modlist is similar to the one passed to modify(), except that no operation integer need be included in the tuples. """ return self._ldap_call(self._l.add_ext,dn,modlist,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) def add_ext_s(self,dn,modlist,serverctrls=None,clientctrls=None): msgid = self.add_ext(dn,modlist,serverctrls,clientctrls) return self.result(msgid,all=1,timeout=self.timeout) def add(self,dn,modlist): """ add(dn, modlist) -> int This function adds a new entry with a distinguished name specified by dn which means it must not already exist. The parameter modlist is similar to the one passed to modify(), except that no operation integer need be included in the tuples. """ return self.add_ext(dn,modlist,None,None) def add_s(self,dn,modlist): msgid = self.add(dn,modlist) return self.result(msgid,all=1,timeout=self.timeout) def simple_bind(self,who='',cred='',serverctrls=None,clientctrls=None): """ simple_bind([who='' [,cred='']]) -> int """ return self._ldap_call(self._l.simple_bind,who,cred,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) def simple_bind_s(self,who='',cred='',serverctrls=None,clientctrls=None): """ simple_bind_s([who='' [,cred='']]) -> None """ msgid = self.simple_bind(who,cred,serverctrls,clientctrls) return self.result(msgid,all=1,timeout=self.timeout) def bind(self,who,cred,method=ldap.AUTH_SIMPLE): """ bind(who, cred, method) -> int """ assert method==ldap.AUTH_SIMPLE,'Only simple bind supported in LDAPObject.bind()' return self.simple_bind(who,cred) def bind_s(self,who,cred,method=ldap.AUTH_SIMPLE): """ bind_s(who, cred, method) -> None """ msgid = self.bind(who,cred,method) return self.result(msgid,all=1,timeout=self.timeout) def sasl_interactive_bind_s(self,who,auth,serverctrls=None,clientctrls=None,sasl_flags=ldap.SASL_QUIET): """ sasl_interactive_bind_s(who, auth) -> None """ return self._ldap_call(self._l.sasl_interactive_bind_s,who,auth,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls),sasl_flags) def compare_ext(self,dn,attr,value,serverctrls=None,clientctrls=None): """ compare_ext(dn, attr, value [,serverctrls=None[,clientctrls=None]]) -> int compare_ext_s(dn, attr, value [,serverctrls=None[,clientctrls=None]]) -> int compare(dn, attr, value) -> int compare_s(dn, attr, value) -> int Perform an LDAP comparison between the attribute named attr of entry dn, and the value value. The synchronous form returns 0 for false, or 1 for true. The asynchronous form returns the message id of the initiates request, and the result of the asynchronous compare can be obtained using result(). Note that this latter technique yields the answer by raising the exception objects COMPARE_TRUE or COMPARE_FALSE. A design bug in the library prevents value from containing nul characters. """ return self._ldap_call(self._l.compare_ext,dn,attr,value,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) def compare_ext_s(self,dn,attr,value,serverctrls=None,clientctrls=None): msgid = self.compare_ext(dn,attr,value,serverctrls,clientctrls) try: self.result(msgid,all=1,timeout=self.timeout) except _ldap.COMPARE_TRUE: return 1 except _ldap.COMPARE_FALSE: return 0 return None def compare(self,dn,attr,value): return self.compare_ext(dn,attr,value,None,None) def compare_s(self,dn,attr,value): return self.compare_ext_s(dn,attr,value,None,None) def delete_ext(self,dn,serverctrls=None,clientctrls=None): """ delete(dn) -> int delete_s(dn) -> None delete_ext(dn[,serverctrls=None[,clientctrls=None]]) -> int delete_ext_s(dn[,serverctrls=None[,clientctrls=None]]) -> None Performs an LDAP delete operation on dn. The asynchronous form returns the message id of the initiated request, and the result can be obtained from a subsequent call to result(). """ return self._ldap_call(self._l.delete_ext,dn,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) def delete_ext_s(self,dn,serverctrls=None,clientctrls=None): msgid = self.delete_ext(dn,serverctrls,clientctrls) return self.result(msgid,all=1,timeout=self.timeout) def delete(self,dn): return self.delete_ext(dn,None,None) def delete_s(self,dn): return self.delete_ext_s(dn,None,None) def manage_dsa_it(self,enable,critical=0): """ manage_dsa_it() -> None Enable or disable manageDSAit mode (see draft-zeilenga-ldap-namedref) """ all_server_ctrls = [ c for c in self.get_option(ldap.OPT_SERVER_CONTROLS) or [] if c.controlType!='2.16.840.1.113730.3.4.2' ] if enable: all_server_ctrls.append(LDAPControl('2.16.840.1.113730.3.4.2',critical,None)) self.set_option(ldap.OPT_SERVER_CONTROLS,all_server_ctrls) def modify_ext(self,dn,modlist,serverctrls=None,clientctrls=None): """ modify_ext(dn, modlist[,serverctrls=None[,clientctrls=None]]) -> int """ return self._ldap_call(self._l.modify_ext,dn,modlist,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) def modify_ext_s(self,dn,modlist,serverctrls=None,clientctrls=None): msgid = self.modify_ext(dn,modlist,serverctrls,clientctrls) return self.result(msgid,all=1,timeout=self.timeout) def modify(self,dn,modlist): """ modify(dn, modlist) -> int modify_s(dn, modlist) -> None modify_ext(dn, modlist[,serverctrls=None[,clientctrls=None]]) -> int modify_ext_s(dn, modlist[,serverctrls=None[,clientctrls=None]]) -> None Performs an LDAP modify operation on an entry's attributes. dn is the DN of the entry to modify, and modlist is the list of modifications to make to the entry. Each element of the list modlist should be a tuple of the form (mod_op,mod_type,mod_vals), where mod_op is the operation (one of MOD_ADD, MOD_DELETE, MOD_INCREMENT or MOD_REPLACE), mod_type is a string indicating the attribute type name, and mod_vals is either a string value or a list of string values to add, delete, increment by or replace respectively. For the delete operation, mod_vals may be None indicating that all attributes are to be deleted. The asynchronous modify() returns the message id of the initiated request. """ return self.modify_ext(dn,modlist,None,None) def modify_s(self,dn,modlist): msgid = self.modify(dn,modlist) return self.result(msgid,all=1,timeout=self.timeout) def modrdn(self,dn,newrdn,delold=1): """ modrdn(dn, newrdn [,delold=1]) -> int modrdn_s(dn, newrdn [,delold=1]) -> None Perform a modify RDN operation. These routines take dn, the DN of the entry whose RDN is to be changed, and newrdn, the new RDN to give to the entry. The optional parameter delold is used to specify whether the old RDN should be kept as an attribute of the entry or not. The asynchronous version returns the initiated message id. This operation is emulated by rename() and rename_s() methods since the modrdn2* routines in the C library are deprecated. """ return self.rename(dn,newrdn,None,delold) def modrdn_s(self,dn,newrdn,delold=1): return self.rename_s(dn,newrdn,None,delold) def passwd(self,user,oldpw,newpw,serverctrls=None,clientctrls=None): return self._ldap_call(self._l.passwd,user,oldpw,newpw,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) def passwd_s(self,user,oldpw,newpw,serverctrls=None,clientctrls=None): msgid = self.passwd(user,oldpw,newpw,serverctrls,clientctrls) return self.result(msgid,all=1,timeout=self.timeout) def rename(self,dn,newrdn,newsuperior=None,delold=1,serverctrls=None,clientctrls=None): """ rename(dn, newrdn [, newsuperior=None [,delold=1][,serverctrls=None[,clientctrls=None]]]) -> int rename_s(dn, newrdn [, newsuperior=None] [,delold=1][,serverctrls=None[,clientctrls=None]]) -> None Perform a rename entry operation. These routines take dn, the DN of the entry whose RDN is to be changed, newrdn, the new RDN, and newsuperior, the new parent DN, to give to the entry. If newsuperior is None then only the RDN is modified. The optional parameter delold is used to specify whether the old RDN should be kept as an attribute of the entry or not. The asynchronous version returns the initiated message id. This actually corresponds to the rename* routines in the LDAP-EXT C API library. """ return self._ldap_call(self._l.rename,dn,newrdn,newsuperior,delold,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) def rename_s(self,dn,newrdn,newsuperior=None,delold=1): msgid = self.rename(dn,newrdn,newsuperior,delold) return self.result(msgid,all=1,timeout=self.timeout) def result(self,msgid=ldap.RES_ANY,all=1,timeout=None): """ result([msgid=RES_ANY [,all=1 [,timeout=None]]]) -> (result_type, result_data) This method is used to wait for and return the result of an operation previously initiated by one of the LDAP asynchronous operation routines (eg search(), modify(), etc.) They all returned an invocation identifier (a message id) upon successful initiation of their operation. This id is guaranteed to be unique across an LDAP session, and can be used to request the result of a specific operation via the msgid parameter of the result() method. If the result of a specific operation is required, msgid should be set to the invocation message id returned when the operation was initiated; otherwise RES_ANY should be supplied. The all parameter only has meaning for search() responses and is used to select whether a single entry of the search response should be returned, or to wait for all the results of the search before returning. A search response is made up of zero or more search entries followed by a search result. If all is 0, search entries will be returned one at a time as they come in, via separate calls to result(). If all is 1, the search response will be returned in its entirety, i.e. after all entries and the final search result have been received. For all set to 0, result tuples trickle in (with the same message id), and with the result type RES_SEARCH_ENTRY, until the final result which has a result type of RES_SEARCH_RESULT and a (usually) empty data field. When all is set to 1, only one result is returned, with a result type of RES_SEARCH_RESULT, and all the result tuples listed in the data field. The method returns a tuple of the form (result_type, result_data). The result_type is one of the constants RES_*. See search() for a description of the search result's result_data, otherwise the result_data is normally meaningless. The result() method will block for timeout seconds, or indefinitely if timeout is negative. A timeout of 0 will effect a poll. The timeout can be expressed as a floating-point value. If timeout is None the default in self.timeout is used. If a timeout occurs, a TIMEOUT exception is raised, unless polling (timeout = 0), in which case (None, None) is returned. """ res_type,res_data,res_msgid = self.result2(msgid,all,timeout) return res_type,res_data def result2(self,msgid=_ldap.RES_ANY,all=1,timeout=None): res_type, res_data, res_msgid, srv_ctrls = self.result3(msgid,all,timeout) return res_type, res_data, res_msgid def result3(self,msgid=_ldap.RES_ANY,all=1,timeout=None): if timeout is None: timeout = self.timeout rtype, rdata, rmsgid, serverctrls = self._ldap_call(self._l.result3,msgid,all,timeout) decoded_serverctrls = DecodeControlTuples(serverctrls) return rtype, rdata, rmsgid, decoded_serverctrls def search_ext(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,serverctrls=None,clientctrls=None,timeout=-1,sizelimit=0): """ search(base, scope [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0]]]) -> int search_s(base, scope [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0]]]) search_st(base, scope [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,timeout=-1]]]]) search_ext(base,scope,[,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,serverctrls=None [,clientctrls=None [,timeout=-1 [,sizelimit=0]]]]]]]) search_ext_s(base,scope,[,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,serverctrls=None [,clientctrls=None [,timeout=-1 [,sizelimit=0]]]]]]]) Perform an LDAP search operation, with base as the DN of the entry at which to start the search, scope being one of SCOPE_BASE (to search the object itself), SCOPE_ONELEVEL (to search the object's immediate children), or SCOPE_SUBTREE (to search the object and all its descendants). filter is a string representation of the filter to apply in the search (see RFC 2254). Each result tuple is of the form (dn,entry), where dn is a string containing the DN (distinguished name) of the entry, and entry is a dictionary containing the attributes. Attributes types are used as string dictionary keys and attribute values are stored in a list as dictionary value. The DN in dn is extracted using the underlying ldap_get_dn(), which may raise an exception of the DN is malformed. If attrsonly is non-zero, the values of attrs will be meaningless (they are not transmitted in the result). The retrieved attributes can be limited with the attrlist parameter. If attrlist is None, all the attributes of each entry are returned. serverctrls=None clientctrls=None The synchronous form with timeout, search_st() or search_ext_s(), will block for at most timeout seconds (or indefinitely if timeout is negative). A TIMEOUT exception is raised if no result is received within the time. The amount of search results retrieved can be limited with the sizelimit parameter if non-zero. """ return self._ldap_call( self._l.search_ext, base,scope,filterstr, attrlist,attrsonly, EncodeControlTuples(serverctrls), EncodeControlTuples(clientctrls), timeout,sizelimit, ) def search_ext_s(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,serverctrls=None,clientctrls=None,timeout=-1,sizelimit=0): msgid = self.search_ext(base,scope,filterstr,attrlist,attrsonly,serverctrls,clientctrls,timeout,sizelimit) return self.result(msgid,all=1,timeout=timeout)[1] def search(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0): return self.search_ext(base,scope,filterstr,attrlist,attrsonly,None,None) def search_s(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0): return self.search_ext_s(base,scope,filterstr,attrlist,attrsonly,None,None,timeout=self.timeout) def search_st(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,timeout=-1): return self.search_ext_s(base,scope,filterstr,attrlist,attrsonly,None,None,timeout) def set_cache_options(self,*args,**kwargs): """ set_cache_options(option) -> None Changes the caching behaviour. Currently supported options are CACHE_OPT_CACHENOERRS, which suppresses caching of requests that resulted in an error, and CACHE_OPT_CACHEALLERRS, which enables caching of all requests. The default behaviour is not to cache requests that result in errors, except those that result in a SIZELIMIT_EXCEEDED exception. """ return self._ldap_call(self._l.set_cache_options,*args,**kwargs) def start_tls_s(self): """ start_tls_s() -> None Negotiate TLS with server. The `version' attribute must have been set to VERSION3 before calling start_tls_s. If TLS could not be started an exception will be raised. """ return self._ldap_call(self._l.start_tls_s) def unbind_ext(self,serverctrls=None,clientctrls=None): """ unbind() -> int unbind_s() -> None unbind_ext() -> int unbind_ext_s() -> None This call is used to unbind from the directory, terminate the current association, and free resources. Once called, the connection to the LDAP server is closed and the LDAP object is invalid. Further invocation of methods on the object will yield an exception. The unbind and unbind_s methods are identical, and are synchronous in nature """ return self._ldap_call(self._l.unbind_ext,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls)) def unbind_ext_s(self,serverctrls=None,clientctrls=None): msgid = self.unbind_ext(serverctrls,clientctrls) if msgid!=None: return self.result(msgid,all=1,timeout=self.timeout) def unbind(self): return self.unbind_ext(None,None) def unbind_s(self): return self.unbind_ext_s(None,None) def whoami_s(self,serverctrls=None,clientctrls=None): return self._ldap_call(self._l.whoami_s,serverctrls,clientctrls) def get_option(self,option): result = self._ldap_call(self._l.get_option,option) if option==ldap.OPT_SERVER_CONTROLS or option==ldap.OPT_CLIENT_CONTROLS: result = DecodeControlTuples(result) return result def set_option(self,option,invalue): if option==ldap.OPT_SERVER_CONTROLS or option==ldap.OPT_CLIENT_CONTROLS: invalue = EncodeControlTuples(invalue) return self._ldap_call(self._l.set_option,option,invalue) def search_subschemasubentry_s(self,dn=''): """ Returns the distinguished name of the sub schema sub entry for a part of a DIT specified by dn. None as result indicates that the DN of the sub schema sub entry could not be determined. """ try: r = self.search_s( dn,ldap.SCOPE_BASE,'(objectClass=*)',['subschemaSubentry'] ) except (ldap.NO_SUCH_OBJECT,ldap.NO_SUCH_ATTRIBUTE,ldap.INSUFFICIENT_ACCESS): r = [] except ldap.UNDEFINED_TYPE: return None try: if r: e = ldap.cidict.cidict(r[0][1]) search_subschemasubentry_dn = e.get('subschemaSubentry',[None])[0] if search_subschemasubentry_dn is None: if dn: # Try to find sub schema sub entry in root DSE return self.search_subschemasubentry_s(dn='') else: # If dn was already root DSE we can return here return None else: return search_subschemasubentry_dn except IndexError: return None def read_subschemasubentry_s(self,subschemasubentry_dn,attrs=None): """ Returns the sub schema sub entry's data """ attrs = attrs or SCHEMA_ATTRS try: r = self.search_s( subschemasubentry_dn,ldap.SCOPE_BASE, '(objectClass=subschema)', attrs ) except ldap.NO_SUCH_OBJECT: return None else: if r: return r[0][1] else: return None class NonblockingLDAPObject(SimpleLDAPObject): def __init__(self,uri,trace_level=0,trace_file=None,result_timeout=-1): self._result_timeout = result_timeout SimpleLDAPObject.__init__(self,uri,trace_level,trace_file) def result(self,msgid=_ldap.RES_ANY,all=1,timeout=-1): """ """ ldap_result = self._ldap_call(self._l.result,msgid,0,self._result_timeout) if not all: return ldap_result start_time = time.time() all_results = [] while all: while ldap_result[0] is None: if (timeout>=0) and (time.time()-start_time>timeout): self._ldap_call(self._l.abandon,msgid) raise _ldap.TIMEOUT( "LDAP time limit (%d secs) exceeded." % (timeout) ) time.sleep(0.00001) ldap_result = self._ldap_call(self._l.result,msgid,0,self._result_timeout) if ldap_result[1] is None: break all_results.extend(ldap_result[1]) ldap_result = None,None return all_results def search_st(self,base,scope,filterstr='(objectClass=*)',attrlist=None,attrsonly=0,timeout=-1): msgid = self.search(base,scope,filterstr,attrlist,attrsonly) return self.result(msgid,all=1,timeout=timeout) class ReconnectLDAPObject(SimpleLDAPObject): """ In case of server failure (ldap.SERVER_DOWN) the implementations of all synchronous operation methods (search_s() etc.) are doing an automatic reconnect and rebind and will retry the very same operation. This is very handy for broken LDAP server implementations (e.g. in Lotus Domino) which drop connections very often making it impossible to have a long-lasting control flow in the application. """ __transient_attrs__ = { '_l':None, '_ldap_object_lock':None, '_trace_file':None, } def __init__( self,uri, trace_level=0,trace_file=None,trace_stack_limit=5, retry_max=1,retry_delay=60.0 ): """ Parameters like SimpleLDAPObject.__init__() with these additional arguments: retry_max Maximum count of reconnect trials retry_delay Time span to wait between two reconnect trials """ self._uri = uri self._options = {} self._last_bind = None SimpleLDAPObject.__init__(self,uri,trace_level,trace_file,trace_stack_limit) self._retry_max = retry_max self._retry_delay = retry_delay self._start_tls = 0 self._reconnects_done = 0L def __getstate__(self): """return data representation for pickled object""" d = {} for k,v in self.__dict__.items(): if not self.__transient_attrs__.has_key(k): d[k] = v return d def __setstate__(self,d): """set up the object from pickled data""" self.__dict__.update(d) self._ldap_object_lock = self._ldap_lock() self._trace_file = sys.stdout self.reconnect(self._uri) def _apply_last_bind(self): if self._last_bind!=None: func,args,kwargs = self._last_bind func(*args,**kwargs) def _restore_options(self): """Restore all recorded options""" for k,v in self._options.items(): SimpleLDAPObject.set_option(self,k,v) def reconnect(self,uri): # Drop and clean up old connection completely # Reconnect reconnect_counter = self._retry_max while reconnect_counter: if __debug__ and self._trace_level>=1: self._trace_file.write('*** Try %d. reconnect to %s...\n' % ( self._retry_max-reconnect_counter+1,uri )) try: # Do the connect self._l = ldap.functions._ldap_function_call(_ldap.initialize,uri) self._restore_options() # StartTLS extended operation in case this was called before if self._start_tls: self.start_tls_s() # Repeat last simple or SASL bind self._apply_last_bind() except ldap.SERVER_DOWN,e: SimpleLDAPObject.unbind_s(self) del self._l if __debug__ and self._trace_level>=1: self._trace_file.write('*** %d. reconnect to %s failed\n' % ( self._retry_max-reconnect_counter+1,uri )) reconnect_counter = reconnect_counter-1 if not reconnect_counter: raise if __debug__ and self._trace_level>=1: self._trace_file.write('=> delay %s...\n' % (self._retry_delay)) time.sleep(self._retry_delay) else: if __debug__ and self._trace_level>=1: self._trace_file.write('*** %d. reconnect to %s successful, last operation will be repeated\n' % ( self._retry_max-reconnect_counter+1,uri )) self._reconnects_done = self._reconnects_done + 1L break def _apply_method_s(self,func,*args,**kwargs): if not self.__dict__.has_key('_l'): self.reconnect(self._uri) try: return func(self,*args,**kwargs) except ldap.SERVER_DOWN: SimpleLDAPObject.unbind_s(self) del self._l # Try to reconnect self.reconnect(self._uri) # Re-try last operation return func(self,*args,**kwargs) def set_option(self,option,invalue): self._options[option] = invalue SimpleLDAPObject.set_option(self,option,invalue) def simple_bind_s(self,*args,**kwargs): self._last_bind = (self.simple_bind_s,args,kwargs) return SimpleLDAPObject.simple_bind_s(self,*args,**kwargs) def start_tls_s(self): res = SimpleLDAPObject.start_tls_s(self) self._start_tls = 1 return res def sasl_interactive_bind_s(self,*args,**kwargs): """ sasl_interactive_bind_s(who, auth) -> None """ self._last_bind = (self.sasl_interactive_bind_s,args,kwargs) return SimpleLDAPObject.sasl_interactive_bind_s(self,*args,**kwargs) def add_ext_s(self,*args,**kwargs): return self._apply_method_s(SimpleLDAPObject.add_ext_s,*args,**kwargs) def cancel_s(self,*args,**kwargs): return self._apply_method_s(SimpleLDAPObject.cancel_s,*args,**kwargs) def compare_s(self,*args,**kwargs): return self._apply_method_s(SimpleLDAPObject.compare_s,*args,**kwargs) def delete_ext_s(self,*args,**kwargs): return self._apply_method_s(SimpleLDAPObject.delete_ext_s,*args,**kwargs) def modify_ext_s(self,*args,**kwargs): return self._apply_method_s(SimpleLDAPObject.modify_ext_s,*args,**kwargs) def rename_s(self,*args,**kwargs): return self._apply_method_s(SimpleLDAPObject.rename_s,*args,**kwargs) def search_ext_s(self,*args,**kwargs): return self._apply_method_s(SimpleLDAPObject.search_ext_s,*args,**kwargs) def whoami_s(self,*args,**kwargs): return self._apply_method_s(SimpleLDAPObject.whoami_s,*args,**kwargs) class SmartLDAPObject(ReconnectLDAPObject): """ Mainly the __init__() method does some smarter things like negotiating the LDAP protocol version and calling LDAPObject.start_tls_s(). """ def __init__( self,uri, trace_level=0,trace_file=None,trace_stack_limit=5, retry_max=1,retry_delay=60.0, who='',cred='', start_tls=1, tls_cacertfile=None,tls_cacertdir=None, tls_clcertfile=None,tls_clkeyfile=None, ): """ Return LDAPObject instance by opening LDAP connection to LDAP host specified by LDAP URL. Unlike ldap.initialize() this function also trys to bind explicitly with the bind DN and credential given as parameter, probe the supported LDAP version and trys to use StartTLS extended operation if this was specified. Parameters like ReconnectLDAPObject.__init__() with these additional arguments: who,cred The Bind-DN and credential to use for simple bind right after connecting. start_tls Determines if StartTLS extended operation is tried on a LDAPv3 server and if the LDAP URL scheme is ldap:. If LDAP URL scheme is not ldap: (e.g. ldaps: or ldapi:) this parameter is ignored. 0 Don't use StartTLS ext op 1 Try StartTLS ext op but proceed when unavailable 2 Try StartTLS ext op and re-raise exception if it fails tls_cacertfile tls_clcertfile tls_clkeyfile """ # Initialize LDAP connection ReconnectLDAPObject.__init__( self,uri, trace_level=trace_level, trace_file=trace_file, trace_stack_limit=trace_stack_limit, retry_max=retry_max, retry_delay=retry_delay ) # Set protocol version to LDAPv3 self.protocol_version = ldap.VERSION3 self.started_tls = 0 try: self.simple_bind_s(who,cred) except ldap.PROTOCOL_ERROR: # Drop connection completely self.unbind_s() ; del self._l self._l = ldap.functions._ldap_function_call(_ldap.initialize,self._uri) self.protocol_version = ldap.VERSION2 self.simple_bind_s(who,cred) # Try to start TLS if requested if start_tls>0 and uri[:5]=='ldap:': if self.protocol_version>=ldap.VERSION3: try: self.start_tls_s() except (ldap.PROTOCOL_ERROR,ldap.CONNECT_ERROR): if start_tls>=2: # Application does not accept clear-text connection # => re-raise exception raise else: self.started_tls = 1 else: if start_tls>=2: raise ValueError,"StartTLS extended operation only possible on LDAPv3+ server!" if self.protocol_version==ldap.VERSION2 or (who and cred): self.simple_bind_s(who,cred) # The class called LDAPObject will be used as default for # ldap.open() and ldap.initialize() LDAPObject = SimpleLDAPObject PKg6w34 ldap/ldapobject.pyc; pFc@sdZdZdddddgZeo dkZndkZdkZdkZdkZdk Zdk l Z d k l Z lZlZd klZdfd YZdefd YZdefd YZdefdYZeZdS(s& ldapobject.py - wraps class _ldap.LDAPObject written by Michael Stroeder See http://python-ldap.sourceforge.net for details. \$Id: ldapobject.py,v 1.98 2007/06/05 09:56:15 stroeder Exp $ Compability: - Tested with Python 2.0+ but should work with Python 1.5.x - LDAPObject class should be exactly the same like _ldap.LDAPObject Usage: Directly imported by ldap/__init__.py. The symbols of _ldap are overridden. Thread-lock: Basically calls into the LDAP lib are serialized by the module-wide lock self._ldap_object_lock. s0.7.0s LDAPObjectsSimpleLDAPObjectsNonblockingLDAPObjectsReconnectLDAPObjectsSmartLDAPObjectN(s SCHEMA_ATTRS(s LDAPControlsDecodeControlTuplessEncodeControlTuples(s LDAPErrorcBstZdZhdei<dei<dei<dei<dei<dei <dei <dei <d ei d6ed d7d<Z?d=Z@d>ZAeed?ZBeed@ZCdAZDdBZEeedCZFdDZGdEZHddFZIedGZJRS(Hs3 Drop-in wrapper class around _ldap.LDAPObject sprotocol_versionsderefs referralss timelimits sizelimitsnetwork_timeouts error_numbers error_strings matched_dniicCsq||_|pti|_||_||_ |i |_ t iiti||_d|_t i|_dS(Ni(s trace_levelsselfs _trace_levels trace_filessyssstdouts _trace_filestrace_stack_limits_trace_stack_limitsuris_uris _ldap_locks_ldap_object_locksldaps functionss_ldap_function_calls_ldaps initializes_lstimeoutsVERSION3sprotocol_version(sselfsuris trace_levels trace_filestrace_stack_limit((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys__init__=s    cCs#tiotiSntiSdS(N(sldaps LIBLDAP_RsLDAPLocks_ldap_module_lock(sself((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys _ldap_lockJs cOsto|idjot|iid|i|iid|it |t |f|idjo t i d|id|iqqn|iiy(z|||}Wd|iiXWnYtj oM}to |idjo*|iid |iit|fnnXto |idjoB|tjo|ttfjo|iid t |qyn|SdS( s[ Wrapper method mainly for serializing calls into OpenLDAP libs and trace logs is*** %s - %s (%s,%s) s.islimitsfileNis=> LDAPError - %s: %s s=> result: %s (s __debug__sselfs _trace_levels _trace_fileswrites_uris __class__s__name__sfuncsreprsargsskwargss tracebacks print_stacks_trace_stack_limits_ldap_object_locksacquiresresultsreleases LDAPErrorsesstrsNone(sselfsfuncsargsskwargssesresult((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys _ldap_callPs(@( * "cCs?|ii|o|i|i||n||i| None abandon(msgid) -> None Abandons or cancels an LDAP operation in progress. The msgid should be the message id of an outstanding LDAP operation as returned by the asynchronous methods search(), modify() etc. The caller can expect that the result of an abandoned operation will not be returned from a future call to result(). N(sselfs _ldap_calls_ls abandon_extsmsgidsEncodeControlTupless serverctrlss clientctrls(sselfsmsgids serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys abandon_ext}s cCs|i|ttSdS(N(sselfs abandon_extsmsgidsNone(sselfsmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysabandonscCs,|i|ii|t|t|SdS(s< cancel(cancelid[,serverctrls=None[,clientctrls=None]]) -> int Send cancels extended operation for an LDAP operation specified by cancelid. The cancelid should be the message id of an outstanding LDAP operation as returned by the asynchronous methods search(), modify() etc. The caller can expect that the result of an abandoned operation will not be returned from a future call to result(). In opposite to abandon() this extended operation gets an result from the server and thus should be preferred if the server supports it. N(sselfs _ldap_calls_lscancelscancelidsEncodeControlTupless serverctrlss clientctrls(sselfscancelids serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyscancels cCs]|i|||}y"|i|ddd|i}Wnt i t i fj onXdS(Nsallistimeout( sselfscancelscancelids serverctrlss clientctrlssmsgidsresultstimeoutsressldaps CANCELLEDsSUCCESS(sselfscancelids serverctrlss clientctrlssmsgidsres((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyscancel_ss "cCs/|i|ii||t|t|SdS(s\ add_ext(dn, modlist[,serverctrls=None[,clientctrls=None]]) -> int This function adds a new entry with a distinguished name specified by dn which means it must not already exist. The parameter modlist is similar to the one passed to modify(), except that no operation integer need be included in the tuples. N( sselfs _ldap_calls_lsadd_extsdnsmodlistsEncodeControlTupless serverctrlss clientctrls(sselfsdnsmodlists serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysadd_extscCs8|i||||}|i|ddd|iSdS(Nsallistimeout( sselfsadd_extsdnsmodlists serverctrlss clientctrlssmsgidsresultstimeout(sselfsdnsmodlists serverctrlss clientctrlssmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys add_ext_sscCs|i||ttSdS(s2 add(dn, modlist) -> int This function adds a new entry with a distinguished name specified by dn which means it must not already exist. The parameter modlist is similar to the one passed to modify(), except that no operation integer need be included in the tuples. N(sselfsadd_extsdnsmodlistsNone(sselfsdnsmodlist((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysaddscCs2|i||}|i|ddd|iSdS(Nsallistimeout(sselfsaddsdnsmodlistsmsgidsresultstimeout(sselfsdnsmodlistsmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysadd_ssscCs/|i|ii||t|t|SdS(s1 simple_bind([who='' [,cred='']]) -> int N( sselfs _ldap_calls_ls simple_bindswhoscredsEncodeControlTupless serverctrlss clientctrls(sselfswhoscreds serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys simple_bindscCs8|i||||}|i|ddd|iSdS(s4 simple_bind_s([who='' [,cred='']]) -> None sallistimeoutN( sselfs simple_bindswhoscreds serverctrlss clientctrlssmsgidsresultstimeout(sselfswhoscreds serverctrlss clientctrlssmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys simple_bind_sscCs.|tijp td|i||SdS(s( bind(who, cred, method) -> int s/Only simple bind supported in LDAPObject.bind()N(smethodsldaps AUTH_SIMPLEsAssertionErrorsselfs simple_bindswhoscred(sselfswhoscredsmethod((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysbindscCs5|i|||}|i|ddd|iSdS(s+ bind_s(who, cred, method) -> None sallistimeoutN(sselfsbindswhoscredsmethodsmsgidsresultstimeout(sselfswhoscredsmethodsmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysbind_sscCs2|i|ii||t|t||SdS(s4 sasl_interactive_bind_s(who, auth) -> None N( sselfs _ldap_calls_lssasl_interactive_bind_sswhosauthsEncodeControlTupless serverctrlss clientctrlss sasl_flags(sselfswhosauths serverctrlss clientctrlss sasl_flags((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyssasl_interactive_bind_sscCs2|i|ii|||t|t|SdS(s( compare_ext(dn, attr, value [,serverctrls=None[,clientctrls=None]]) -> int compare_ext_s(dn, attr, value [,serverctrls=None[,clientctrls=None]]) -> int compare(dn, attr, value) -> int compare_s(dn, attr, value) -> int Perform an LDAP comparison between the attribute named attr of entry dn, and the value value. The synchronous form returns 0 for false, or 1 for true. The asynchronous form returns the message id of the initiates request, and the result of the asynchronous compare can be obtained using result(). Note that this latter technique yields the answer by raising the exception objects COMPARE_TRUE or COMPARE_FALSE. A design bug in the library prevents value from containing nul characters. N( sselfs _ldap_calls_ls compare_extsdnsattrsvaluesEncodeControlTupless serverctrlss clientctrls(sselfsdnsattrsvalues serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys compare_extscCsy|i|||||}y |i|ddd|i Wn3t i j o dSnt i j o dSnXt SdS(Nsallistimeouti(sselfs compare_extsdnsattrsvalues serverctrlss clientctrlssmsgidsresultstimeouts_ldaps COMPARE_TRUEs COMPARE_FALSEsNone(sselfsdnsattrsvalues serverctrlss clientctrlssmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys compare_ext_ss  cCs|i|||ttSdS(N(sselfs compare_extsdnsattrsvaluesNone(sselfsdnsattrsvalue((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyscomparescCs|i|||ttSdS(N(sselfs compare_ext_ssdnsattrsvaluesNone(sselfsdnsattrsvalue((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys compare_sscCs,|i|ii|t|t|SdS(s delete(dn) -> int delete_s(dn) -> None delete_ext(dn[,serverctrls=None[,clientctrls=None]]) -> int delete_ext_s(dn[,serverctrls=None[,clientctrls=None]]) -> None Performs an LDAP delete operation on dn. The asynchronous form returns the message id of the initiated request, and the result can be obtained from a subsequent call to result(). N(sselfs _ldap_calls_ls delete_extsdnsEncodeControlTupless serverctrlss clientctrls(sselfsdns serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys delete_exts cCs5|i|||}|i|ddd|iSdS(Nsallistimeout(sselfs delete_extsdns serverctrlss clientctrlssmsgidsresultstimeout(sselfsdns serverctrlss clientctrlssmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys delete_ext_s scCs|i|ttSdS(N(sselfs delete_extsdnsNone(sselfsdn((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysdeletescCs|i|ttSdS(N(sselfs delete_ext_ssdnsNone(sselfsdn((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysdelete_sscCsgi}|itipgD]$}|idjo||q!q!~}|o|it d|t n|i ti|dS(sk manage_dsa_it() -> None Enable or disable manageDSAit mode (see draft-zeilenga-ldap-namedref) s2.16.840.1.113730.3.4.2N(sappends_[1]sselfs get_optionsldapsOPT_SERVER_CONTROLSscs controlTypesall_server_ctrlssenables LDAPControlscriticalsNones set_option(sselfsenablescriticalsall_server_ctrlsscs_[1]((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys manage_dsa_its NcCs/|i|ii||t|t|SdS(sN modify_ext(dn, modlist[,serverctrls=None[,clientctrls=None]]) -> int N( sselfs _ldap_calls_ls modify_extsdnsmodlistsEncodeControlTupless serverctrlss clientctrls(sselfsdnsmodlists serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys modify_ext%scCs8|i||||}|i|ddd|iSdS(Nsallistimeout( sselfs modify_extsdnsmodlists serverctrlss clientctrlssmsgidsresultstimeout(sselfsdnsmodlists serverctrlss clientctrlssmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys modify_ext_s+scCs|i||ttSdS(s modify(dn, modlist) -> int modify_s(dn, modlist) -> None modify_ext(dn, modlist[,serverctrls=None[,clientctrls=None]]) -> int modify_ext_s(dn, modlist[,serverctrls=None[,clientctrls=None]]) -> None Performs an LDAP modify operation on an entry's attributes. dn is the DN of the entry to modify, and modlist is the list of modifications to make to the entry. Each element of the list modlist should be a tuple of the form (mod_op,mod_type,mod_vals), where mod_op is the operation (one of MOD_ADD, MOD_DELETE, MOD_INCREMENT or MOD_REPLACE), mod_type is a string indicating the attribute type name, and mod_vals is either a string value or a list of string values to add, delete, increment by or replace respectively. For the delete operation, mod_vals may be None indicating that all attributes are to be deleted. The asynchronous modify() returns the message id of the initiated request. N(sselfs modify_extsdnsmodlistsNone(sselfsdnsmodlist((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysmodify/scCs2|i||}|i|ddd|iSdS(Nsallistimeout(sselfsmodifysdnsmodlistsmsgidsresultstimeout(sselfsdnsmodlistsmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysmodify_sFsicCs|i||t|SdS(sg modrdn(dn, newrdn [,delold=1]) -> int modrdn_s(dn, newrdn [,delold=1]) -> None Perform a modify RDN operation. These routines take dn, the DN of the entry whose RDN is to be changed, and newrdn, the new RDN to give to the entry. The optional parameter delold is used to specify whether the old RDN should be kept as an attribute of the entry or not. The asynchronous version returns the initiated message id. This operation is emulated by rename() and rename_s() methods since the modrdn2* routines in the C library are deprecated. N(sselfsrenamesdnsnewrdnsNonesdelold(sselfsdnsnewrdnsdelold((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysmodrdnJs cCs|i||t|SdS(N(sselfsrename_ssdnsnewrdnsNonesdelold(sselfsdnsnewrdnsdelold((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysmodrdn_sZscCs2|i|ii|||t|t|SdS(N( sselfs _ldap_calls_lspasswdsusersoldpwsnewpwsEncodeControlTupless serverctrlss clientctrls(sselfsusersoldpwsnewpws serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyspasswd]scCs;|i|||||}|i|ddd|i SdS(Nsallistimeout( sselfspasswdsusersoldpwsnewpws serverctrlss clientctrlssmsgidsresultstimeout(sselfsusersoldpwsnewpws serverctrlss clientctrlssmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyspasswd_s`sc Cs5|i|ii||||t|t|SdS(s rename(dn, newrdn [, newsuperior=None [,delold=1][,serverctrls=None[,clientctrls=None]]]) -> int rename_s(dn, newrdn [, newsuperior=None] [,delold=1][,serverctrls=None[,clientctrls=None]]) -> None Perform a rename entry operation. These routines take dn, the DN of the entry whose RDN is to be changed, newrdn, the new RDN, and newsuperior, the new parent DN, to give to the entry. If newsuperior is None then only the RDN is modified. The optional parameter delold is used to specify whether the old RDN should be kept as an attribute of the entry or not. The asynchronous version returns the initiated message id. This actually corresponds to the rename* routines in the LDAP-EXT C API library. N( sselfs _ldap_calls_lsrenamesdnsnewrdns newsuperiorsdeloldsEncodeControlTupless serverctrlss clientctrls(sselfsdnsnewrdns newsuperiorsdelolds serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysrenamedscCs8|i||||}|i|ddd|iSdS(Nsallistimeout( sselfsrenamesdnsnewrdns newsuperiorsdeloldsmsgidsresultstimeout(sselfsdnsnewrdns newsuperiorsdeloldsmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysrename_suscCs,|i|||\}}}||fSdS(s result([msgid=RES_ANY [,all=1 [,timeout=None]]]) -> (result_type, result_data) This method is used to wait for and return the result of an operation previously initiated by one of the LDAP asynchronous operation routines (eg search(), modify(), etc.) They all returned an invocation identifier (a message id) upon successful initiation of their operation. This id is guaranteed to be unique across an LDAP session, and can be used to request the result of a specific operation via the msgid parameter of the result() method. If the result of a specific operation is required, msgid should be set to the invocation message id returned when the operation was initiated; otherwise RES_ANY should be supplied. The all parameter only has meaning for search() responses and is used to select whether a single entry of the search response should be returned, or to wait for all the results of the search before returning. A search response is made up of zero or more search entries followed by a search result. If all is 0, search entries will be returned one at a time as they come in, via separate calls to result(). If all is 1, the search response will be returned in its entirety, i.e. after all entries and the final search result have been received. For all set to 0, result tuples trickle in (with the same message id), and with the result type RES_SEARCH_ENTRY, until the final result which has a result type of RES_SEARCH_RESULT and a (usually) empty data field. When all is set to 1, only one result is returned, with a result type of RES_SEARCH_RESULT, and all the result tuples listed in the data field. The method returns a tuple of the form (result_type, result_data). The result_type is one of the constants RES_*. See search() for a description of the search result's result_data, otherwise the result_data is normally meaningless. The result() method will block for timeout seconds, or indefinitely if timeout is negative. A timeout of 0 will effect a poll. The timeout can be expressed as a floating-point value. If timeout is None the default in self.timeout is used. If a timeout occurs, a TIMEOUT exception is raised, unless polling (timeout = 0), in which case (None, None) is returned. N(sselfsresult2smsgidsallstimeoutsres_typesres_datas res_msgid(sselfsmsgidsallstimeoutsres_typesres_datas res_msgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysresultys2cCs2|i|||\}}}}|||fSdS(N( sselfsresult3smsgidsallstimeoutsres_typesres_datas res_msgids srv_ctrls(sselfsmsgidsallstimeoutsres_types srv_ctrlssres_datas res_msgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysresult2s!c Csd|tjo |i}n|i|ii|||\}}}}t |}||||fSdS(N(stimeoutsNonesselfs _ldap_calls_lsresult3smsgidsallsrtypesrdatasrmsgids serverctrlssDecodeControlTuplessdecoded_serverctrls( sselfsmsgidsallstimeoutsrtypesdecoded_serverctrlssrdatas serverctrlssrmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysresult3s   * s(objectClass=*)ic Cs>|i|ii|||||t |t ||| SdS(s search(base, scope [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0]]]) -> int search_s(base, scope [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0]]]) search_st(base, scope [,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,timeout=-1]]]]) search_ext(base,scope,[,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,serverctrls=None [,clientctrls=None [,timeout=-1 [,sizelimit=0]]]]]]]) search_ext_s(base,scope,[,filterstr='(objectClass=*)' [,attrlist=None [,attrsonly=0 [,serverctrls=None [,clientctrls=None [,timeout=-1 [,sizelimit=0]]]]]]]) Perform an LDAP search operation, with base as the DN of the entry at which to start the search, scope being one of SCOPE_BASE (to search the object itself), SCOPE_ONELEVEL (to search the object's immediate children), or SCOPE_SUBTREE (to search the object and all its descendants). filter is a string representation of the filter to apply in the search (see RFC 2254). Each result tuple is of the form (dn,entry), where dn is a string containing the DN (distinguished name) of the entry, and entry is a dictionary containing the attributes. Attributes types are used as string dictionary keys and attribute values are stored in a list as dictionary value. The DN in dn is extracted using the underlying ldap_get_dn(), which may raise an exception of the DN is malformed. If attrsonly is non-zero, the values of attrs will be meaningless (they are not transmitted in the result). The retrieved attributes can be limited with the attrlist parameter. If attrlist is None, all the attributes of each entry are returned. serverctrls=None clientctrls=None The synchronous form with timeout, search_st() or search_ext_s(), will block for at most timeout seconds (or indefinitely if timeout is negative). A TIMEOUT exception is raised if no result is received within the time. The amount of search results retrieved can be limited with the sizelimit parameter if non-zero. N(sselfs _ldap_calls_ls search_extsbasesscopes filterstrsattrlists attrsonlysEncodeControlTupless serverctrlss clientctrlsstimeouts sizelimit( sselfsbasesscopes filterstrsattrlists attrsonlys serverctrlss clientctrlsstimeouts sizelimit((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys search_exts,   c CsH|i||||||||| } |i | ddd|dSdS(Nsallistimeout( sselfs search_extsbasesscopes filterstrsattrlists attrsonlys serverctrlss clientctrlsstimeouts sizelimitsmsgidsresult( sselfsbasesscopes filterstrsattrlists attrsonlys serverctrlss clientctrlsstimeouts sizelimitsmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys search_ext_ss'cCs#|i|||||ttSdS(N(sselfs search_extsbasesscopes filterstrsattrlists attrsonlysNone(sselfsbasesscopes filterstrsattrlists attrsonly((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyssearchsc Cs,|i|||||ttd|iSdS(Nstimeout( sselfs search_ext_ssbasesscopes filterstrsattrlists attrsonlysNonestimeout(sselfsbasesscopes filterstrsattrlists attrsonly((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyssearch_ssc Cs&|i|||||tt|SdS(N( sselfs search_ext_ssbasesscopes filterstrsattrlists attrsonlysNonestimeout(sselfsbasesscopes filterstrsattrlists attrsonlystimeout((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys search_stscOs|i|ii||SdS(s set_cache_options(option) -> None Changes the caching behaviour. Currently supported options are CACHE_OPT_CACHENOERRS, which suppresses caching of requests that resulted in an error, and CACHE_OPT_CACHEALLERRS, which enables caching of all requests. The default behaviour is not to cache requests that result in errors, except those that result in a SIZELIMIT_EXCEEDED exception. N(sselfs _ldap_calls_lsset_cache_optionssargsskwargs(sselfsargsskwargs((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysset_cache_optionss cCs|i|iiSdS(s start_tls_s() -> None Negotiate TLS with server. The `version' attribute must have been set to VERSION3 before calling start_tls_s. If TLS could not be started an exception will be raised. N(sselfs _ldap_calls_ls start_tls_s(sself((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys start_tls_s scCs)|i|iit|t|SdS(s unbind() -> int unbind_s() -> None unbind_ext() -> int unbind_ext_s() -> None This call is used to unbind from the directory, terminate the current association, and free resources. Once called, the connection to the LDAP server is closed and the LDAP object is invalid. Further invocation of methods on the object will yield an exception. The unbind and unbind_s methods are identical, and are synchronous in nature N(sselfs _ldap_calls_ls unbind_extsEncodeControlTupless serverctrlss clientctrls(sselfs serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys unbind_extscCsC|i||}|tjo |i|ddd|iSndS(Nsallistimeout(sselfs unbind_exts serverctrlss clientctrlssmsgidsNonesresultstimeout(sselfs serverctrlss clientctrlssmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys unbind_ext_s#s cCs|ittSdS(N(sselfs unbind_extsNone(sself((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysunbind(scCs|ittSdS(N(sselfs unbind_ext_ssNone(sself((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysunbind_s+scCs|i|ii||SdS(N(sselfs _ldap_calls_lswhoami_ss serverctrlss clientctrls(sselfs serverctrlss clientctrls((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyswhoami_s.scCsP|i|ii|}|tijp |tijot |}n|SdS(N( sselfs _ldap_calls_ls get_optionsoptionsresultsldapsOPT_SERVER_CONTROLSsOPT_CLIENT_CONTROLSsDecodeControlTuples(sselfsoptionsresult((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys get_option1s cCsM|tijp |tijot|}n|i|ii ||SdS(N( soptionsldapsOPT_SERVER_CONTROLSsOPT_CLIENT_CONTROLSsEncodeControlTuplessinvaluesselfs _ldap_calls_ls set_option(sselfsoptionsinvalue((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys set_option7s cCsy"|i|tiddg}WnDtititifj o g}nti j o t SnXyv|okti i |dd}|i dt gd}|t jo#|o|iddSqt Sq|SnWntj o t SnXdS(s Returns the distinguished name of the sub schema sub entry for a part of a DIT specified by dn. None as result indicates that the DN of the sub schema sub entry could not be determined. s(objectClass=*)ssubschemaSubentryiisdnsN(sselfssearch_ssdnsldaps SCOPE_BASEsrsNO_SUCH_OBJECTsNO_SUCH_ATTRIBUTEsINSUFFICIENT_ACCESSsUNDEFINED_TYPEsNonescidictsesgetssearch_subschemasubentry_dnssearch_subschemasubentry_ss IndexError(sselfsdnsessearch_subschemasubentry_dnsr((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyssearch_subschemasubentry_s<s$"     cCsh|pt}y|i|tid|}Wntij o t SnX|o|ddSnt SdS(s1 Returns the sub schema sub entry's data s(objectClass=subschema)iiN( sattrss SCHEMA_ATTRSsselfssearch_sssubschemasubentry_dnsldaps SCOPE_BASEsrsNO_SUCH_OBJECTsNone(sselfssubschemasubentry_dnsattrssr((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysread_subschemasubentry_s\s   (Ks__name__s __module__s__doc__sldapsOPT_PROTOCOL_VERSIONs OPT_DEREFs OPT_REFERRALSs OPT_TIMELIMITs OPT_SIZELIMITsOPT_NETWORK_TIMEOUTsOPT_ERROR_NUMBERsOPT_ERROR_STRINGsOPT_MATCHED_DNsCLASSATTR_OPTION_MAPPINGsNones__init__s _ldap_locks _ldap_calls __setattr__s __getattr__s abandon_extsabandonscancelscancel_ssadd_exts add_ext_ssaddsadd_ss simple_binds simple_bind_ss AUTH_SIMPLEsbindsbind_ss SASL_QUIETssasl_interactive_bind_ss compare_exts compare_ext_sscompares compare_ss delete_exts delete_ext_ssdeletesdelete_ss manage_dsa_its modify_exts modify_ext_ssmodifysmodify_ssmodrdnsmodrdn_sspasswdspasswd_ssrenamesrename_ssRES_ANYsresults_ldapsresult2sresult3s search_exts search_ext_sssearchssearch_ss search_stsset_cache_optionss start_tls_ss unbind_exts unbind_ext_ssunbindsunbind_sswhoami_ss get_options set_optionssearch_subschemasubentry_ssread_subschemasubentry_s(((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysSimpleLDAPObject,st r                   66      cBsDtZdeddZeidddZdedddZRS(NiicCs#||_ti||||dS(N(sresult_timeoutsselfs_result_timeoutsSimpleLDAPObjects__init__suris trace_levels trace_file(sselfsuris trace_levels trace_filesresult_timeout((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys__init__rs icCs%|i|ii|d|i}| o|Snti}g}x|ox|dt jo|djoti||jo-|i|ii |tid|ntid|i|ii|d|i}qPW|dt joPn|i|dt t f}qFW|SdS(s is#LDAP time limit (%d secs) exceeded.f1.0000000000000001e-05iN(sselfs _ldap_calls_lsresultsmsgids_result_timeouts ldap_resultsallstimes start_times all_resultssNonestimeoutsabandons_ldapsTIMEOUTssleepsextend(sselfsmsgidsallstimeouts ldap_results all_resultss start_time((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysresultvs(! $ &s(objectClass=*)cCs8|i|||||}|i|ddd|SdS(Nsallistimeout( sselfssearchsbasesscopes filterstrsattrlists attrsonlysmsgidsresultstimeout(sselfsbasesscopes filterstrsattrlists attrsonlystimeoutsmsgid((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys search_sts(s__name__s __module__sNones__init__s_ldapsRES_ANYsresults search_st(((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pysNonblockingLDAPObjectpscBstZdZhde<de<de delay %s... sD*** %d. reconnect to %s successful, last operation will be repeated l(sselfs _retry_maxsreconnect_counters __debug__s _trace_levels _trace_fileswritesurisldaps functionss_ldap_function_calls_ldaps initializes_ls_restore_optionss _start_tlss start_tls_ss_apply_last_binds SERVER_DOWNsesSimpleLDAPObjectsunbind_ss _retry_delaystimessleeps_reconnects_done(sselfsurisesreconnect_counter((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys reconnects4 )   ) )cOs|iid o|i|iny||||SWnIti j o:t i ||` |i|i||||SnXdS(Ns_l( sselfs__dict__shas_keys reconnects_urisfuncsargsskwargssldaps SERVER_DOWNsSimpleLDAPObjectsunbind_ss_l(sselfsfuncsargsskwargs((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pys_apply_method_ss cCs$||i| None N(sselfssasl_interactive_bind_ssargsskwargss _last_bindsSimpleLDAPObject(sselfsargsskwargs((s@build/bdist.darwin-8.10.0-Power_Macintosh/egg/ldap/ldapobject.pyssasl_interactive_bind_sscOs|iti||SdS(N(sselfs_apply_method_ssSimpleLDAPObjects add_ext_ssargsskwargs(sselfs