From: Martin Willi Date: Tue, 29 Oct 2013 13:11:41 +0000 (+0100) Subject: whitelist: Read multiple commands until client closes connection X-Git-Tag: 5.1.1~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d402e87d165490fc6570a351b2842edab5353416;p=thirdparty%2Fstrongswan.git whitelist: Read multiple commands until client closes connection This restores the same behavior we had before e11c02c8, and fixes the whitelist add/remove-from command. --- diff --git a/src/libcharon/plugins/whitelist/whitelist_control.c b/src/libcharon/plugins/whitelist/whitelist_control.c index e97885c8f3..996f263c94 100644 --- a/src/libcharon/plugins/whitelist/whitelist_control.c +++ b/src/libcharon/plugins/whitelist/whitelist_control.c @@ -99,38 +99,36 @@ static bool on_accept(private_whitelist_control_t *this, stream_t *stream) identification_t *id; whitelist_msg_t msg; - if (!stream->read_all(stream, &msg, sizeof(msg))) + while (stream->read_all(stream, &msg, sizeof(msg))) { - return FALSE; - } - - msg.id[sizeof(msg.id) - 1] = 0; - id = identification_create_from_string(msg.id); - switch (ntohl(msg.type)) - { - case WHITELIST_ADD: - this->listener->add(this->listener, id); - break; - case WHITELIST_REMOVE: - this->listener->remove(this->listener, id); - break; - case WHITELIST_LIST: - list(this, stream, id); - break; - case WHITELIST_FLUSH: - this->listener->flush(this->listener, id); - break; - case WHITELIST_ENABLE: - this->listener->set_active(this->listener, TRUE); - break; - case WHITELIST_DISABLE: - this->listener->set_active(this->listener, FALSE); - break; - default: - DBG1(DBG_CFG, "received unknown whitelist command"); - break; + msg.id[sizeof(msg.id) - 1] = 0; + id = identification_create_from_string(msg.id); + switch (ntohl(msg.type)) + { + case WHITELIST_ADD: + this->listener->add(this->listener, id); + break; + case WHITELIST_REMOVE: + this->listener->remove(this->listener, id); + break; + case WHITELIST_LIST: + list(this, stream, id); + break; + case WHITELIST_FLUSH: + this->listener->flush(this->listener, id); + break; + case WHITELIST_ENABLE: + this->listener->set_active(this->listener, TRUE); + break; + case WHITELIST_DISABLE: + this->listener->set_active(this->listener, FALSE); + break; + default: + DBG1(DBG_CFG, "received unknown whitelist command"); + break; + } + id->destroy(id); } - id->destroy(id); return FALSE; }