X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fprotocol.c;h=5d84c5d7292d69a4688a48ed111cf8b015f11a34;hp=0a27692e89282f26dd9e95b2a6dc85b3e35d42cc;hb=74b0cbecce5194dc5c594cc4e2aa3e97c14ea6c1;hpb=a9247e6f2c57bda9dc62ed050f41048847109e83 diff --git a/src/protocol.c b/src/protocol.c index 0a27692e..5d84c5d7 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -19,6 +19,8 @@ #include "config.h" +#include + #include #include #include @@ -35,7 +37,7 @@ #include "netutl.h" #include "protocol.h" -char buffer[MAXBUFSIZE]; +char buffer[MAXBUFSIZE+1]; int buflen; int send_ack(conn_list_t *cl) @@ -44,7 +46,7 @@ cp if(debug_lvl > 2) syslog(LOG_DEBUG, "Send ACK to %s", cl->hostname); - buflen = sprintf(buffer, "%d\n", ACK); + buflen = snprintf(buffer, MAXBUFSIZE, "%d\n", ACK); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -64,7 +66,7 @@ cp syslog(LOG_DEBUG, "Send TERMREQ to " IP_ADDR_S, IP_ADDR_V(cl->vpn_ip)); - buflen = sprintf(buffer, "%d %lx\n", TERMREQ, myself->vpn_ip); + buflen = snprintf(buffer, MAXBUFSIZE, "%d %lx\n", TERMREQ, myself->vpn_ip); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -82,7 +84,7 @@ cp syslog(LOG_DEBUG, "Send TIMEOUT to " IP_ADDR_S, IP_ADDR_V(cl->vpn_ip)); - buflen = sprintf(buffer, "%d %lx\n", PINGTIMEOUT, myself->vpn_ip); + buflen = snprintf(buffer, MAXBUFSIZE, "%d %lx\n", PINGTIMEOUT, myself->vpn_ip); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -100,7 +102,7 @@ cp syslog(LOG_DEBUG, "Sending delete host " IP_ADDR_S " to " IP_ADDR_S, IP_ADDR_V(new_host->vpn_ip), IP_ADDR_V(cl->vpn_ip)); - buflen = sprintf(buffer, "%d %lx\n", DEL_HOST, new_host->vpn_ip); + buflen = snprintf(buffer, MAXBUFSIZE, "%d %lx\n", DEL_HOST, new_host->vpn_ip); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -117,7 +119,7 @@ cp if(debug_lvl > 3) syslog(LOG_DEBUG, "pinging " IP_ADDR_S, IP_ADDR_V(cl->vpn_ip)); - buflen = sprintf(buffer, "%d\n", PING); + buflen = snprintf(buffer, MAXBUFSIZE, "%d\n", PING); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -131,7 +133,7 @@ cp int send_pong(conn_list_t *cl) { cp - buflen = sprintf(buffer, "%d\n", PONG); + buflen = snprintf(buffer, MAXBUFSIZE, "%d\n", PONG); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -149,7 +151,7 @@ cp syslog(LOG_DEBUG, "Sending add host to " IP_ADDR_S, IP_ADDR_V(cl->vpn_ip)); - buflen = sprintf(buffer, "%d %lx %lx/%lx:%x\n", ADD_HOST, new_host->real_ip, new_host->vpn_ip, new_host->vpn_mask, new_host->port); + buflen = snprintf(buffer, MAXBUFSIZE, "%d %lx %lx/%lx:%x\n", ADD_HOST, new_host->real_ip, new_host->vpn_ip, new_host->vpn_mask, new_host->port); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -167,7 +169,7 @@ cp syslog(LOG_DEBUG, "Sending KEY_CHANGED to " IP_ADDR_S, IP_ADDR_V(cl->vpn_ip)); - buflen = sprintf(buffer, "%d %lx\n", KEY_CHANGED, src->vpn_ip); + buflen = snprintf(buffer, MAXBUFSIZE, "%d %lx\n", KEY_CHANGED, src->vpn_ip); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -195,7 +197,7 @@ cp syslog(LOG_DEBUG, "Send BASIC_INFO to " IP_ADDR_S, IP_ADDR_V(cl->real_ip)); - buflen = sprintf(buffer, "%d %d %lx/%lx:%x\n", BASIC_INFO, PROT_CURRENT, myself->vpn_ip, myself->vpn_mask, myself->port); + buflen = snprintf(buffer, MAXBUFSIZE, "%d %d %lx/%lx:%x\n", BASIC_INFO, PROT_CURRENT, myself->vpn_ip, myself->vpn_mask, myself->port); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -234,7 +236,7 @@ cp syslog(LOG_DEBUG, "Send PUBLIC_KEY %s to " IP_ADDR_S, my_public_key_base36, IP_ADDR_V(cl->vpn_ip)); - buflen = sprintf(buffer, "%d %s\n", PUBLIC_KEY, my_public_key_base36); + buflen = snprintf(buffer, MAXBUFSIZE, "%d %s\n", PUBLIC_KEY, my_public_key_base36); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -248,7 +250,7 @@ cp int send_calculate(conn_list_t *cl, char *k) { cp - buflen = sprintf(buffer, "%d %s\n", CALCULATE, k); + buflen = snprintf(buffer, MAXBUFSIZE, "%d %s\n", CALCULATE, k); if((write(cl->meta_socket, buffer, buflen)) < 0) { @@ -275,7 +277,7 @@ cp syslog(LOG_DEBUG, "Sending out request for public key to " IP_ADDR_S, IP_ADDR_V(fw->nexthop->vpn_ip)); - buflen = sprintf(buffer, "%d %lx %lx\n", REQ_KEY, to, myself->vpn_ip); + buflen = snprintf(buffer, MAXBUFSIZE, "%d %lx %lx\n", REQ_KEY, to, myself->vpn_ip); if((write(fw->nexthop->meta_socket, buffer, buflen)) < 0) { @@ -305,7 +307,7 @@ cp syslog(LOG_DEBUG, "Sending public key to " IP_ADDR_S, IP_ADDR_V(fw->nexthop->vpn_ip)); - buflen = sprintf(buffer, "%d %lx %lx %d %s\n", ANS_KEY, to, myself->vpn_ip, my_key_expiry, my_public_key_base36); + buflen = snprintf(buffer, MAXBUFSIZE, "%d %lx %lx %d %s\n", ANS_KEY, to, myself->vpn_ip, my_key_expiry, my_public_key_base36); if((write(fw->nexthop->meta_socket, buffer, buflen)) < 0) { @@ -616,7 +618,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 +715,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;