From: Jean-Marc Pigeon (Delson) Date: Fri, 25 Jul 2025 09:24:33 +0000 (-0400) Subject: Detecting black listed seems to be working X-Git-Tag: tag-0.14~26 X-Git-Url: https://jmp-git.ovh.safe.ca/?a=commitdiff_plain;h=420b09257d3878d4be9a7a2083c55bcdc1b6fac1;p=jmp%2Fmailleur Detecting black listed seems to be working --- diff --git a/lib/unidns.c b/lib/unidns.c index 590ca1c..be4bfcb 100644 --- a/lib/unidns.c +++ b/lib/unidns.c @@ -315,7 +315,8 @@ PUBLIC BLKTYP *dns_freeblk(BLKTYP *blk) { if (blk!=(BLKTYP *)0) { blk->sitename=rou_freestr(blk->sitename); - blk->target=rou_freestr(blk->target); + blk->targets=(char **)rou_freelist((void **)blk->targets, + (genfree_t)rou_freestr); (void) free(blk); blk=(BLKTYP *)0; } @@ -338,18 +339,33 @@ PUBLIC BLKTYP **dns_addblklist(BLKTYP **blklist,char *entry) if ((entry!=(char *)0)&&(strlen(entry)>0)) { int delta; - char target[300]; + int sofar; char sitename[300]; - (void) memset(target,'\000',sizeof(target)); (void) memset(sitename,'\000',sizeof(sitename)); - if (sscanf(entry,"%d %s %s",&delta,target,sitename)==3) { + sofar=0; + if (sscanf(entry,"%d %s%n",&delta,sitename,&sofar)==2) { BLKTYP *blk; + char **targets; + char *ptr; blk=calloc(1,sizeof(BLKTYP)); blk->delta=delta; - blk->target=strdup(target); blk->sitename=strdup(sitename); + ptr=entry+sofar; + while ((ptr!=(char *)0)&&(strlen(ptr)>0)) { + char *coma; + + while ((*ptr==' ')||(*ptr=='\t')) + ptr++; + if ((coma=strchr(ptr,','))!=(char *)0) { + *coma='\000'; + coma++; + } + targets=(char **)rou_addlist((void **)targets,(void *)strdup(ptr)); + ptr=coma; + } + blk->targets=targets; blklist=(BLKTYP **)rou_addlist((void **)blklist,(void *)blk); } else @@ -688,28 +704,61 @@ PUBLIC char *dns_is_blacklisted(BLKTYP *blk,char *reversip) char *listed; char **txt; char dnsquest[300]; +int phase; +_Bool proceed; listed=(char *)0; -(void) snprintf(dnsquest,sizeof(dnsquest),"%s.%s",reversip,blk->sitename); -//(void) rou_alert(0,"%s, JMPDBG checking <%s>",OPEP,dnsquest); -if ((txt=gettxt(dnsquest,T_A,"TXT"))!=(char **)0) { - int num; - char **ptr; - - num=0; - ptr=txt; - while (*ptr!=(char *)0) { - (void) rou_alert(0,"JMPDBG site <%s> got txt[%d]=<%s>", - dnsquest,num,*ptr); - num++; - ptr++; +phase=0; +proceed=(blk->targets!=(char **)0); +while (proceed==true) { + switch (phase) { + case 0 : //Building the request + (void) snprintf(dnsquest,sizeof(dnsquest),"%s.%s",reversip,blk->sitename); + break; + case 1 : //do we have a list of IP + if ((txt=gettxt(dnsquest,T_A,"TXT"))==(char **)0) + phase=999; //No answer no need to go further + break; + case 2 : { //chek is the list of IP ia amongs targets + char *foundit; + char **ptr; + + foundit=(char *)0; + ptr=txt; + while ((*ptr!=(char *)0)&&(foundit==(char *)0)) { + char **tgt; + + tgt=blk->targets; + while (*tgt!=(char *)0) { + if (strcmp(*tgt,*ptr)==0) { + foundit=*tgt; + break; + } + tgt++; + } + ptr++; + } + txt=(char **)rou_freelist((void **)txt,(genfree_t)rou_freestr); + if (foundit==(char *)0) + phase=999; + } + break; + case 3 : //get the explainantion + if ((txt=gettxt(dnsquest,T_TXT,"TXT"))!=(char **)0) { + (void) rou_asprintf(&listed,"%s -> %s",blk->sitename,txt[0]); + txt=(char **)rou_freelist((void **)txt,(genfree_t)rou_freestr); + phase=999; //every thing found + } + break; + case 4 : //blakc list but no explaination? + (void) rou_alert(0,"%s <%s> blacklisted but no explainantion!", + OPEP,dnsquest); + break; + default : //SAFE Guard + proceed=false; + break; } - (void) rou_asprintf(&listed,"IP %s -> %s",blk->sitename,txt[0]); - txt=(char **)rou_freelist((void **)txt,(genfree_t)rou_freestr); - } -if ((txt=gettxt(dnsquest,T_TXT,"TXT"))!=(char **)0) { - (void) rou_asprintf(&listed,"%s -> %s",blk->sitename,txt[0]); - txt=(char **)rou_freelist((void **)txt,(genfree_t)rou_freestr); + phase++; } return listed; diff --git a/lib/unidns.h b/lib/unidns.h index 10cb8bf..4d38a4c 100644 --- a/lib/unidns.h +++ b/lib/unidns.h @@ -22,8 +22,8 @@ typedef struct { //defining a blacklist entrry typedef struct { int delta; //black list delta value - char *target; //listing entry; char *sitename; //black lister domain entry + char **targets; //listing entry; }BLKTYP; typedef enum { //domain MX status