Adding various arguments to 'execute' condition and 'execute' action.
authorAndreas Eversberg <jolly@eversberg.eu>
Mon, 13 Dec 2010 07:40:16 +0000 (08:40 +0100)
committerAndreas Eversberg <jolly@eversberg.eu>
Mon, 13 Dec 2010 07:40:16 +0000 (08:40 +0100)
action.cpp
route.c

index 1da9103..b7dfc58 100644 (file)
@@ -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 (file)
--- 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;