]> SAFE projects GIT repository - jmp/mailleur/commitdiff
digest-md5 Bingo! and no memory leak
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sun, 6 Jul 2025 20:22:04 +0000 (16:22 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sun, 6 Jul 2025 20:22:04 +0000 (16:22 -0400)
Makefile.dbg
lib/lvleml.c
lib/unidig.c

index 9fad8c0406b311dc5d2ad31e1856ff11763b8bc9..50571f6077ae9e88dc8e0de32a7ccbedc33c1f3d 100644 (file)
@@ -45,6 +45,18 @@ digest       :  clean debug
                -d 9                                    \
                "|devel5.safe.ca|1025|1"
 
+valdigest:  clean debug
+             valgrind                                  \
+               --leak-check=full                       \
+                --show-leak-kinds=$(VALKIND)           \
+                                                       \
+            ./bin/receiver                             \
+               -f                                      \
+               -r $(TESTDIR)                           \
+               -c ./conf/$(APPNAME).conf.dvl           \
+               -d 9                                    \
+               "|devel5.safe.ca|1025|1"
+
 #              "|127.127.10.25|1025|1"
 
 onercvr        :  clean debug
index 6b444e181e4c4e7f68ecec4e1ed3b5b455104080..a8dabb5f6c4fc4bdb99e72ffb332b2d97082b59a 100644 (file)
@@ -398,15 +398,11 @@ while (proceed==true) {
       char *line;
 
       if (tcp_getline(contact->socptr,delay,&line)>0) {
+        char *res;
 
-        //if a clear text QUIT is received because of deep trouble
-        if (strcasecmp(line,"QUIT")!=0) {
-          char *res;
-
-          res=cnv_getb64(line);
-          (void) snprintf(answer,sizeof(answer),"%s",res);
-          res=rou_freestr(res);
-          }
+        res=cnv_getb64(line);
+        (void) snprintf(answer,sizeof(answer),"%s",res);
+        res=rou_freestr(res);
         line=rou_freestr(line);
         }
       if (strlen(answer)==0)
@@ -515,7 +511,6 @@ while (proceed==true) {
       char *line;
 
       if (tcp_getline(contact->socptr,delay,&line)>0) {
-        (void) rou_alert(0,"%s challenge answer=<%s>",OPEP,line);
         //if a clear text QUIT is received because of deep trouble
         if (strcasecmp(line,"QUIT")!=0) {
           char *res;
@@ -523,7 +518,6 @@ while (proceed==true) {
           res=cnv_getb64(line);
           (void) snprintf(answer,sizeof(answer),"%s",res);
           res=rou_freestr(res);
-          (void) rou_alert(0,"JMPDBG Got <%s>",answer);
           }
         line=rou_freestr(line); 
         }
@@ -540,6 +534,7 @@ while (proceed==true) {
     case 5      :       //comparing answer
       if (dig_checkresp(resp,"xxx")==true)
         (void) rou_alert(0,"JMPDBG Bingo!");
+      resp=dig_freeresp(resp);
       break;
     default     :       //SAFE Guard
       proceed=false;
index 9fb6957e402d666633296d974a8a734e4f3ecee2..9cddc366ba2c9535c44e2ef52ad870c47189ede9 100644 (file)
@@ -32,7 +32,7 @@ static void scanliteral(char *data)
 if (*data=='"') {
   char *ptr;
 
-  (void) memmove(data,data+1,strlen(data)+1);
+  (void) memmove(data,data+1,strlen(data+1)+1);
   while ((ptr=strchr(data,'"'))!=(char *)0) {
     if (strlen(data)>strlen(ptr)) {
       if (*(ptr-1)=='\\') {
@@ -169,6 +169,7 @@ PUBLIC RSPTYP *dig_parseresp(char *response)
 RSPTYP *resp;
 
 resp=(RSPTYP *)0;
+(void) rou_alert(0,"JMPDBG in dig_parseresp <%s>",response);
 if ((response!=(char *)0)&&(strlen(response)>0)) {
   char *cpy;
   char *next;
@@ -408,12 +409,14 @@ while (proceed==true) {
   switch (phase) {
     case 0      :  {    //computing hash HA1
       MD5TYP *A1;
+      char strA1[sizeof(MD5TYP)+1];
 
       (void) snprintf(seq,sizeof(seq),"%s:%s:%s",resp->username,resp->realm,secret);
       A1=dig_hashmd5((unsigned char *)seq);
+      (void) memset(strA1,'\000',sizeof(strA1));
+      (void) memmove(strA1,(char *)A1,sizeof(MD5TYP));
       //algorithm value is "MD5-sess"
-      (void) snprintf(seq,sizeof(seq),"%s:%s:%s",
-                                        (char *)A1,resp->nonce,resp->cnonce);
+      (void) snprintf(seq,sizeof(seq),"%s:%s:%s",strA1,resp->nonce,resp->cnonce);
       (void) free(A1);
       A1=dig_hashmd5((unsigned char *)seq);
       HA1=cnv_tohexa((char *)A1,sizeof(MD5TYP));