X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fmeta.c;h=87cb415d9c3d36248045caebea35aa62dc32dd51;hp=f9b18ca34be2f5374649316a001d4224c8623e80;hb=4dee76522e177dcb4af5d6d844a5f3b74070e4b7;hpb=153fc35e57c0104aa4ea9103bcdbca3665e4934c diff --git a/src/meta.c b/src/meta.c index f9b18ca3..87cb415d 100644 --- a/src/meta.c +++ b/src/meta.c @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: meta.c,v 1.1.2.15 2001/02/25 11:09:29 guus Exp $ + $Id: meta.c,v 1.1.2.17 2001/05/25 08:36:11 guus Exp $ */ #include "config.h" @@ -93,7 +93,7 @@ int receive_meta(connection_t *cl) int oldlen, i; int lenin = 0; char inbuf[MAXBUFSIZE]; - char *bufp; + int decrypted = 0; cp if(getsockopt(cl->meta_socket, SOL_SOCKET, SO_ERROR, &x, &l) < 0) { @@ -108,12 +108,7 @@ cp return -1; } - if(cl->status.decryptin) - bufp = inbuf; - else - bufp = cl->buffer + cl->buflen; - - lenin = read(cl->meta_socket, bufp, MAXBUFSIZE - cl->buflen); + lenin = read(cl->meta_socket, cl->buffer + cl->buflen, MAXBUFSIZE - cl->buflen); if(lenin<=0) { @@ -133,16 +128,18 @@ cp return -1; } - if(cl->status.decryptin) - { - EVP_DecryptUpdate(cl->cipher_inctx, cl->buffer + cl->buflen, &lenin, inbuf, lenin); - } - oldlen = cl->buflen; cl->buflen += lenin; - for(;;) + while(lenin) { + if(cl->status.decryptin && !decrypted) + { + EVP_DecryptUpdate(cl->cipher_inctx, inbuf, &lenin, cl->buffer + oldlen, lenin); + memcpy(cl->buffer + oldlen, inbuf, lenin); + decrypted = 1; + } + cl->reqlen = 0; for(i = oldlen; i < cl->buflen; i++) @@ -165,6 +162,7 @@ cp return -1; cl->buflen -= cl->reqlen; + lenin -= cl->reqlen; memmove(cl->buffer, cl->buffer + cl->reqlen, cl->buflen); oldlen = 0; }