aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2013-06-25 08:35:06 +0200
committerTobias Brunner <tobias@strongswan.org>2013-06-25 17:16:32 +0200
commit6f15f5e632917775db9ecf2826532884f34877e8 (patch)
treeb7524c97b9d820685dadc70a0812011c00496f36 /src
parent1dd61bf13d688dfa71b25d3eb7872dc784f1e57c (diff)
downloadstrongswan-6f15f5e632917775db9ecf2826532884f34877e8.tar.bz2
strongswan-6f15f5e632917775db9ecf2826532884f34877e8.tar.xz
dhcp: Require CAP_NET_BIND_SERVICE and CAP_NET_RAW to open/bind sockets
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/plugins/dhcp/dhcp_plugin.c11
-rw-r--r--src/libstrongswan/utils/capabilities.h3
2 files changed, 14 insertions, 0 deletions
diff --git a/src/libcharon/plugins/dhcp/dhcp_plugin.c b/src/libcharon/plugins/dhcp/dhcp_plugin.c
index a31f12689..31195e25b 100644
--- a/src/libcharon/plugins/dhcp/dhcp_plugin.c
+++ b/src/libcharon/plugins/dhcp/dhcp_plugin.c
@@ -107,6 +107,17 @@ plugin_t *dhcp_plugin_create()
{
private_dhcp_plugin_t *this;
+ if (!lib->caps->keep(lib->caps, CAP_NET_BIND_SERVICE))
+ { /* required to bind DHCP socket (port 68) */
+ DBG1(DBG_NET, "dhcp plugin requires CAP_NET_BIND_SERVICE capability");
+ return NULL;
+ }
+ else if (!lib->caps->keep(lib->caps, CAP_NET_RAW))
+ { /* required to open DHCP receive socket (AF_PACKET) */
+ DBG1(DBG_NET, "dhcp plugin requires CAP_NET_RAW capability");
+ return NULL;
+ }
+
INIT(this,
.public = {
.plugin = {
diff --git a/src/libstrongswan/utils/capabilities.h b/src/libstrongswan/utils/capabilities.h
index 543af32cc..34937577a 100644
--- a/src/libstrongswan/utils/capabilities.h
+++ b/src/libstrongswan/utils/capabilities.h
@@ -38,6 +38,9 @@ typedef struct capabilities_t capabilities_t;
#ifndef CAP_NET_ADMIN
# define CAP_NET_ADMIN 12
#endif
+#ifndef CAP_NET_RAW
+# define CAP_NET_RAW 13
+#endif
/**
* POSIX capability dropping abstraction layer.