diff options
author | Martin Willi <martin@revosec.ch> | 2012-10-09 11:16:07 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-10-24 11:43:34 +0200 |
commit | 9d422bb1b03255a8b2ba2e594916d3e9bd38f4ee (patch) | |
tree | bf467ee98f165749e7ed585ae50a537682dd13bd /src/libcharon/plugins/lookip/lookip_socket.c | |
parent | f6fb2b98e987d485fc7fba3419646f63904c6cfd (diff) | |
download | strongswan-9d422bb1b03255a8b2ba2e594916d3e9bd38f4ee.tar.bz2 strongswan-9d422bb1b03255a8b2ba2e594916d3e9bd38f4ee.tar.xz |
Send a lookip NOT_FOUND reply if a lookup yields no results
Diffstat (limited to 'src/libcharon/plugins/lookip/lookip_socket.c')
-rw-r--r-- | src/libcharon/plugins/lookip/lookip_socket.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/libcharon/plugins/lookip/lookip_socket.c b/src/libcharon/plugins/lookip/lookip_socket.c index 66eafd3a9..5c6e0e3c9 100644 --- a/src/libcharon/plugins/lookip/lookip_socket.c +++ b/src/libcharon/plugins/lookip/lookip_socket.c @@ -188,6 +188,7 @@ static void query(private_lookip_socket_t *this, int fd, lookip_request_t *req) .type = LOOKIP_ENTRY, }; host_t *vip = NULL; + int matches = 0; if (req) { /* lookup */ @@ -195,10 +196,23 @@ static void query(private_lookip_socket_t *this, int fd, lookip_request_t *req) vip = host_create_from_string(req->vip, 0); if (vip) { - this->listener->lookup(this->listener, vip, - (void*)listener_cb, &entry); + matches = this->listener->lookup(this->listener, vip, + (void*)listener_cb, &entry); vip->destroy(vip); } + if (matches == 0) + { + lookip_response_t resp = { + .type = LOOKIP_NOT_FOUND, + }; + + snprintf(resp.vip, sizeof(resp.vip), "%s", req->vip); + if (send(fd, &resp, sizeof(resp), 0) < 0) + { + DBG1(DBG_CFG, "sending lookip not-found failed: %s", + strerror(errno)); + } + } } else { /* dump */ |