void dnsp_to_dns_copy(TALLOC_CTX *mem_ctx, struct dnsp_DnssrvRpcRecord *dnsp,
struct DNS_RPC_RECORD *dns)
{
- int len;
+ int i, len;
ZERO_STRUCTP(dns);
break;
case DNS_TYPE_TXT:
- dns->data.name.len = strlen(dnsp->data.txt);
- dns->data.name.str = talloc_strdup(mem_ctx, dnsp->data.txt);
+ dns->data.txt.count = dnsp->data.txt.count;
+ dns->data.txt.str = talloc_array(mem_ctx, struct DNS_RPC_NAME, dnsp->data.txt.count);
+ for (i=0; i<dnsp->data.txt.count; i++) {
+ dns->data.txt.str[i].str = talloc_strdup(mem_ctx, dnsp->data.txt.str[i]);
+ dns->data.txt.str[i].len = strlen(dnsp->data.txt.str[i]);
+ }
break;
case DNS_TYPE_AAAA:
struct dnsp_DnssrvRpcRecord *dns_to_dnsp_copy(TALLOC_CTX *mem_ctx, struct DNS_RPC_RECORD *dns)
{
- int len;
+ int i, len;
struct dnsp_DnssrvRpcRecord *dnsp;
dnsp = talloc_zero(mem_ctx, struct dnsp_DnssrvRpcRecord);
len = dns->data.soa.NamePrimaryServer.len;
if (dns->data.soa.NamePrimaryServer.str[len-1] == '.') {
- dnsp->data.soa.mname = talloc_strdup(mem_ctx, dns->data.soa.NamePrimaryServer.str);
- } else {
dnsp->data.soa.mname = talloc_strndup(mem_ctx, dns->data.soa.NamePrimaryServer.str, len-1);
+ } else {
+ dnsp->data.soa.mname = talloc_strdup(mem_ctx, dns->data.soa.NamePrimaryServer.str);
}
len = dns->data.soa.ZoneAdministratorEmail.len;
break;
case DNS_TYPE_TXT:
- dnsp->data.txt = talloc_strdup(mem_ctx, dns->data.name.str);
+ dnsp->data.txt.count = dns->data.txt.count;
+ dnsp->data.txt.str = talloc_array(mem_ctx, const char *, dns->data.txt.count);
+ for (i=0; i<dns->data.txt.count; i++) {
+ dnsp->data.txt.str[i] = talloc_strdup(mem_ctx, dns->data.txt.str[i].str);
+ }
break;
case DNS_TYPE_AAAA:
bool dns_record_match(struct dnsp_DnssrvRpcRecord *rec1, struct dnsp_DnssrvRpcRecord *rec2)
{
+ bool status;
+ int i;
+
if (rec1->wType != rec2->wType) {
return false;
}
return strcmp(rec1->data.ipv4, rec2->data.ipv4) == 0;
case DNS_TYPE_NS:
- return dns_name_equal(rec1->data.ns, rec1->data.ns);
+ return dns_name_equal(rec1->data.ns, rec2->data.ns);
case DNS_TYPE_CNAME:
- return dns_name_equal(rec1->data.cname, rec1->data.cname);
+ return dns_name_equal(rec1->data.cname, rec2->data.cname);
case DNS_TYPE_SOA:
return dns_name_equal(rec1->data.soa.mname, rec2->data.soa.mname) == 0 &&
return dns_name_equal(rec1->data.ptr, rec2->data.ptr);
case DNS_TYPE_MX:
- return rec1->data.mx.wPriority == rec2->data.srv.wPriority &&
- dns_name_equal(rec1->data.mx.nameTarget, rec2->data.srv.nameTarget);
+ return rec1->data.mx.wPriority == rec2->data.mx.wPriority &&
+ dns_name_equal(rec1->data.mx.nameTarget, rec2->data.mx.nameTarget);
case DNS_TYPE_TXT:
- return strcmp(rec1->data.txt, rec2->data.txt) == 0;
+ if (rec1->data.txt.count != rec2->data.txt.count) {
+ return false;
+ }
+ status = true;
+ for (i=0; i<rec1->data.txt.count; i++) {
+ status = status && (strcmp(rec1->data.txt.str[i],
+ rec2->data.txt.str[i]) == 0);
+ }
+ return status;
case DNS_TYPE_AAAA:
return strcmp(rec1->data.ipv6, rec2->data.ipv6) == 0;