{
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;
}
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
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;