#include "unipar.h"
#include "uniprc.h"
#include "unisig.h"
+#include "subafn.h"
#include "subrou.h"
#define SCANNER "scarmt" //application name
#define OPEP "scarmt.c:check_credibilty,"
SRVTYP *srv;
+AFNTYP **afns;
+char *reversip;
int phase;
_Bool proceed;
srv=(SRVTYP *)0;
+afns=(AFNTYP **)0;
+reversip=(char *)0;
phase=0;
proceed=true;
while (proceed==true) {
switch (phase) {
- case 0 : //loading rmtip record
+ case 0 : //get the remoteip AFN
+ if ((afns=afn_getipnum(rmtip))==(AFNTYP **)0) {
+ (void) rou_alert(0,"%s Unable to get afn data for remote <%s> (WRONG IP?)",
+ OPEP,rmtip);
+ phase=999; //Trouble trouble
+ }
+ break;
+ case 1 : //loading rmtip record
if (sql_mngremote(sqlptr,sql_select,rmtip,&srv)==false) {
(void) rou_alert(0,"%s Unable to get remote <%s> data (database?)",
OPEP,rmtip);
phase=999; //Trouble trouble
}
break;
- case 1 : //updating record according blacklisting
+ case 2 : //updating record according blacklisting
+ reversip=afn_reversipnum(*afns);
srv->credit=0;
srv->lastscan=time((time_t *)0);
if (dnsbls!=(char **)0) {
}
}
break;
- case 2 : //updating record
+ case 3 : //updating record
if (sql_mngremote(sqlptr,sql_update,rmtip,&srv)==false) {
(void) rou_alert(0,"%s Unable to update remote <%s> data (database?)",
OPEP,rmtip);
phase++;
}
srv=sql_freesrv(srv);
+reversip=rou_freestr(reversip);
+afns=(AFNTYP **)rou_freelist((void **)afns,(genfree_t)afn_freeipnum);
+
#undef OPEP
}
/*
#undef OPEP
}
+/*
+^L
+*/
+/********************************************************/
+/* */
+/* Procedure to return a revers address as */
+/* dynamically alocated memory. */
+/* */
+/********************************************************/
+char *afn_reversipnum(AFNTYP *afnnum)
+
+{
+char * reversip;
+
+reversip=(char *)0;
+if (afnnum!=(AFNTYP *)0) {
+ int i;
+ char revers[200];
+
+ reversip=strdup("");
+ (void) memset(revers,'\000',sizeof(revers));
+ switch (afnnum->afntype) {
+ case AF_INET6 :
+ for (i=16;i>0;i--) {
+ char local[20];
+
+ (void) snprintf(local,sizeof(local),"%x.%x.",
+ afnnum->ip[i-1]&0xf,
+ afnnum->ip[i-1]>>4);
+ (void) strncat(revers,local,sizeof((revers)-1)-strlen(revers));
+ }
+ break;
+ case AF_INET :
+ for (i=4;i>0;i--) {
+ char local[10];
+
+ (void) snprintf(local,sizeof(local),"%d.",afnnum->ip[i-1]);
+ (void) strncat(revers,local,(sizeof(revers)-1)-strlen(revers));
+ }
+ break;
+ default :
+ (void) snprintf(revers,sizeof(revers),"%d.0.0.0.0.ukn.",afnnum->afntype);
+ break;
+ }
+ reversip=strdup(revers);
+ }
+return reversip;
+}
+
/*
^L
*/
//procedure to convert a IP as string to an AFNTYP structure
extern AFNTYP **afn_getipnum(char *cleanipstr);
+//procedure to 'compute' a reverss-addres from the IP
+extern char *afn_reversipnum(AFNTYP *afnnum);
+
//procedure to compare 2 same class IP according a mask value
extern int afn_cmpipnum(AFNTYP *afnnum1,AFNTYP *afnnum2,int mask);