+ def process_metadata(self, val):
+ '''Read metadata properties and list attributes in it'''
+
+ list_att = []
+ d = {}
+ if self.dict_oid_name == None:
+ res = self.samdb.search(expression = '(lDAPDisplayName=*)',
+ controls=["search_options:1:2"],
+ attrs=["attributeID","lDAPDisplayName"])
+ for m in res:
+ d[str(m.get("attributeID"))] = str(m.get("lDAPDisplayName"))
+ self.dict_oid_name = d
+
+ repl = ndr_unpack(drsblobs.replPropertyMetaDataBlob,str(val))
+ obj = repl.ctr
+
+ for o in repl.ctr.array:
+ att = self.dict_oid_name[self.samdb.get_oid_from_attid(o.attid)]
+ list_att.append(att.lower())
+
+ return list_att
+
+
+ def fix_metadata(self, dn, list):
+ res = self.samdb.search(base = dn, scope=ldb.SCOPE_BASE, attrs = list,
+ controls = ["search_options:1:2"])
+ msg = res[0]
+ nmsg = ldb.Message()
+
+ delta = self.samdb.msg_diff(nmsg, msg)
+ nmsg.dn = dn
+
+ for att in delta:
+ if att == "dn":
+ continue
+ val = delta.get(att)
+ nmsg[att] = ldb.MessageElement(val, ldb.FLAG_MOD_REPLACE, att)
+
+ self.samdb.modify(nmsg, controls = ["relax:0", "provision:0"])