a oeI@sddlZddlZddlZddlmZmZddlTdaiZddZ ddZ dd Z d d Z e e e d Z d dZddZddZddZddZedkredS)N)adsiadsicon)*cCs:ts*tjD]\}}|dr|t|<qt|t|S)NZADSTYPE_)ADsTypeNameMapr__dict__items startswithgethex)Ztype_valnvr >C:\Program Files\Certbot\pkgs\win32comext\adsi\demos\search.pygetADsTypeName s   rcCs t|dS)NT) pywintypesZIIDbr r r_guid_from_buffersrcCstt|SN)strrZSIDrr r r_sid_from_buffersrcCs|Srr )xr r rr)Z objectGUIDZ objectSidZ instanceTypecGstj|krtd||dS)Nzlog:)optionsverboseprint)levelmsgargsr r rlog&s r cCsBtdtjtjdtj}t|}|D]}|tj}|SdS)NzGC:r) rZ ADsOpenObjectruserpasswordZIID_IADsContainerZADsBuildEnumeratorZQueryInterfaceZIID_IDirectorySearch)Zcontenumegcr r rgetGC+s  r&csn|\}}|dur\tddt|fdd|D}t|dkrJ|d}td|fntdfdS) Nzproperty '%s' has type '%s'cs g|]}tt|dqS)r) convertersr _null_converter).0r Z prop_namer r ;rz#print_attribute..rz %s=%rz %s is None)r rlenr)Zcol_dataZ prop_typevaluesvaluer r+rprint_attribute7s  r1c Cs<t}|durtdddSttffg}||\}}tdd||tjrXtjd}nd}|tj |}| |}|t kr.t d|dur| |}|durq|||}t|qnh|D]b}z|||}t|Wqtjy} z(| dtkrt|ddfWYd} ~ qd} ~ 00q| |}qt||dS)NrzCan't find the global catalogz"SetSearchPreference returned %d/%r,z -- new row --)r&r ZADS_SEARCHPREF_SEARCH_SCOPEZADS_SCOPE_SUBTREEZSetSearchPreferencer attributessplitZ ExecuteSearchfilterZ GetNextRowZS_ADS_NOMORE_ROWSrZGetNextColumnNameZ GetColumnr1rerrorZE_ADS_COLUMN_NOT_SETZCloseSearchHandle) r%ZprefshrZstatusesr4hZcol_namedataaZdetailsr r rsearchCs<          & r<cCsddlm}|}|jdddddd|jd d d d d d|jddddd|jdddd|jdddd|jddddd|jdd d!d|\a}tjrtjd kr|d"dt_|r|d#tdS)$Nr) OptionParserz-fz--filefilenamezwrite report to FILEFILE)desthelpmetavarz-vz --verbosecountr-zincrease verbosity of output)actiondefaultrAz-qz--quiet store_truezsuppress output messages)rDrAz-Uz--userz$specify the username used to connect)rAz-Pz --passwordz$specify the password used to connectz--filterz,(&(objectCategory=person)(objectClass=User))zspecify the search filter)rErAz --attributesz,comma sep'd list of attribute names to printz%Can not use '--verbose' and '--quiet'zYou need not specify args) Zoptparser=Z add_option parse_argsrquietrr7r<)r=parserrr r rmainlsD      rK__main__)Z pythoncomrZ win32securityZ win32com.adsirrZwin32com.adsi.adsiconrrrrrr)r(r r&r1r<rK__name__r r r rs*   )+