From: Guus Sliepen Date: Tue, 2 May 2000 09:55:34 +0000 (+0000) Subject: Previous fix fixed. Meta protocol should be really flawless from now on! X-Git-Tag: release-1.0pre1~15 X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=commitdiff_plain;h=aeccaca829842910b4a5c8a5fa61e1738492bea6 Previous fix fixed. Meta protocol should be really flawless from now on! --- diff --git a/src/net.c b/src/net.c index 69616b48..ebcaeb36 100644 --- a/src/net.c +++ b/src/net.c @@ -956,19 +956,19 @@ cp for(;;) { - p=0; + cl->reqlen = 0; for(i = oldlen; i < cl->buflen; i++) { if(cl->buffer[i] == '\n') { - p = i + 1; - cl->buffer[p] = 0; /* add end-of-string so we can use sscanf */ + cl->buffer[i] = 0; /* replace end-of-line by end-of-string so we can use sscanf */ + cl->reqlen = i + 1; break; } } - if(p) + if(cl->reqlen) { if(sscanf(cl->buffer, "%d", &request) == 1) { @@ -988,8 +988,8 @@ cp syslog(LOG_ERR, "Bogus data received: %s", cl->buffer); } - cl->buflen -= p; - memmove(cl->buffer, cl->buffer + p, cl->buflen); + cl->buflen -= cl->reqlen; + memmove(cl->buffer, cl->buffer + cl->reqlen, cl->buflen); oldlen = 0; } else diff --git a/src/net.h b/src/net.h index 27a16cf8..dffc7cb1 100644 --- a/src/net.h +++ b/src/net.h @@ -114,6 +114,7 @@ typedef struct conn_list_t { enc_key_t *key; /* encrypt with this key */ char buffer[MAXBUFSIZE]; /* metadata input buffer */ int buflen; /* bytes read into buffer */ + int reqlen; /* length of first request in buffer */ struct conn_list_t *nexthop; /* nearest meta-hop in this direction */ struct conn_list_t *next; /* after all, it's a list of connections */ } conn_list_t; diff --git a/src/protocol.c b/src/protocol.c index 0a27692e..c6b6fec6 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -616,7 +616,9 @@ cp syslog(LOG_DEBUG, "Forwarding request for public key to " IP_ADDR_S, IP_ADDR_V(fw->nexthop->vpn_ip)); - if(write(fw->nexthop->meta_socket, cl->buffer, strlen(cl->buffer)) < 0) + cl->buffer[cl->reqlen-1] = '\n'; + + if(write(fw->nexthop->meta_socket, cl->buffer, cl->reqlen) < 0) { syslog(LOG_ERR, "send failed: %s:%d: %m", __FILE__, __LINE__); return -1; @@ -711,7 +713,9 @@ cp syslog(LOG_DEBUG, "Forwarding public key to " IP_ADDR_S, IP_ADDR_V(fw->nexthop->vpn_ip)); - if((write(fw->nexthop->meta_socket, cl->buffer, strlen(cl->buffer))) < 0) + cl->buffer[cl->reqlen-1] = '\n'; + + if((write(fw->nexthop->meta_socket, cl->buffer, cl->reqlen)) < 0) { syslog(LOG_ERR, "send failed: %s:%d: %m", __FILE__, __LINE__); return -1;