]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Calculating the reverss-ip is working
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sun, 13 Jul 2025 15:05:52 +0000 (11:05 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sun, 13 Jul 2025 15:05:52 +0000 (11:05 -0400)
app/Makefile
app/scarmt.c
lib/subafn.c
lib/subafn.h

index c428eb1033df3c1ece9cd1186f16132e48eaa97a..1e7fc3096eb1bcebb45d7588b2979a9997a67fa5 100644 (file)
@@ -121,6 +121,7 @@ scarmt.o:  scarmt.c                                 \
           ../lib/unipar.h                              \
           ../lib/uniprc.h                              \
           ../lib/unisig.h                              \
+          ../lib/subafn.h                              \
           ../lib/subrou.h
 
 sender.o:  sender.c                                    \
index 9dcbf24816138f6515b7ce85ca9974b270a00232..b131a59b3015f2f48b36159cbb1e0308575e8e6f 100644 (file)
@@ -20,6 +20,7 @@
 #include        "unipar.h"
 #include        "uniprc.h"
 #include        "unisig.h"
+#include        "subafn.h"
 #include        "subrou.h"
 
 #define SCANNER "scarmt"       //application name
@@ -38,22 +39,34 @@ static void check_credibility(SQLPTR *sqlptr,char **dnsbls,char *rmtip)
 #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) {
@@ -63,7 +76,7 @@ while (proceed==true) {
           }
         }
       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);
@@ -76,6 +89,9 @@ while (proceed==true) {
   phase++;
   }
 srv=sql_freesrv(srv);
+reversip=rou_freestr(reversip);
+afns=(AFNTYP **)rou_freelist((void **)afns,(genfree_t)afn_freeipnum);
+
 #undef  OPEP
 }
 /*
index 0e986a3b85ab12ed8c0b29df3ef6c7608bf95313..a2d2ca916dfea1c0a5366d1e35420f2112035b11 100644 (file)
@@ -472,6 +472,55 @@ return ipnorm;
 
 #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
 */
index e37a49dc7fbc9632eaf0aaeb16aabd7ead297f98..bc5a615e5d57500787d1843d1fc70c2fd1579273 100644 (file)
@@ -48,6 +48,9 @@ extern AFNTYP *afn_getaddrinfo(struct addrinfo *rp);
 //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);