def test_DRSGetNCChanges(self): # Not yet working dce, rpctransport, hDrs, DsaObjDest = self.connect() request = drsuapi.DRSGetNCChanges() request['hDrs'] = hDrs request['dwInVersion'] = 8 request['pmsgIn']['tag'] = 8 request['pmsgIn']['V8']['uuidDsaObjDest'] = DsaObjDest request['pmsgIn']['V8']['uuidInvocIdSrc'] = DsaObjDest #request['pmsgIn']['V8']['pNC'] = NULL dsName = drsuapi.DSNAME() dsName['SidLen'] = 0 dsName['Guid'] = drsuapi.NULLGUID dsName['Sid'] = '' name = 'DC=%s,DC=%s' % (self.domain.split('.')[0],self.domain.split('.')[1]) dsName['NameLen'] = len(name) dsName['StringName'] = (name + '\x00') dsName['structLen'] = len(dsName.getData()) request['pmsgIn']['V8']['pNC'] = dsName request['pmsgIn']['V8']['usnvecFrom']['usnHighObjUpdate'] = 0 request['pmsgIn']['V8']['usnvecFrom']['usnHighPropUpdate'] = 0 request['pmsgIn']['V8']['pUpToDateVecDest'] = NULL request['pmsgIn']['V8']['ulFlags'] = drsuapi.DRS_INIT_SYNC | drsuapi.DRS_PER_SYNC #| drsuapi.DRS_CRITICAL_ONLY request['pmsgIn']['V8']['cMaxObjects'] = 100 request['pmsgIn']['V8']['cMaxBytes'] = 0 request['pmsgIn']['V8']['ulExtendedOp'] = drsuapi.EXOP_REPL_OBJ | drsuapi.EXOP_REPL_SECRETS prefixTable = [] oid1 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.656') # principalName oid2 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.221') #'sAMAccountName' oid3 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.90') # 'unicodePwd' oid4 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.94') # ntPwdHistory oid5 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.160') # lmPwdHistory oid6 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.125') # supplementalCreds oid7 = drsuapi.MakeAttid(prefixTable, '1.2.840.113556.1.4.146') # objectSid request['pmsgIn']['V8']['pPartialAttrSet']['dwVersion'] = 1 request['pmsgIn']['V8']['pPartialAttrSet']['cAttrs'] = 7 request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid1) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid2) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid3) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid4) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid5) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid6) request['pmsgIn']['V8']['pPartialAttrSet']['rgPartialAttr'].append(oid7) request['pmsgIn']['V8']['pPartialAttrSetEx1'] = NULL request['pmsgIn']['V8']['PrefixTableDest']['PrefixCount'] = len(prefixTable) request['pmsgIn']['V8']['PrefixTableDest']['pPrefixEntry'] = prefixTable resp = dce.request(request) resp.dump()
def DRSGetNCChanges(self, userEntry): if self.__drsr is None: self.__connectDrds() request = drsuapi.DRSGetNCChanges() request['hDrs'] = self.__hDrs request['dwInVersion'] = 8 request['pmsgIn']['tag'] = 8 request['pmsgIn']['V8']['uuidDsaObjDest'] = self.__NtdsDsaObjectGuid request['pmsgIn']['V8']['uuidInvocIdSrc'] = self.__NtdsDsaObjectGuid dsName = drsuapi.DSNAME() dsName['SidLen'] = 0 dsName['Guid'] = drsuapi.NULLGUID dsName['Sid'] = '' dsName['NameLen'] = len(userEntry) dsName['StringName'] = (userEntry + '\x00') dsName['structLen'] = len(dsName.getData()) request['pmsgIn']['V8']['pNC'] = dsName request['pmsgIn']['V8']['usnvecFrom']['usnHighObjUpdate'] = 0 request['pmsgIn']['V8']['usnvecFrom']['usnHighPropUpdate'] = 0 request['pmsgIn']['V8']['pUpToDateVecDest'] = NULL request['pmsgIn']['V8'][ 'ulFlags'] = drsuapi.DRS_INIT_SYNC | drsuapi.DRS_WRIT_REP request['pmsgIn']['V8']['cMaxObjects'] = 1 request['pmsgIn']['V8']['cMaxBytes'] = 0 request['pmsgIn']['V8']['ulExtendedOp'] = drsuapi.EXOP_REPL_OBJ if self.__ppartialAttrSet is None: self.__prefixTable = [] self.__ppartialAttrSet = drsuapi.PARTIAL_ATTR_VECTOR_V1_EXT() self.__ppartialAttrSet['dwVersion'] = 1 self.__ppartialAttrSet['cAttrs'] = len(NTDSHashes.ATTRTYP_TO_ATTID) for attId in NTDSHashes.ATTRTYP_TO_ATTID.values(): self.__ppartialAttrSet['rgPartialAttr'].append( drsuapi.MakeAttid(self.__prefixTable, attId)) request['pmsgIn']['V8']['pPartialAttrSet'] = self.__ppartialAttrSet request['pmsgIn']['V8']['PrefixTableDest']['PrefixCount'] = len( self.__prefixTable) request['pmsgIn']['V8']['PrefixTableDest'][ 'pPrefixEntry'] = self.__prefixTable request['pmsgIn']['V8']['pPartialAttrSetEx1'] = NULL return self.__drsr.request(request)