]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
util: add function for printing access subnets
authorMiroslav Lichvar <mlichvar@redhat.com>
Wed, 16 Nov 2022 14:57:46 +0000 (15:57 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Wed, 16 Nov 2022 16:00:45 +0000 (17:00 +0100)
test/unit/util.c
util.c
util.h

index 112676d23710bdfbbef40686f8bb3a446881f989..c8bdadb163800d4fd0b29d8562ce5f2f7e04ce6c 100644 (file)
@@ -470,6 +470,15 @@ test_unit(void)
   s = UTI_IPSockAddrToString(&ip_saddr);
   TEST_CHECK(strcmp(s, "1.2.3.4:12345") == 0);
 
+  ip = ip_saddr.ip_addr;
+  s = UTI_IPSubnetToString(&ip, 10);
+  TEST_CHECK(strcmp(s, "1.2.3.4/10") == 0);
+  s = UTI_IPSubnetToString(&ip, 32);
+  TEST_CHECK(strcmp(s, "1.2.3.4") == 0);
+  ip.family = IPADDR_UNSPEC;
+  s = UTI_IPSubnetToString(&ip, 0);
+  TEST_CHECK(strcmp(s, "any address") == 0);
+
   s = UTI_TimeToLogForm(2000000000);
   TEST_CHECK(strcmp(s, "2033-05-18 03:33:20") == 0);
 
diff --git a/util.c b/util.c
index c4c8934516bd156c8714475223ceda2e3ff902ee..064292ce6c6db85a2836206d6376a07480b3a58e 100644 (file)
--- a/util.c
+++ b/util.c
@@ -551,6 +551,26 @@ UTI_IPSockAddrToString(const IPSockAddr *sa)
 
 /* ================================================== */
 
+char *
+UTI_IPSubnetToString(IPAddr *subnet, int bits)
+{
+  char *result;
+
+  result = NEXT_BUFFER;
+
+  if (subnet->family == IPADDR_UNSPEC)
+    snprintf(result, BUFFER_LENGTH, "%s", "any address");
+  else if ((subnet->family == IPADDR_INET4 && bits == 32) ||
+           (subnet->family == IPADDR_INET6 && bits == 128))
+    snprintf(result, BUFFER_LENGTH, "%s", UTI_IPToString(subnet));
+  else
+    snprintf(result, BUFFER_LENGTH, "%s/%d", UTI_IPToString(subnet), bits);
+
+  return result;
+}
+
+/* ================================================== */
+
 char *
 UTI_TimeToLogForm(time_t t)
 {
diff --git a/util.h b/util.h
index a57ef9ba75f6c3ccc54d5b4675d33b062c22e72a..4655e537f2eb74a955591e1a7baf40cb94e4be35 100644 (file)
--- a/util.h
+++ b/util.h
@@ -120,6 +120,8 @@ extern int UTI_CompareIPs(const IPAddr *a, const IPAddr *b, const IPAddr *mask);
 
 extern char *UTI_IPSockAddrToString(const IPSockAddr *sa);
 
+extern char *UTI_IPSubnetToString(IPAddr *subnet, int bits);
+
 extern char *UTI_TimeToLogForm(time_t t);
 
 /* Adjust time following a frequency/offset change */