From 9cd036011151b976e2407e7e0eb752b4900226fa Mon Sep 17 00:00:00 2001 From: "Jean-Marc Pigeon (Delson)" Date: Thu, 15 Aug 2024 18:56:41 -0400 Subject: [PATCH] Adding checkip procedure (still to be implemented) --- lib/subrou.c | 2 +- lib/unidns.c | 30 ++++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/subrou.c b/lib/subrou.c index a33c296..8b86a47 100644 --- a/lib/subrou.c +++ b/lib/subrou.c @@ -21,7 +21,7 @@ //version definition #define VERSION "0.4.2" -#define RELEASE "9" +#define RELEASE "10" //Public variables PUBLIC int debug=0; //debug level diff --git a/lib/unidns.c b/lib/unidns.c index 4fb861f..909576b 100644 --- a/lib/unidns.c +++ b/lib/unidns.c @@ -161,6 +161,24 @@ return seq; */ /********************************************************/ /* */ +/* Procedure to check ip peerip is within an */ +/* spf sequence */ +/* */ +/********************************************************/ +static _Bool checkip(char *peerip,char *seq) + +{ +_Bool bingo; + +bingo=false; +(void) printf("JMPDBG checkip peerip=<%s> seq=<%s>\n",peerip,seq); +return bingo; +} +/* + +*/ +/********************************************************/ +/* */ /* Procedure to return an spf status according */ /* sequence contents */ /* */ @@ -177,7 +195,6 @@ spf=spf_neutral; locspf=spf_pass; phase=0; proceed=true; -(void) printf("JMPDBG checkseq seq=<%s>\n",seq); while (proceed==true) { switch (phase) { case 0 : //is the sequence an SPF Mechanisms @@ -208,8 +225,11 @@ while (proceed==true) { case mch_all : //usually last in sequence spf=locspf; break; + case mch_ip4 : //include sub domain + if (checkip(peerip,seq+1)==true) + spf=locspf; + break; case mch_include : //include sub domain - (void) printf("JMPDBG should include <%s>\n",seq+1); if (seq[0]==':') { (*try)++; spf=dns_get_spf_status(try,seq+1,peerip); @@ -495,7 +515,7 @@ SPFENU spf; int phase; _Bool proceed; -spf=spf_permerr; +spf=spf_neutral; phase=0; proceed=true; while (proceed==true) { @@ -523,6 +543,8 @@ while (proceed==true) { spfrec+=strlen(seq); spf=checkseq(try,seq,peerip,spf); seq=rou_freestr(seq); + if (spf!=spf_neutral) + break; //Found a status breaking loop } } break; @@ -606,6 +628,7 @@ spf=spf_permerr; list=(char **)0; phase=0; proceed=true; +(void) printf("JMPDBG try='%02d' domain=<%s> peerip=<%s>\n",*try,domain,peerip); while (proceed==true) { switch (phase) { case 0 : //Are the parameters available @@ -632,7 +655,6 @@ while (proceed==true) { } break; case 4 : //gett the spf LIST related to SPF - (void) printf("JMPDBG peerip=<%s>, spf=<%s>\n",peerip,list[0]); spf=is_peerip_ok(try,peerip,list[0]); list=(char **)rou_freelist((void **)list,(freehandler_t)rou_freestr); break; -- 2.47.3