X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fmeta.c;h=0071eb55b7d8ae210444bfc086e7c46a4ed19598;hp=dacb1df9fc9dda46b6ce3d24cad257c8bedca359;hb=e3220cacb5bc79fc56167e61b7a342f88a33a479;hpb=6c5f3d8b74ffea1522a727ef189a5ba65a939e07 diff --git a/src/meta.c b/src/meta.c index dacb1df9..0071eb55 100644 --- a/src/meta.c +++ b/src/meta.c @@ -17,11 +17,12 @@ 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.44 2003/08/28 21:05:10 guus Exp $ + $Id: meta.c,v 1.1.2.50 2003/11/17 15:30:17 guus Exp $ */ #include "system.h" +#include #include #include "avl_tree.h" @@ -46,7 +47,12 @@ bool send_meta(connection_t *c, const char *buffer, int length) c->name, c->hostname); if(c->status.encryptout) { - EVP_EncryptUpdate(c->outctx, outbuf, &outlen, buffer, length); + result = EVP_EncryptUpdate(c->outctx, outbuf, &outlen, buffer, length); + if(!result || outlen != length) { + logger(LOG_ERR, _("Error while encrypting metadata to %s (%s): %s"), + c->name, c->hostname, ERR_error_string(ERR_get_error(), NULL)); + return false; + } bufp = outbuf; length = outlen; } else @@ -89,8 +95,8 @@ void broadcast_meta(connection_t *from, const char *buffer, int length) bool receive_meta(connection_t *c) { - int oldlen, i; - int lenin, reqlen; + int oldlen, i, result; + int lenin, lenout, reqlen; bool decrypted = false; char inbuf[MAXBUFSIZE]; @@ -123,11 +129,16 @@ bool receive_meta(connection_t *c) oldlen = c->buflen; c->buflen += lenin; - while(lenin) { + while(lenin > 0) { /* Decrypt */ if(c->status.decryptin && !decrypted) { - EVP_DecryptUpdate(c->inctx, inbuf, &lenin, c->buffer + oldlen, lenin); + result = EVP_DecryptUpdate(c->inctx, inbuf, &lenout, c->buffer + oldlen, lenin); + if(!result || lenout != lenin) { + logger(LOG_ERR, _("Error while decrypting metadata from %s (%s): %s"), + c->name, c->hostname, ERR_error_string(ERR_get_error(), NULL)); + return false; + } memcpy(c->buffer + oldlen, inbuf, lenin); decrypted = true; } @@ -139,7 +150,7 @@ bool receive_meta(connection_t *c) receive_tcppacket(c, c->buffer, c->tcplen); c->buflen -= c->tcplen; - lenin -= c->tcplen; + lenin -= c->tcplen - oldlen; memmove(c->buffer, c->buffer + c->tcplen, c->buflen); oldlen = 0; c->tcplen = 0; @@ -167,7 +178,7 @@ bool receive_meta(connection_t *c) return false; c->buflen -= reqlen; - lenin -= reqlen; + lenin -= reqlen - oldlen; memmove(c->buffer, c->buffer + reqlen, c->buflen); oldlen = 0; continue;