/* remote ip credibility. */
/* */
/********************************************************/
-static void check_credibility(SCATYP *scanref,char **dnsbls,int num,char *rmtip)
+static void check_credibility(SCATYP *scanref,BLKTYP **dnsblk,int num,char *rmtip)
{
#define OPEP "scanner.c:check_credibilty,"
case 3 : //updating record according blacklisting
srv->credit=0;
srv->lastscan=time((time_t *)0);
- if (dnsbls!=(char **)0) {
- while (*dnsbls!=(char *)0) {
+ if (dnsblk!=(BLKTYP **)0) {
+ while (*dnsblk!=(BLKTYP *)0) {
char *report;
char *listed;
char cst[100];
report=(char *)0;
- listed=dns_is_blacklisted(*dnsbls,reversip);
+ listed=dns_is_blacklisted(*dnsblk,reversip);
(void) snprintf(cst,sizeof(cst),"IP[%02d]: %s\t",num,rmtip);
if (listed!=(char *)0) {
(void) rou_asprintf(&report,"%s%s",cst,listed);
srv->listing=strdup(listed);
}
else
- (void) rou_asprintf(&report,"%s%s -> NOT listed",cst,*dnsbls);
+ (void) rou_asprintf(&report,"%s%s -> NOT listed",cst,
+ (*dnsblk)->sitename);
(void) log_fprintlog(scanref->logptr,true,report);
report=rou_freestr(report);
listed=rou_freestr(listed);
- dnsbls++;
+ dnsblk++;
}
(void) log_fprintlog(scanref->logptr,true,"IP[%02d]: %s\tRVS='%s'\tCurrent "
"credit='%3d'",
/* remote ip credibility. */
/* */
/********************************************************/
-static char **load_dnsbls()
+static BLKTYP **load_dnsbls()
{
#define OPEP "scanner.c:load_dnsbls,"
const char *blcklist="BLACKLISTER";
-char **dnsbls;
+BLKTYP **dnsblk;
FILE *blkfile;
const char *filename;
int phase;
_Bool proceed;
-dnsbls=(char **)0;
+dnsblk=(BLKTYP **)0;
blkfile=(FILE *)0;
phase=0;
proceed=true;
while (fgets(line,sizeof(line)-1,blkfile)!=(char *)0) {
(void) rou_clean_conf_line(line);
- if (strlen(line)>0) {
- dnsbls=(char **)rou_addlist((void **)dnsbls,(void *)strdup(line));
- }
+ dnsblk=dns_addblklist(dnsblk,line);
}
(void) fclose(blkfile);
}
}
phase++;
}
-return dnsbls;
+return dnsblk;
#undef OPEP
}
unsigned long cycle;
SCATYP scanref;
-char **dnsbls;
+BLKTYP **dnsblk;
char **rmtip;
int delay;
int phase;
cycle=0;
(void) memset(&scanref,'\000',sizeof(scanref));
-dnsbls=load_dnsbls();
+dnsblk=load_dnsbls();
rmtip=(char **)0;
delay=60; //60 second sleeping time
if (debug>0)
delay/=10;
phase=0;
-proceed=(dnsbls!=(char **)0);
+proceed=(dnsblk!=(BLKTYP **)0);
while (proceed==true) {
//(void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
break;
case 3 : //refreshing the dnsbls list
if ((cycle%100)==0) {
- dnsbls=(char **)rou_freelist((void **)dnsbls,(genfree_t)rou_freestr);
- dnsbls=load_dnsbls();
+ dnsblk=(BLKTYP **)rou_freelist((void **)dnsblk,(genfree_t)dns_freeblk);
+ dnsblk=load_dnsbls();
}
- proceed=(dnsbls!=(char **)0);
+ proceed=(dnsblk!=(BLKTYP **)0);
break;
case 4 : //opening database
if ((scanref.sqlptr=sql_opensql())==(SQLPTR *)0) {
break;
case 7 : //check entries
for (int i=0;rmtip[i]!=(char *)0;i++) {
- (void) check_credibility(&scanref,dnsbls,i+1,rmtip[i]);
+ (void) check_credibility(&scanref,dnsblk,i+1,rmtip[i]);
if ((hangup==true)||((reload==true)))
break; //No need to check other remote
}
}
phase++;
}
-dnsbls=(char **)rou_freelist((void **)dnsbls,(genfree_t)rou_freestr);
+dnsblk=(BLKTYP **)rou_freelist((void **)dnsblk,(genfree_t)dns_freeblk);
#undef OPEP
}
*/
/********************************************************/
/* */
+/* Procedure to free memory used by BLKTYP entry */
+/* */
+/********************************************************/
+PUBLIC BLKTYP *dns_freeblk(BLKTYP *blk)
+
+{
+if (blk!=(BLKTYP *)0) {
+ blk->sitename=rou_freestr(blk->sitename);
+ blk->target=rou_freestr(blk->target);
+ (void) free(blk);
+ blk=(BLKTYP *)0;
+ }
+return blk;
+}
+/*
+^L
+*/
+/********************************************************/
+/* */
+/* Procedure to add and entry with the list of */
+/* blacklist site. */
+/* */
+/********************************************************/
+PUBLIC BLKTYP **dns_addblklist(BLKTYP **blklist,char *entry)
+
+
+{
+#define OPEP "unidns.c:dns_addblklist,"
+
+if ((entry!=(char *)0)&&(strlen(entry)>0)) {
+ int delta;
+ char target[300];
+ 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) {
+ BLKTYP *blk;
+
+ blk=calloc(1,sizeof(BLKTYP));
+ blk->delta=delta;
+ blk->target=strdup(target);
+ blk->sitename=strdup(sitename);
+ blklist=(BLKTYP **)rou_addlist((void **)blklist,(void *)blk);
+ }
+ else
+ (void) rou_alert(0,"%s, entry wrong format <%s> (config?)",OPEP,entry);
+ }
+return blklist;
+
+#undef OPEP
+}
+/*
+^L
+*/
+/********************************************************/
+/* */
/* Procedure to extract IPs from an hostname */
/* */
/********************************************************/
/* remote IP and return a TXT if it is blacklisted.*/
/* */
/********************************************************/
-PUBLIC char *dns_is_blacklisted(char *blssite,char *reversip)
+PUBLIC char *dns_is_blacklisted(BLKTYP *blk,char *reversip)
{
#define OPEP "unidns.c:dns_is_blacklisted,"
char dnsquest[300];
listed=(char *)0;
-(void) snprintf(dnsquest,sizeof(dnsquest),"%s.%s",reversip,blssite);
-//(void) rou_alert(0,"%s, JMPDBG checking <%s>",OPEP,dnsquest);
+(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_PTR,"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>",
+ blk->sitename,num,*ptr);
+ num++;
+ ptr++;
+ }
+ (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",blssite,txt[0]);
+ (void) rou_asprintf(&listed,"%s -> %s",blk->sitename,txt[0]);
txt=(char **)rou_freelist((void **)txt,(genfree_t)rou_freestr);
}
return listed;
char **mxip; //MX IPNUM list
}MXTYP;
+//defining a blacklist entrry
+typedef struct {
+ int delta; //black list delta value
+ char *target; //listing entry;
+ char *sitename; //black lister domain entry
+ }BLKTYP;
+
typedef enum { //domain MX status
dns_nomx, //Domain without MX
dns_local, //Domain is local
dns_unknown //Unknow domain status.
}LOCTYP;
+//procedure to free on blklist entry
+extern BLKTYP *dns_freeblk(BLKTYP *blk);
+
+extern BLKTYP **dns_addblklist(BLKTYP **blklist,char *entry);
+
//Procedure to get a list of IP related to a hostname
extern char **dns_get_ip_list(char *hostname);
//Procedure to get ONE SPF entry within domain dns
extern char *dns_getspf(char *domain);
-//procedure to free un list de MX related to domain
+//procedure to free a list of MX related to domain
extern MXTYP **dns_freemxlist(MXTYP **mxlist);
//procedure to get a list of MX IP releated to a specific
extern LOCTYP dns_is_domain_local(const char *domain,AFNTYP **afns);
//procedure returning a string if remote IP si blacklisted
-extern char *dns_is_blacklisted(char *blssite,char *reversip);
+extern char *dns_is_blacklisted(BLKTYP *blk,char *reversip);
//procedure returning the IP reverss address as a string
extern char *dns_get_reverse_addr(char *reversip);