15void die(
int e,
char *s) { buffer_putsflush(buffer_2,s);
_exit(e); }
18static stralloc heloin = {0};
19static stralloc mfin = {0};
21static stralloc spfbounce = {0};
23int main(
int argc,
char *
const *argv)
32 logmsg(
WHO,100,USAGE,
"spfquery <sender-ip> <sender-helo/ehlo> <envelope-from> [<local rules>] [-v(erbose) ]\n");
36 r = byte_chr(spfip.s,spfip.len,
':');
37 if (r < spfip.len) flag = 1;
46 if (!byte_diff(argv[4],2,
"-v")) verbose = 1;
54 if (!byte_diff(argv[5],2,
"-v")) verbose = 1;
61 r =
spf_query(spfip.s,heloin.s,mfin.s,
"localhost",flag);
64 buffer_puts(buffer_1,
"result=");
66 case SPF_ME: buffer_puts(buffer_1,
"loopback");
break;
67 case SPF_OK: buffer_puts(buffer_1,
"pass");
break;
68 case SPF_NONE: buffer_puts(buffer_1,
"none");
break;
69 case SPF_UNKNOWN: buffer_puts(buffer_1,
"unknown");
break;
70 case SPF_NEUTRAL: buffer_puts(buffer_1,
"neutral");
break;
71 case SPF_SOFTFAIL: buffer_puts(buffer_1,
"softfail");
break;
72 case SPF_FAIL: buffer_puts(buffer_1,
"fail");
break;
73 case SPF_ERROR: buffer_puts(buffer_1,
"error");
break;
74 case SPF_SYNTAX: buffer_puts(buffer_1,
"IP address syntax error");
break;
75 default: buffer_puts(buffer_1,
"undefined");
break;
78 buffer_putsflush(buffer_1,
"\n");
82 buffer_puts(buffer_1,
"SPF records read: \n");
86 buffer_puts(buffer_1,
"SPF information evaluated: ");
88 buffer_putsflush(buffer_1,
"\n");
91 buffer_puts(buffer_1,
"SPF results returned: ");
93 buffer_put(buffer_1,spfbounce.s,spfbounce.len);
94 buffer_putsflush(buffer_1,
"\n");
int stralloc_copys(stralloc *, char const *)
int spf_parse(stralloc *, char *, char *)
spf_parse parses the substructure of the SPF record and calls spf_macros
int spf_query(const char *, const char *, const char *, const char *, const int)
spf_query prepares the SPF TXT record query