From 308a6d0c3ba6f22d00b7a360a8621db5e5f9647a Mon Sep 17 00:00:00 2001 From: Guillaume Nault Date: Thu, 21 Jun 2018 09:52:53 +0200 Subject: pppd_compat: fix argv[0] when calling ip-pre-up The first argument passed to the ip-pre-up script, was mistakenly set to the value of ip-up. Signed-off-by: Guillaume Nault --- accel-pppd/extra/pppd_compat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'accel-pppd/extra') diff --git a/accel-pppd/extra/pppd_compat.c b/accel-pppd/extra/pppd_compat.c index 2db24403..915ef71d 100644 --- a/accel-pppd/extra/pppd_compat.c +++ b/accel-pppd/extra/pppd_compat.c @@ -238,7 +238,7 @@ static void ev_ses_pre_up(struct ap_session *ses) argv[4] = ipaddr; argv[5] = peer_ipaddr; - fill_argv(argv, pd, conf_ip_up); + fill_argv(argv, pd, conf_ip_pre_up); fill_env(env, env_mem, pd); -- cgit v1.2.3 From 34c5d1fd9f567e921618f7e70a813d476be2faef Mon Sep 17 00:00:00 2001 From: Guillaume Nault Date: Thu, 21 Jun 2018 09:52:54 +0200 Subject: pppd_compat: run scripts in the PPP device netns If the PPP device is set up into a specific network namespace, all the configuration that goes with it belongs to this same netns. Therefore, we need to run the up/down scripts in that namespace too. Signed-off-by: Guillaume Nault --- accel-pppd/extra/pppd_compat.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'accel-pppd/extra') diff --git a/accel-pppd/extra/pppd_compat.c b/accel-pppd/extra/pppd_compat.c index 915ef71d..56dba5e9 100644 --- a/accel-pppd/extra/pppd_compat.c +++ b/accel-pppd/extra/pppd_compat.c @@ -269,7 +269,10 @@ static void ev_ses_pre_up(struct ap_session *ses) sigfillset(&set); pthread_sigmask(SIG_UNBLOCK, &set, NULL); + net->enter_ns(); execve(conf_ip_pre_up, argv, env); + net->exit_ns(); + log_emerg("pppd_compat: exec '%s': %s\n", conf_ip_pre_up, strerror(errno)); _exit(EXIT_FAILURE); } else @@ -316,7 +319,10 @@ static void ev_ses_started(struct ap_session *ses) sigfillset(&set); pthread_sigmask(SIG_UNBLOCK, &set, NULL); + net->enter_ns(); execve(conf_ip_up, argv, env); + net->exit_ns(); + log_emerg("pppd_compat: exec '%s': %s\n", conf_ip_up, strerror(errno)); _exit(EXIT_FAILURE); } else @@ -373,7 +379,10 @@ static void ev_ses_finished(struct ap_session *ses) sigfillset(&set); pthread_sigmask(SIG_UNBLOCK, &set, NULL); + net->enter_ns(); execve(conf_ip_down, argv, env); + net->exit_ns(); + log_emerg("pppd_compat: exec '%s': %s\n", conf_ip_down, strerror(errno)); _exit(EXIT_FAILURE); } else @@ -459,7 +468,10 @@ static void ev_radius_coa(struct ev_radius_t *ev) if (!ev->res) ev->res = pd->res; } else if (pid == 0) { + net->enter_ns(); execve(conf_ip_change, argv, env); + net->exit_ns(); + log_emerg("pppd_compat: exec '%s': %s\n", conf_ip_change, strerror(errno)); _exit(EXIT_FAILURE); } else -- cgit v1.2.3 From 6c514056471dfdf030d69fb9fda443047a8cc964 Mon Sep 17 00:00:00 2001 From: Guillaume Nault Date: Thu, 21 Jun 2018 09:52:56 +0200 Subject: pppd_compat: fix indentation in ev_radius_coa() Missing tab was misleading. Signed-off-by: Guillaume Nault --- accel-pppd/extra/pppd_compat.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'accel-pppd/extra') diff --git a/accel-pppd/extra/pppd_compat.c b/accel-pppd/extra/pppd_compat.c index 56dba5e9..318327e8 100644 --- a/accel-pppd/extra/pppd_compat.c +++ b/accel-pppd/extra/pppd_compat.c @@ -454,8 +454,8 @@ static void ev_radius_coa(struct ev_radius_t *ev) check_fork_limit(pd, &queue1); sigchld_lock(); - pid = fork(); - if (pid > 0) { + pid = fork(); + if (pid > 0) { pd->hnd.pid = pid; pd->hnd.handler = ip_change_handler; sigchld_register_handler(&pd->hnd); -- cgit v1.2.3