a „oeG!ã@säddlZddlZddlZddlZddlTdadae ¡Zdd„Z dd„Z dd „Z d d „Z d d „Z d!dd„Zdd„ZiZej ¡D] \ZZedd…dkr€eee<q€dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zed kràeƒdS)"éN)Ú*ÚcCs`dt}t|ƒ}| d¡D]}td||fƒqddg}|D]}| |¡}td||fƒqz %s: %s=%s)rÚ pythoncomÚ com_errorÚ verbose_levelr ÚClass) rrrrZdetailsÚhrÚmsgÚexcÚargrrrr*s    rc Csèdt}t|ƒ}| d¡}dt|}td|ƒt|ƒ}d}}}}|D]b}|j} | dkrpt|ƒ|d}qL| dkrŠt|ƒ|d}qL| d krœ|d}qLtd | ƒ|d}qLträtd |d ƒtd |d ƒtd |dƒtd |dƒdS)zDumps the default DSE schemarZschemaNamingContextúLDAP://ú Binding torZ classSchemaéZattributeSchemaZ subSchemazUnknown class:Ú ProcessedÚclassesr z sub-schema'sz unknown typesN)rrrr r rrr) r r ÚnameÚobZnclassesZnattrZnsubZnunkrÚ class_namerrrÚ DumpSchema9s0           r-c CsÈd|}td||j|jfƒzt|jtƒ}WntjyFd}Yn0|dur¬| ¡}td||j |j fƒdg}|  |¡}|D](}|j D]\}} td||j |fƒqŒq‚|D]} t| |dƒq°dS)Nz z%s%s object: %sz%s RDN='%s', ObjectDN='%s'ZdistinguishedNamez%s Attribute '%s' = %sr')r r ÚNamerÚADsPathZIID_IDirectoryObjectrrZGetObjectInformationZRDNZObjectDNZGetObjectAttributesZValuesZAttrNameÚ _DumpObject) r+ÚlevelÚprefixZdir_obÚinfoÚnamesrrrÚtyprrrrr0\s   r0cCsDdt}t|ƒ}| d¡}dt|}td|ƒt|ƒ}t|ƒdS)z&Recursively dump the entire directory!rrr%r&N)rrrr r0)r r r*r+rrrÚDumpAllObjectsrs   r6éZVT_c CsRdtf}t|tƒ}d}}}|D]ú}t |j¡}|dkr¨g}|jrP| d¡|jr`| d¡t  |d¡}ddl } | j   |j ¡} tdkržtd |j|| fƒ|d }q$|d krä|jr¼d } nd } tdkrÚtd|j| fƒ|d }q$|dkr$t |jd¡} tdk�rtd|j| fƒ|d }q$td k�rNtd|dƒtd|dƒtd|dƒdS)z/Dumps the schema using an alternative techniquezLDAP://%sschemarÚclassÚAbstractÚ Auxiliaryz, Nrz.Class: Name=%s, Flags=%s, Primary Interface=%sr'Úpropertyz Multi-Valuedz Single-ValuedzProperty: Name=%s, %sZsyntaxzzSyntax: Name=%s, Datatype = %sr(r)Z propertiesz syntax items)rrÚIID_IADsContainerrÚlowerr r9Úappendr:ÚjoinZ win32com.utilÚutilZIIDToInterfaceNameZPrimaryInterfacerr r.Z MultiValuedÚvt_mapÚgetZOleAutoDataType) r ZschemaZnclassZnpropZnsyntaxr Z item_classÚitemsZdescZwin32comZiid_nameZval_typeZ data_typerrrÚ DumpSchema2�sJ        ÿÿ       rDcCs,tdtƒ}|D]}td|j|jfƒqdS)z(Dumps the GC: object (whatever that is!)zGC:zGC ob: %s (%s)N)rr<r r.r/)r+Úsub_obrrrÚDumpGC¸s rFcCsDdtf}t|tƒ}| ddg¡|D]}td|j|jfƒq&dS)zDumps the local machine usersúWinNT://%s,computerZUserÚGroupzUser/Group: %s (%s)N)Ú local_namerr<Ú put_Filterr r.r/)r r+rErrrÚDumpLocalUsers¿s   rKcCshdtf}t|tƒ}| dg¡|D]>}td|j|jfƒ| ¡}|D]}td|j|jfƒqHq$dS)zDumps the local machine groupsrGrHzGroup: %s (%s)z Group member: %s (%s)N)rIrr<rJr r.r/ZMembers)r r+rEÚmembersÚmemberrrrÚDumpLocalGroupsÈs   rNcCspddl}td|j tjd¡ƒtdƒtdƒtdƒ|D]}t|jd|jƒq>tƒtdƒt d¡dS) Nrz&Usage: %s [-s server ] [-v] [Test ...]z' -v : Verbose - print more informationz: -s : server - execute the tests against the named serverzwhere Test is one of:ú:z-If not tests are specified, all tests are runr') Úosr r ÚbasenameÚsysÚargvÚ__name__Ú__doc__Úexit)ÚtestsrPÚtrrrÚusageÖsrYc CsZddl}ddl}g}tƒ ¡D]$}t|ƒttƒkr|jr| |¡q| tj dd…d¡\}}|D]H\}}|dkrŠ|ddvr†|d}|a |dkršt |ƒ|d krbt da qbt |ƒdkrÆtd ƒ|}nrRrSrrYrÚlenr rTÚ print_exc) r\r]rWr+ZoptsÚargsÚoptrZdotestsr$rXÚtestrrrraäsF         raÚ__main__)r)rrRrZwin32apiZ win32com.adsirrZGetComputerNamerIrrrrr-r0r6rAÚ__dict__rCr*rrDrFrKrNrYrarTrrrrÚs4#  + ,