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 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