From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shahar Lev Subject: [PATCH] ipnetns: fix exec for netns not in NETNS_RUN_DIR Date: Fri, 26 Dec 2014 00:15:58 +0200 Message-ID: <1419545758-11200-1-git-send-email-shahar@stratoscale.com> Cc: Shahar Lev To: netdev@vger.kernel.org Return-path: Received: from mail-wi0-f171.google.com ([209.85.212.171]:43237 "EHLO mail-wi0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751169AbaLYWQa (ORCPT ); Thu, 25 Dec 2014 17:16:30 -0500 Received: by mail-wi0-f171.google.com with SMTP id bs8so16074129wib.4 for ; Thu, 25 Dec 2014 14:16:28 -0800 (PST) Sender: netdev-owner@vger.kernel.org List-ID: Enabling "ip netns exec" to be run with a net namespace specified by a file path rather than a filename under /var/run/nets. Signed-off-by: Shahar Lev --- ip/ipnetns.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ip/ipnetns.c b/ip/ipnetns.c index 1c8aa02..5310d0c 100644 --- a/ip/ipnetns.c +++ b/ip/ipnetns.c @@ -66,7 +66,7 @@ static int usage(void) exit(-1); } -int get_netns_fd(const char *name) +static int get_netns_fd_flags(const char *name, int flags) { char pathbuf[MAXPATHLEN]; const char *path, *ptr; @@ -78,7 +78,12 @@ int get_netns_fd(const char *name) NETNS_RUN_DIR, name ); path = pathbuf; } - return open(path, O_RDONLY); + return open(path, flags); +} + +int get_netns_fd(const char *name) +{ + return get_netns_fd_flags(name, O_RDONLY); } static int netns_list(int argc, char **argv) @@ -135,7 +140,6 @@ static int netns_exec(int argc, char **argv) * aware, and execute a program in that environment. */ const char *name, *cmd; - char net_path[MAXPATHLEN]; int netns; if (argc < 1) { @@ -149,8 +153,7 @@ static int netns_exec(int argc, char **argv) name = argv[0]; cmd = argv[1]; - snprintf(net_path, sizeof(net_path), "%s/%s", NETNS_RUN_DIR, name); - netns = open(net_path, O_RDONLY | O_CLOEXEC); + netns = get_netns_fd_flags(name, O_RDONLY | O_CLOEXEC); if (netns < 0) { fprintf(stderr, "Cannot open network namespace \"%s\": %s\n", name, strerror(errno)); -- 1.8.3.1