summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-06-07 00:50:34 +0200
committerThomas Haller <thaller@redhat.com>2016-06-07 00:50:34 +0200
commitb48bb39a9669c9813aee3e23ee7e1f739104a487 (patch)
tree6474dcc62b52c9f8ecfc4a2f48df7c2c00443f04
parent90828da639ccccf8dbde3883acb722f5fcbd2136 (diff)
downloadNetworkManager-bg/dnsmasq-rdns-bgo767174.tar.gz
fixup! dns: add CIDR reverse DNS IPv4 entries to dnsmasqbg/dnsmasq-rdns-bgo767174
-rw-r--r--src/nm-core-utils.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/nm-core-utils.c b/src/nm-core-utils.c
index 877d8c4831..61b8863f43 100644
--- a/src/nm-core-utils.c
+++ b/src/nm-core-utils.c
@@ -3286,8 +3286,9 @@ nm_utils_get_reverse_dns_domains_ip4 (guint32 addr, guint8 plen, GPtrArray *doma
guint32 ip, ip2, mask;
guchar *p;
guint octets;
- GString *str;
- int i;
+ guint i;
+ gsize len0, len;
+ char *str, *s;
g_return_if_fail (domains);
g_return_if_fail (plen <= 32);
@@ -3301,17 +3302,18 @@ nm_utils_get_reverse_dns_domains_ip4 (guint32 addr, guint8 plen, GPtrArray *doma
ip &= mask;
ip2 = ip;
+ len0 = NM_STRLEN ("in-addr.arpa") + (4 * octets) + 1;
while ((ip2 & mask) == ip) {
addr = htonl (ip2);
p = (guchar *) &addr;
- str = g_string_new ("");
-
+ len = len0;
+ str = s = g_malloc (len);
for (i = octets; i > 0; i--)
- g_string_append_printf (str, "%u.", p[i - 1] & 0xff);
+ nm_utils_strbuf_append (&s, &len, "%u.", p[i - 1] & 0xff);
+ nm_utils_strbuf_append_str (&s, &len, "in-addr.arpa");
- g_string_append (str, "in-addr.arpa");
- g_ptr_array_add (domains, g_string_free (str, FALSE));
+ g_ptr_array_add (domains, str);
ip2 += 1 << ((32 - plen) & ~7);
}