Do not install invalid 0.0.0.0 DNS servers
This commit is contained in:
@@ -52,22 +52,26 @@ static bool handle(private_resolve_handler_t *this, identification_t *server,
|
|||||||
FILE *in, *out;
|
FILE *in, *out;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
host_t *addr;
|
host_t *addr;
|
||||||
int family;
|
|
||||||
size_t len;
|
size_t len;
|
||||||
bool handled = FALSE;
|
bool handled = FALSE;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case INTERNAL_IP4_DNS:
|
case INTERNAL_IP4_DNS:
|
||||||
family = AF_INET;
|
addr = host_create_from_chunk(AF_INET, data, 0);
|
||||||
break;
|
break;
|
||||||
case INTERNAL_IP6_DNS:
|
case INTERNAL_IP6_DNS:
|
||||||
family = AF_INET6;
|
addr = host_create_from_chunk(AF_INET6, data, 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!addr || addr->is_anyaddr(addr))
|
||||||
|
{
|
||||||
|
DESTROY_IF(addr);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
this->mutex->lock(this->mutex);
|
this->mutex->lock(this->mutex);
|
||||||
|
|
||||||
in = fopen(this->file, "r");
|
in = fopen(this->file, "r");
|
||||||
@@ -76,11 +80,8 @@ static bool handle(private_resolve_handler_t *this, identification_t *server,
|
|||||||
out = fopen(this->file, "w");
|
out = fopen(this->file, "w");
|
||||||
if (out)
|
if (out)
|
||||||
{
|
{
|
||||||
addr = host_create_from_chunk(family, data, 0);
|
fprintf(out, "nameserver %H # by strongSwan, from %Y\n", addr, server);
|
||||||
fprintf(out, "nameserver %H # by strongSwan, from %Y\n",
|
|
||||||
addr, server);
|
|
||||||
DBG1(DBG_IKE, "installing DNS server %H to %s", addr, this->file);
|
DBG1(DBG_IKE, "installing DNS server %H to %s", addr, this->file);
|
||||||
addr->destroy(addr);
|
|
||||||
handled = TRUE;
|
handled = TRUE;
|
||||||
|
|
||||||
/* copy rest of the file */
|
/* copy rest of the file */
|
||||||
@@ -90,16 +91,20 @@ static bool handle(private_resolve_handler_t *this, identification_t *server,
|
|||||||
{
|
{
|
||||||
ignore_result(fwrite(buf, 1, len, out));
|
ignore_result(fwrite(buf, 1, len, out));
|
||||||
}
|
}
|
||||||
fclose(in);
|
|
||||||
}
|
}
|
||||||
fclose(out);
|
fclose(out);
|
||||||
}
|
}
|
||||||
|
if (in)
|
||||||
|
{
|
||||||
|
fclose(in);
|
||||||
|
}
|
||||||
|
this->mutex->unlock(this->mutex);
|
||||||
|
addr->destroy(addr);
|
||||||
|
|
||||||
if (!handled)
|
if (!handled)
|
||||||
{
|
{
|
||||||
DBG1(DBG_IKE, "adding DNS server failed", this->file);
|
DBG1(DBG_IKE, "adding DNS server failed", this->file);
|
||||||
}
|
}
|
||||||
this->mutex->unlock(this->mutex);
|
|
||||||
return handled;
|
return handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user