def test_array_with_exception(self): try: rmd = drsblobs.replPropertyMetaDataBlob() rmd.version = 1 rmd.ctr = drsblobs.replPropertyMetaDataCtr1() rmd.ctr.count = 3 rmd1 = drsblobs.replPropertyMetaData1() rmd1.attid = 1 rmd1.version = 2 rmd2 = drsblobs.replPropertyMetaData1() rmd2.attid = 2 rmd2.version = 2 rmd3 = drsblobs.replPropertyMetaData1() rmd3.attid = 3 rmd3.version = 2 rmd.ctr.array = [rmd1, rmd2, rmd3] gc.collect() self.assertIsNotNone(rmd) self.assertEqual(rmd.version, 1) self.assertIsNotNone(rmd.ctr) self.assertEqual(rmd.ctr.count, 3) self.assertEqual(len(rmd.ctr.array), rmd.ctr.count) self.assertIsNotNone(rmd.ctr.array[0]) self.assertEqual(rmd.ctr.array[0].attid, 1) raise Exception() except: pass
def test_array_from_ndr(self): rmd = drsblobs.replPropertyMetaDataBlob() rmd.version = 1 rmd.ctr = drsblobs.replPropertyMetaDataCtr1() rmd.ctr.count = 3 rmd1 = drsblobs.replPropertyMetaData1() rmd1.attid = 1 rmd1.version = 2 rmd2 = drsblobs.replPropertyMetaData1() rmd2.attid = 2 rmd2.version = 2 rmd3 = drsblobs.replPropertyMetaData1() rmd3.attid = 3 rmd3.version = 2 rmd.ctr.array = [rmd1, rmd2, rmd3] packed = ndr_pack(rmd) gc.collect() rmd_unpacked = ndr_unpack(drsblobs.replPropertyMetaDataBlob, packed) self.assertIsNotNone(rmd_unpacked) self.assertEqual(rmd_unpacked.version, 1) self.assertIsNotNone(rmd_unpacked.ctr) self.assertEqual(rmd_unpacked.ctr.count, 3) self.assertEqual(len(rmd_unpacked.ctr.array), rmd_unpacked.ctr.count) self.assertIsNotNone(rmd_unpacked.ctr.array[0]) self.assertEqual(rmd_unpacked.ctr.array[0].attid, 1) self.assertEqual(rmd.ctr.array[0].attid, rmd_unpacked.ctr.array[0].attid)
def test_array_delete(self): rmd = drsblobs.replPropertyMetaDataBlob() rmd.version = 1 rmd.ctr = drsblobs.replPropertyMetaDataCtr1() rmd.ctr.count = 3 rmd1 = drsblobs.replPropertyMetaData1() rmd1.attid = 1 rmd1.version = 2 rmd2 = drsblobs.replPropertyMetaData1() rmd2.attid = 2 rmd2.version = 2 rmd3 = drsblobs.replPropertyMetaData1() rmd3.attid = 3 rmd3.version = 2 rmd.ctr.array = [rmd1, rmd2, rmd3] try: del rmd1.version self.fail("succeeded in deleting rmd1.version") except AttributeError, e: pass
def test_array_with_exception(self): try: rmd = drsblobs.replPropertyMetaDataBlob() rmd.version = 1 rmd.ctr = drsblobs.replPropertyMetaDataCtr1() rmd.ctr.count = 3 rmd1 = drsblobs.replPropertyMetaData1() rmd1.attid = 1 rmd1.version = 2 rmd2 = drsblobs.replPropertyMetaData1() rmd2.attid = 2 rmd2.version = 2 rmd3 = drsblobs.replPropertyMetaData1() rmd3.attid = 3 rmd3.version = 2 rmd.ctr.array = [rmd1, rmd2, rmd3] gc.collect() self.assertIsNotNone(rmd) self.assertEqual(rmd.version, 1) self.assertIsNotNone(rmd.ctr) self.assertEqual(rmd.ctr.count, 3) self.assertEqual(len(rmd.ctr.array), rmd.ctr.count) self.assertIsNotNone(rmd.ctr.array[0]) self.assertEqual(rmd.ctr.array[0].attid, 1) raise Exception() except: pass
def test_array_from_ndr(self): rmd = drsblobs.replPropertyMetaDataBlob() rmd.version = 1 rmd.ctr = drsblobs.replPropertyMetaDataCtr1() rmd.ctr.count = 3 rmd1 = drsblobs.replPropertyMetaData1() rmd1.attid = 1 rmd1.version = 2 rmd2 = drsblobs.replPropertyMetaData1() rmd2.attid = 2 rmd2.version = 2 rmd3 = drsblobs.replPropertyMetaData1() rmd3.attid = 3 rmd3.version = 2 rmd.ctr.array = [rmd1, rmd2, rmd3] packed = ndr_pack(rmd) gc.collect() rmd_unpacked = ndr_unpack(drsblobs.replPropertyMetaDataBlob, packed) self.assertIsNotNone(rmd_unpacked) self.assertEqual(rmd_unpacked.version, 1) self.assertIsNotNone(rmd_unpacked.ctr) self.assertEqual(rmd_unpacked.ctr.count, 3) self.assertEqual(len(rmd_unpacked.ctr.array), rmd_unpacked.ctr.count) self.assertIsNotNone(rmd_unpacked.ctr.array[0]) self.assertEqual(rmd_unpacked.ctr.array[0].attid, 1) self.assertEqual(rmd.ctr.array[0].attid, rmd_unpacked.ctr.array[0].attid)
def test_array_delete(self): rmd = drsblobs.replPropertyMetaDataBlob() rmd.version = 1 rmd.ctr = drsblobs.replPropertyMetaDataCtr1() rmd.ctr.count = 3 rmd1 = drsblobs.replPropertyMetaData1() rmd1.attid = 1 rmd1.version = 2 rmd2 = drsblobs.replPropertyMetaData1() rmd2.attid = 2 rmd2.version = 2 rmd3 = drsblobs.replPropertyMetaData1() rmd3.attid = 3 rmd3.version = 2 rmd.ctr.array = [rmd1, rmd2, rmd3] try: del rmd1.version self.fail("succeeded in deleting rmd1.version") except AttributeError as e: pass try: del rmd.ctr.array self.fail("succeeded in deleting rmd.ctr.array") except AttributeError as e: pass
def set_attribute_replmetadata_version(self, dn, att, value, addifnotexist=False): res = self.search(expression="distinguishedName=%s" % dn, scope=ldb.SCOPE_SUBTREE, controls=["search_options:1:2"], attrs=["replPropertyMetaData"]) if len(res) == 0: return None repl = ndr_unpack(drsblobs.replPropertyMetaDataBlob, res[0]["replPropertyMetaData"][0]) ctr = repl.ctr now = samba.unix2nttime(int(time.time())) found = False if len(self.hash_oid_name.keys()) == 0: self._populate_oid_attid() for o in ctr.array: # Search for Description att_oid = self.get_oid_from_attid(o.attid) if att_oid in self.hash_oid_name and\ att.lower() == self.hash_oid_name[att_oid].lower(): found = True seq = self.sequence_number(ldb.SEQ_NEXT) o.version = value o.originating_change_time = now o.originating_invocation_id = misc.GUID( self.get_invocation_id()) o.originating_usn = seq o.local_usn = seq if not found and addifnotexist and len(ctr.array) > 0: o2 = drsblobs.replPropertyMetaData1() o2.attid = 589914 att_oid = self.get_oid_from_attid(o2.attid) seq = self.sequence_number(ldb.SEQ_NEXT) o2.version = value o2.originating_change_time = now o2.originating_invocation_id = misc.GUID(self.get_invocation_id()) o2.originating_usn = seq o2.local_usn = seq found = True tab = ctr.array tab.append(o2) ctr.count = ctr.count + 1 ctr.array = tab if found: replBlob = ndr_pack(repl) msg = ldb.Message() msg.dn = res[0].dn msg["replPropertyMetaData"] = \ ldb.MessageElement(replBlob, ldb.FLAG_MOD_REPLACE, "replPropertyMetaData") self.modify(msg, ["local_oid:1.3.6.1.4.1.7165.4.3.14:0"])
def set_attribute_replmetadata_version(self, dn, att, value, addifnotexist=False): res = self.search(expression="distinguishedName=%s" % dn, scope=ldb.SCOPE_SUBTREE, controls=["search_options:1:2"], attrs=["replPropertyMetaData"]) if len(res) == 0: return None repl = ndr_unpack(drsblobs.replPropertyMetaDataBlob, str(res[0]["replPropertyMetaData"])) ctr = repl.ctr now = samba.unix2nttime(int(time.time())) found = False if len(self.hash_oid_name.keys()) == 0: self._populate_oid_attid() for o in ctr.array: # Search for Description att_oid = self.get_oid_from_attid(o.attid) if self.hash_oid_name.has_key(att_oid) and\ att.lower() == self.hash_oid_name[att_oid].lower(): found = True seq = self.sequence_number(ldb.SEQ_NEXT) o.version = value o.originating_change_time = now o.originating_invocation_id = misc.GUID(self.get_invocation_id()) o.originating_usn = seq o.local_usn = seq if not found and addifnotexist and len(ctr.array) >0: o2 = drsblobs.replPropertyMetaData1() o2.attid = 589914 att_oid = self.get_oid_from_attid(o2.attid) seq = self.sequence_number(ldb.SEQ_NEXT) o2.version = value o2.originating_change_time = now o2.originating_invocation_id = misc.GUID(self.get_invocation_id()) o2.originating_usn = seq o2.local_usn = seq found = True tab = ctr.array tab.append(o2) ctr.count = ctr.count + 1 ctr.array = tab if found : replBlob = ndr_pack(repl) msg = ldb.Message() msg.dn = res[0].dn msg["replPropertyMetaData"] = ldb.MessageElement(replBlob, ldb.FLAG_MOD_REPLACE, "replPropertyMetaData") self.modify(msg, ["local_oid:1.3.6.1.4.1.7165.4.3.14:0"])
def get_rmd(): rmd = drsblobs.replPropertyMetaDataBlob() rmd.version = 1 rmd.ctr = drsblobs.replPropertyMetaDataCtr1() rmd.ctr.count = 3 rmd1 = drsblobs.replPropertyMetaData1() rmd1.attid = 1 rmd1.version = 2 rmd2 = drsblobs.replPropertyMetaData1() rmd2.attid = 2 rmd2.version = 2 rmd3 = drsblobs.replPropertyMetaData1() rmd3.attid = 3 rmd3.version = 2 rmd.ctr.array = [rmd1, rmd2, rmd3] return rmd
def get_rmd(): rmd = drsblobs.replPropertyMetaDataBlob() rmd.version = 1 rmd.ctr = drsblobs.replPropertyMetaDataCtr1() rmd.ctr.count = 3 rmd1 = drsblobs.replPropertyMetaData1() rmd1.attid = 1 rmd1.version = 2 rmd2 = drsblobs.replPropertyMetaData1() rmd2.attid = 2 rmd2.version = 2 rmd3 = drsblobs.replPropertyMetaData1() rmd3.attid = 3 rmd3.version = 2 rmd.ctr.array = [rmd1, rmd2, rmd3] return rmd