Index: modules/univention/s4connector/s4/dns.py =================================================================== --- modules/univention/s4connector/s4/dns.py (Revision 70207) +++ modules/univention/s4connector/s4/dns.py (Arbeitskopie) @@ -86,6 +86,17 @@ self.data.wPriority=priority self.data.nameTarget=name +class TXTRecord(dnsp.DnssrvRpcRecord): + def __init__(self, slist, priority=0, serial=1, ttl=3600): + super(TXTRecord, self).__init__() + self.wType=dnsp.DNS_TYPE_TXT + self.dwSerial=serial + self.dwTtlSeconds=ttl + stringlist = dnsp.string_list() + stringlist.count = len(slist) + stringlist.str = slist + self.data = stringlist + import univention.admin.handlers import univention.admin.handlers.dns.forward_zone import univention.admin.handlers.dns.alias @@ -571,6 +582,29 @@ mx.append( [str(ndrRecord.data.wPriority), __append_dot(ndrRecord.data.nameTarget)] ) return mx +def __pack_txtRecord(object, dnsRecords): + slist=[] + for txtRecord in object['attributes'].get('tXTRecord', []): + if txtRecord: + ud.debug(ud.LDAP, ud.INFO, '__pack_txtRecord: %s' % txtRecord) + txtRecord=univention.s4connector.s4.compatible_modstring(txtRecord) + slist.append(txtRecord) + if slist: + txt_record = TXTRecord(slist) + ndr_txt_record = ndr_pack(txt_record) + dnsRecords.append(ndr_txt_record) + ud.debug(ud.LDAP, ud.INFO, '__pack_txtRecord: %s' % ndr_txt_record) + +def __unpack_txtRecord(object): + txt=[] + dnsRecords=object['attributes'].get('dnsRecord', []) + for dnsRecord in dnsRecords: + dnsRecord=dnsRecord.encode('latin1') + ndrRecord=ndr_unpack(dnsp.DnssrvRpcRecord, dnsRecord) + if ndrRecord.wType == dnsp.DNS_TYPE_TXT: + txt.append( [str(ndrRecord.data.wPriority), __append_dot(ndrRecord.data.nameTarget)] ) + return txt + def __pack_cName(object, dnsRecords): for c in object['attributes'].get('cNAMERecord', []): c=univention.s4connector.s4.compatible_modstring(__remove_dot(c)) @@ -717,6 +751,8 @@ __pack_mxRecord(object, dnsRecords) + __pack_txtRecord(object, dnsRecords) + s4connector.lo_s4.modify(soa_dn, [('dnsRecord', old_dnsRecords, dnsRecords)]) return True @@ -870,6 +906,9 @@ else: __pack_aRecord(object, dnsRecords) + __pack_mxRecord(object, dnsRecords) + __pack_txtRecord(object, dnsRecords) + dnsNodeDn=s4_dns_node_base_create(s4connector, object, dnsRecords) return True