From 93b249ba5c222f62e03c9d192f326c72010430e8 Mon Sep 17 00:00:00 2001 From: "Jean-Marc Pigeon (Delson)" Date: Sun, 6 Jul 2025 16:22:04 -0400 Subject: [PATCH] digest-md5 Bingo! and no memory leak --- Makefile.dbg | 12 ++++++++++++ lib/lvleml.c | 15 +++++---------- lib/unidig.c | 9 ++++++--- 3 files changed, 23 insertions(+), 13 deletions(-) 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)); -- 2.47.3