]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Add method to print resolved spf element
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 11 Apr 2019 15:15:25 +0000 (16:15 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 11 Apr 2019 15:15:25 +0000 (16:15 +0100)
src/libserver/spf.c
src/libserver/spf.h

index f7078f3e94abf2a3f74b2391bc42223109279fa0..ee2c06923ef8c39640e66983c5fb7ba8b7ce5a6e 100644 (file)
@@ -2279,3 +2279,33 @@ spf_record_unref (struct spf_resolved *rec)
 {
        REF_RELEASE (rec);
 }
+
+gchar *
+spf_addr_mask_to_string (struct spf_addr *addr)
+{
+       GString *res;
+       gchar *s, ipstr[INET6_ADDRSTRLEN + 1];
+
+       if (addr->flags & RSPAMD_SPF_FLAG_ANY) {
+               res = g_string_new ("any");
+       }
+       else if (addr->flags & RSPAMD_SPF_FLAG_IPV4) {
+               (void)inet_ntop (AF_INET, addr->addr4, ipstr, sizeof (ipstr));
+               res = g_string_sized_new (sizeof (ipstr));
+               rspamd_printf_gstring (res, "%s/%d", ipstr, addr->m.dual.mask_v4);
+       }
+       else if (addr->flags & RSPAMD_SPF_FLAG_IPV6) {
+               (void)inet_ntop (AF_INET6, addr->addr6, ipstr, sizeof (ipstr));
+               res = g_string_sized_new (sizeof (ipstr));
+               rspamd_printf_gstring (res, "%s/%d", ipstr, addr->m.dual.mask_v6);
+       }
+       else {
+               res = g_string_new ("unknown");
+       }
+
+       s = res->str;
+       g_string_free (res, FALSE);
+
+
+       return s;
+}
\ No newline at end of file
index 83716297fe68f3403452d5b2b3fd02e11d0ec9fe..5df52d0e0adca9bf60c0e60e21c3e178a62d3bc2 100644 (file)
@@ -29,18 +29,18 @@ typedef enum spf_action_e {
        SPF_RESOLVE_EXP
 } spf_action_t;
 
-#define RSPAMD_SPF_FLAG_IPV6 (1 << 0)
-#define RSPAMD_SPF_FLAG_IPV4 (1 << 1)
-#define RSPAMD_SPF_FLAG_PROCESSED (1 << 2)
-#define RSPAMD_SPF_FLAG_ANY (1 << 3)
-#define RSPAMD_SPF_FLAG_PARSED (1 << 4)
-#define RSPAMD_SPF_FLAG_INVALID (1 << 5)
-#define RSPAMD_SPF_FLAG_REFERENCE (1 << 6)
-#define RSPAMD_SPF_FLAG_REDIRECT (1 << 7)
-#define RSPAMD_SPF_FLAG_TEMPFAIL (1 << 8)
-#define RSPAMD_SPF_FLAG_NA (1 << 9)
-#define RSPAMD_SPF_FLAG_PERMFAIL (1 << 10)
-#define RSPAMD_SPF_FLAG_RESOLVED (1 << 11)
+#define RSPAMD_SPF_FLAG_IPV6 (1u << 0u)
+#define RSPAMD_SPF_FLAG_IPV4 (1u << 1u)
+#define RSPAMD_SPF_FLAG_PROCESSED (1u << 2u)
+#define RSPAMD_SPF_FLAG_ANY (1u << 3u)
+#define RSPAMD_SPF_FLAG_PARSED (1u << 4u)
+#define RSPAMD_SPF_FLAG_INVALID (1u << 5u)
+#define RSPAMD_SPF_FLAG_REFERENCE (1u << 6u)
+#define RSPAMD_SPF_FLAG_REDIRECT (1u << 7u)
+#define RSPAMD_SPF_FLAG_TEMPFAIL (1u << 8u)
+#define RSPAMD_SPF_FLAG_NA (1u << 9u)
+#define RSPAMD_SPF_FLAG_PERMFAIL (1u << 10u)
+#define RSPAMD_SPF_FLAG_RESOLVED (1u << 11u)
 
 struct spf_addr {
        guchar addr6[sizeof (struct in6_addr)];
@@ -92,4 +92,10 @@ struct spf_resolved * spf_record_ref (struct spf_resolved *rec);
  */
 void spf_record_unref (struct spf_resolved *rec);
 
+/**
+ * Prints address + mask in a freshly allocated string (must be freed)
+ * @param addr
+ * @return
+ */
+gchar *spf_addr_mask_to_string (struct spf_addr *addr);
 #endif