From 0f5c2eabde69c66e8793171c878652184f9de5d8 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Mon, 13 Dec 2010 08:40:16 +0100 Subject: [PATCH] Adding various arguments to 'execute' condition and 'execute' action. --- action.cpp | 3 ++- route.c | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/action.cpp b/action.cpp index 1da9103..b7dfc58 100644 --- a/action.cpp +++ b/action.cpp @@ -1965,7 +1965,7 @@ void EndpointAppPBX::action_execute(void) int iWaitStatus; char *command = (char *)""; char isdn_port[10]; - char *argv[11]; /* check also number of args below */ + char *argv[12]; /* check also number of args below */ int i = 0; /* get script / command */ @@ -1989,6 +1989,7 @@ void EndpointAppPBX::action_execute(void) argv[i++] = e_callerinfo.name; SPRINT(isdn_port, "%d", e_callerinfo.isdn_port); argv[i++] = isdn_port; + argv[i++] = e_callerinfo.imsi; argv[i++] = NULL; /* check also number of args above */ switch (pid = fork ()) { case -1: diff --git a/route.c b/route.c index ca8ded8..f72d6b0 100644 --- a/route.c +++ b/route.c @@ -1890,6 +1890,8 @@ struct route_action *EndpointAppPBX::route(struct route_ruleset *ruleset) struct route_action *action = NULL; unsigned long comp_len; int j, jj; + char isdn_port[10]; + char *argv[11]; /* check also number of args below */ char callerid[64], callerid2[64], redirid[64]; int integer; char *string; @@ -2068,7 +2070,20 @@ struct route_action *EndpointAppPBX::route(struct route_ruleset *ruleset) break; case MATCH_EXECUTE: - if (system(cond->string_value) == 0) + j = 0; + argv[j++] = (char *)"/bin/sh"; + argv[j++] = (char *)"-c"; + argv[j++] = cond->string_value; + argv[j++] = cond->string_value; + argv[j++] = e_extdialing; + argv[j++] = (char *)numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype, options.national, options.international); + argv[j++] = e_callerinfo.extension; + argv[j++] = e_callerinfo.name; + SPRINT(isdn_port, "%d", e_callerinfo.isdn_port); + argv[j++] = isdn_port; + argv[j++] = e_callerinfo.imsi; + argv[j++] = NULL; /* check also number of args above */ + if (execve("/bin/sh", argv, environ) == 0) istrue = 1; break; -- 2.13.6