aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/lookip/lookip_socket.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-10-09 11:16:07 +0200
committerMartin Willi <martin@revosec.ch>2012-10-24 11:43:34 +0200
commit9d422bb1b03255a8b2ba2e594916d3e9bd38f4ee (patch)
treebf467ee98f165749e7ed585ae50a537682dd13bd /src/libcharon/plugins/lookip/lookip_socket.c
parentf6fb2b98e987d485fc7fba3419646f63904c6cfd (diff)
downloadstrongswan-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.c18
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 */