aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/whitelist/whitelist_control.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2013-10-29 14:11:41 +0100
committerMartin Willi <martin@revosec.ch>2013-10-29 14:22:52 +0100
commitd402e87d165490fc6570a351b2842edab5353416 (patch)
tree84533c80b55e37aee706ed0f81c712efc33bcd71 /src/libcharon/plugins/whitelist/whitelist_control.c
parent348b9d82b4f97842eda88305e97e29095e8c31b6 (diff)
downloadstrongswan-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.c58
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;
}