X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=route.c;h=c1bf079491123e4adc305d0058385284c644f2d4;hp=f72d6b0b929135604d8e9394cd5723b552723949;hb=8b70a9a5c2071c587ab4016dcbbb8e4bbf6da181;hpb=0f5c2eabde69c66e8793171c878652184f9de5d8 diff --git a/route.c b/route.c index f72d6b0..c1bf079 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 pid, status; /* 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,18 @@ 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; + switch ((pid = fork())) { + case 0: + execve(cond->string_value, argv, environ); + perror("execve"); + exit(1); + case -1: + break; + default: + waitpid(pid, &status, 0); + if (0 == WEXITSTATUS(status)) + istrue = 1; + } break; case MATCH_DEFAULT: