From df8006ae8ffb2663717ad20bf874228a8a83902d Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Fri, 25 Jul 2008 01:48:32 -0700 Subject: [PATCH] --- yaml --- r: 106005 b: refs/heads/master c: 4ecb90090c84210a8bd2a9d7a5906e616735873c h: refs/heads/master i: 106003: 7975c884c04f7630493d0c273b9092a71762e58a v: v3 --- [refs] | 2 +- trunk/net/sysctl_net.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 16270258b76b..2d9f8e421e99 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 99541c23cd32bacf1a591ca537a7c0cb9053ad7e +refs/heads/master: 4ecb90090c84210a8bd2a9d7a5906e616735873c diff --git a/trunk/net/sysctl_net.c b/trunk/net/sysctl_net.c index 007c1a6708ee..63ada437fc2f 100644 --- a/trunk/net/sysctl_net.c +++ b/trunk/net/sysctl_net.c @@ -35,8 +35,22 @@ net_ctl_header_lookup(struct ctl_table_root *root, struct nsproxy *namespaces) return &namespaces->net_ns->sysctl_table_headers; } +/* Return standard mode bits for table entry. */ +static int net_ctl_permissions(struct ctl_table_root *root, + struct nsproxy *nsproxy, + struct ctl_table *table) +{ + /* Allow network administrator to have same access as root. */ + if (capable(CAP_NET_ADMIN)) { + int mode = (table->mode >> 6) & 7; + return (mode << 6) | (mode << 3) | mode; + } + return table->mode; +} + static struct ctl_table_root net_sysctl_root = { .lookup = net_ctl_header_lookup, + .permissions = net_ctl_permissions, }; static LIST_HEAD(net_sysctl_ro_tables);