X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;ds=sidebyside;f=src%2Fcontrol.c;h=19f074a6a691136b8ea1fa6257085de5a54af929;hb=7ea85043ac1fb2096baea44f6b0af27ac0d0b2cf;hp=26733854b3a82d1833984ce3e745101237e9f4ad;hpb=fe2f1fceb546ca4326435cac26bcf3f513e82b43;p=tinc diff --git a/src/control.c b/src/control.c index 26733854..19f074a6 100644 --- a/src/control.c +++ b/src/control.c @@ -25,6 +25,7 @@ #include "conf.h" #include "control.h" #include "control_common.h" +#include "graph.h" #include "logger.h" #include "xalloc.h" @@ -35,22 +36,21 @@ extern char *controlsocketname; static void handle_control_data(struct bufferevent *event, void *data) { tinc_ctl_request_t req; - size_t size; tinc_ctl_request_t res; struct evbuffer *res_data = NULL; void *req_data; - if(EVBUFFER_LENGTH(event->input) < sizeof(tinc_ctl_request_t)) + if(EVBUFFER_LENGTH(event->input) < sizeof req) return; /* Copy the structure to ensure alignment */ - memcpy(&req, EVBUFFER_DATA(event->input), sizeof(tinc_ctl_request_t)); + memcpy(&req, EVBUFFER_DATA(event->input), sizeof req); if(EVBUFFER_LENGTH(event->input) < req.length) return; - req_data = EVBUFFER_DATA(event->input) + sizeof(tinc_ctl_request_t); + req_data = EVBUFFER_DATA(event->input) + sizeof req; - if(req.length < sizeof(tinc_ctl_request_t)) + if(req.length < sizeof req) goto failure; memset(&res, 0, sizeof res); @@ -109,10 +109,10 @@ static void handle_control_data(struct bufferevent *event, void *data) { debug_t new_debug_level; logger(LOG_NOTICE, _("Got '%s' command"), "debug"); - if(req.length != sizeof(req) + sizeof debug_level) + if(req.length != sizeof req + sizeof debug_level) res.res_errno = EINVAL; else { - memcpy(&new_debug_level, req_data, sizeof(debug_t)); + memcpy(&new_debug_level, req_data, sizeof new_debug_level); logger(LOG_NOTICE, _("Changing debug level from %d to %d"), debug_level, new_debug_level); if(evbuffer_add_printf(res_data,