#include <unistd.h>
#include "devsql.h"
+#include "devlog.h"
#include "gessql.h"
#include "unidns.h"
#include "unipar.h"
#include "subrou.h"
#define SCANNER "scarmt" //application name
+
+typedef struct {
+ LOGPTR *logptr; //session log refrence pointer
+ SQLPTR *sqlptr; //sesion database reference pointer
+ }SCATYP;
/*
\f
*/
/* remote ip credibility. */
/* */
/********************************************************/
-static void check_credibility(SQLPTR *sqlptr,char **dnsbls,char *rmtip)
+static void check_credibility(SCATYP *scanref,char **dnsbls,int num,char *rmtip)
{
#define OPEP "scarmt.c:check_credibilty,"
}
break;
case 1 : //loading rmtip record
- if (sql_mngremote(sqlptr,sql_select,rmtip,&srv)==false) {
+ if (sql_mngremote(scanref->sqlptr,sql_select,rmtip,&srv)==false) {
(void) rou_alert(0,"%s Unable to get remote <%s> data (database?)",
OPEP,rmtip);
phase=999; //Trouble trouble
srv->credit=0;
srv->lastscan=time((time_t *)0);
if (dnsbls!=(char **)0) {
+ char cst[100];
+
+ (void) snprintf(cst,sizeof(cst),"IP[%02d]: %s",num,rmtip);
while (*dnsbls!=(char *)0) {
+ char *report;
char *listed;
+ report=(char *)0;
listed=dns_is_blacklisted(*dnsbls,reversip);
if (listed!=(char *)0) {
+ (void) rou_asprintf(&report,"%s\tlisted->'%s'",cst,listed);
srv->credit-=10;
if (srv->listing==(char *)0)
srv->listing=strdup(listed);
- (void) rou_alert(4,"%s JMPDBG scan <%s> against <%s> result=<%s>",
- OPEP,rmtip,*dnsbls,listed);
}
+ else
+ (void) rou_asprintf(&report,"%s\tNOT listed",cst);
+ (void) log_fprintlog(scanref->logptr,true,report);
+ report=rou_freestr(report);
listed=rou_freestr(listed);
dnsbls++;
}
}
break;
case 3 : //updating record
- if (sql_mngremote(sqlptr,sql_update,rmtip,&srv)==false) {
+ if (sql_mngremote(scanref->sqlptr,sql_update,rmtip,&srv)==false) {
(void) rou_alert(0,"%s Unable to update remote <%s> data (database?)",
OPEP,rmtip);
}
{
#define OPEP "scarmt.c:doscanning,"
-SQLPTR *sqlptr;
unsigned int cycle;
+SCATYP scanref;
char **dnsbls;
char **rmtip;
int delay;
int phase;
_Bool proceed;
-sqlptr=(SQLPTR *)0;
cycle=0;
+(void) memset(&scanref,'\000',sizeof(scanref));
dnsbls=load_dnsbls();
rmtip=(char **)0;
delay=10; //10 second sleeping time
phase=0;
proceed=(dnsbls!=(char **)0);
while (proceed==true) {
+ (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
- case 0 : //opening database
- if ((sqlptr=sql_opensql())==(SQLPTR *)0) {
- (void) rou_alert(0,"%s Unable to open database (Config?)",OPEP);
- phase=999; //Trouble trouble
- }
+ case 0 : //empty phase
break;
case 1 : //check about signal
- sleep(delay);
+ (void) sleep(delay);
if ((hangup==true)||((reload==true))) {
(void) rou_alert(0,"%s got hangup or reload signal",OPEP);
phase=999;
}
break;
case 2 : //refreshing the dnsbls list
+ cycle++;
if ((cycle%100)==0) {
dnsbls=(char **)rou_freelist((void **)dnsbls,(genfree_t)rou_freestr);
dnsbls=load_dnsbls();
}
proceed=(dnsbls!=(char **)0);
break;
- case 3 : //check for new entry
- if ((rmtip=sql_getnewrmtip(sqlptr))==(char **)0)
+ case 3 : //opening database
+ if ((scanref.sqlptr=sql_opensql())==(SQLPTR *)0) {
+ (void) rou_alert(0,"%s Unable to open database (Config?)",OPEP);
+ phase=999; //Trouble trouble
+ }
+ break;
+ case 4 : //check for new entry
+ if ((rmtip=sql_getnewrmtip(scanref.sqlptr))==(char **)0) {
+ scanref.sqlptr=sql_closesql(scanref.sqlptr);
phase=0; //nothing to be done
+ }
+ break;
+ case 5 : { //opening log
+ char *sessid;
+ int numip;
+ char cmt[200];
+
+ sessid=eml_getmainsesid();
+ numip=rou_nbrlist((void **)rmtip);
+ (void) snprintf(cmt,sizeof(cmt),"%d remote IP to scan",numip);
+ if ((scanref.logptr=log_openlog(sessid,cmt))==(LOGPTR *)0) {
+ (void) rou_alert(0,"%s Unable to open log file (Bug?)",OPEP);
+ rmtip=(char **)rou_freelist((void **)rmtip,(genfree_t)rou_freestr);
+ phase=999;
+ }
+ sessid=rou_freestr(sessid);
+ }
break;
- case 4 : //check entries
+ case 6 : //check entries
for (int i=0;rmtip[i]!=(char *)0;i++) {
- (void) check_credibility(sqlptr,dnsbls,rmtip[i]);
+ (void) check_credibility(&scanref,dnsbls,i,rmtip[i]);
if ((hangup==true)||((reload==true)))
break; //No need to check other remote
}
rmtip=(char **)rou_freelist((void **)rmtip,(genfree_t)rou_freestr);
break;
- case 5 : //let continue
+ case 7 : //let continue
+ scanref.logptr=log_closelog(scanref.logptr);
+ scanref.sqlptr=sql_closesql(scanref.sqlptr);
phase=0; //looping the job again
break;
default : //SAFE Guard
- sqlptr=sql_closesql(sqlptr);
proceed=false;
break;
}