diff options
author | Martin Willi <martin@revosec.ch> | 2013-10-29 14:11:41 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-10-29 14:22:52 +0100 |
commit | d402e87d165490fc6570a351b2842edab5353416 (patch) | |
tree | 84533c80b55e37aee706ed0f81c712efc33bcd71 /src/libcharon/plugins/whitelist/whitelist_control.c | |
parent | 348b9d82b4f97842eda88305e97e29095e8c31b6 (diff) | |
download | strongswan-d402e87d165490fc6570a351b2842edab5353416.tar.bz2 strongswan-d402e87d165490fc6570a351b2842edab5353416.tar.xz |
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.
Diffstat (limited to 'src/libcharon/plugins/whitelist/whitelist_control.c')
-rw-r--r-- | src/libcharon/plugins/whitelist/whitelist_control.c | 58 |
1 files changed, 28 insertions, 30 deletions
diff --git a/src/libcharon/plugins/whitelist/whitelist_control.c b/src/libcharon/plugins/whitelist/whitelist_control.c index e97885c8f..996f263c9 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; } |