From: Jean-Marc Pigeon (Delson) Date: Sun, 6 Jul 2025 20:22:04 +0000 (-0400) Subject: digest-md5 Bingo! and no memory leak X-Git-Tag: tag-0.12~15 X-Git-Url: https://jmp-git.ovh.safe.ca/?a=commitdiff_plain;h=93b249ba5c222f62e03c9d192f326c72010430e8;p=jmp%2Fmailleur digest-md5 Bingo! and no memory leak --- diff --git a/Makefile.dbg b/Makefile.dbg index 9fad8c0..50571f6 100644 --- a/Makefile.dbg +++ b/Makefile.dbg @@ -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 diff --git a/lib/lvleml.c b/lib/lvleml.c index 6b444e1..a8dabb5 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -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; diff --git a/lib/unidig.c b/lib/unidig.c index 9fb6957..9cddc36 100644 --- a/lib/unidig.c +++ b/lib/unidig.c @@ -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));