summaryrefslogtreecommitdiffstats
path: root/route.c
diff options
context:
space:
mode:
authorHarald Welte2010-12-26 22:49:27 +0100
committerAndreas Eversberg2011-02-20 11:33:53 +0100
commit0eebd3a28e968844ec459298ac36e16305cc07bb (patch)
tree2856b304b77e2837a84c69a9964edd56f76bd4bb /route.c
parentGSM MNCC: Make sure to set the MNCC_F_KEYPAD when ACKing DTMF (diff)
downloadlcr-0eebd3a28e968844ec459298ac36e16305cc07bb.tar.gz
lcr-0eebd3a28e968844ec459298ac36e16305cc07bb.tar.xz
lcr-0eebd3a28e968844ec459298ac36e16305cc07bb.zip
don't execve() a shell process but always double-fork and then exec the program directly
Diffstat (limited to 'route.c')
-rw-r--r--route.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/route.c b/route.c
index f72d6b0..8217ff1 100644
--- a/route.c
+++ b/route.c
@@ -1902,6 +1902,7 @@ struct route_action *EndpointAppPBX::route(struct route_ruleset *ruleset)
struct admin_list *admin;
time_t now;
struct tm *now_tm;
+ int pid2;
/* reset timeout action */
e_match_to_action = NULL;
@@ -2071,9 +2072,11 @@ struct route_action *EndpointAppPBX::route(struct route_ruleset *ruleset)
case MATCH_EXECUTE:
j = 0;
+#if 0
argv[j++] = (char *)"/bin/sh";
argv[j++] = (char *)"-c";
argv[j++] = cond->string_value;
+#endif
argv[j++] = cond->string_value;
argv[j++] = e_extdialing;
argv[j++] = (char *)numberrize_callerinfo(e_callerinfo.id, e_callerinfo.ntype, options.national, options.international);
@@ -2083,8 +2086,11 @@ struct route_action *EndpointAppPBX::route(struct route_ruleset *ruleset)
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;
+ if (fork() == 0) {
+ if ((pid2 = fork()) == 0) {
+ execve(cond->string_value, argv, environ);
+ }
+ }
break;
case MATCH_DEFAULT: