12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #ifndef RSPAMD_SPF_H
- #define RSPAMD_SPF_H
-
- #include "config.h"
- #include "ref.h"
- #include "addr.h"
-
- struct rspamd_task;
- struct spf_resolved;
-
- typedef void (*spf_cb_t)(struct spf_resolved *record,
- struct rspamd_task *task, gpointer cbdata);
-
- typedef enum spf_mech_e {
- SPF_FAIL,
- SPF_SOFT_FAIL,
- SPF_PASS,
- SPF_NEUTRAL
- } spf_mech_t;
-
- typedef enum spf_action_e {
- SPF_RESOLVE_MX,
- SPF_RESOLVE_A,
- SPF_RESOLVE_PTR,
- SPF_RESOLVE_AAA,
- SPF_RESOLVE_REDIRECT,
- SPF_RESOLVE_INCLUDE,
- SPF_RESOLVE_EXISTS,
- 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)
-
- struct spf_addr {
- guchar addr6[sizeof (struct in6_addr)];
- guchar addr4[sizeof (struct in_addr)];
- union {
- struct {
- guint16 mask_v4;
- guint16 mask_v6;
- } dual;
- guint32 idx;
- } m;
- guint flags;
- spf_mech_t mech;
- gchar *spf_string;
- struct spf_addr *prev, *next;
- };
-
- struct spf_resolved {
- gchar *domain;
- guint ttl;
- gboolean temp_failed;
- gboolean na;
- gboolean perm_failed;
- GArray *elts; /* Flat list of struct spf_addr */
- ref_entry_t ref; /* Refcounting */
- };
-
-
- /*
- * Resolve spf record for specified task and call a callback after resolution fails/succeed
- */
- gboolean rspamd_spf_resolve (struct rspamd_task *task, spf_cb_t callback,
- gpointer cbdata);
-
- /*
- * Get a domain for spf for specified task
- */
- const gchar * rspamd_spf_get_domain (struct rspamd_task *task);
-
-
- /*
- * Increase refcount
- */
- struct spf_resolved * spf_record_ref (struct spf_resolved *rec);
-
- /*
- * Decrease refcount
- */
- void spf_record_unref (struct spf_resolved *rec);
-
- #endif
|