X-Git-Url: https://git.syn-net.org/?p=debian%2Fuanytun.git;a=blobdiff_plain;f=src%2Fsysexec.h;h=faed8eb73cd74b1803779e99448cb6ca016f353a;hp=b724433e44a1efd690bec0bb76be763fe19ee458;hb=4d61c93845abce1e45c4a41562ecb3fa4e3bdcc3;hpb=b81b2c1954fe3e3317e6fa260c5ffdc9eeee966c diff --git a/src/sysexec.h b/src/sysexec.h index b724433..faed8eb 100644 --- a/src/sysexec.h +++ b/src/sysexec.h @@ -15,13 +15,14 @@ * tunneling and relaying of packets of any protocol. * * - * Copyright (C) 2007-2008 Christian Pointner + * Copyright (C) 2007-2010 Christian Pointner * * This file is part of uAnytun. * * uAnytun is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3 as - * published by the Free Software Foundation. + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. * * uAnytun is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -32,46 +33,9 @@ * along with uAnytun. If not, see . */ -#ifndef _SYSEXEC_H_ -#define _SYSEXEC_H_ +#ifndef UANYTUN_sysexec_h_INCLUDED +#define UANYTUN_sysexec_h_INCLUDED -int exec_script(const char* script, const char* ifname) -{ - if(!script || !ifname) - return -1; - - pid_t pid; - pid = fork(); - if(!pid) { - int fd; - for (fd=getdtablesize();fd>=0;--fd) // close all file descriptors - close(fd); - - fd = open("/dev/null",O_RDWR); // stdin - if(fd == -1) - log_printf(WARNING, "can't open stdin"); - else { - if(dup(fd) == -1) // stdout - log_printf(WARNING, "can't open stdout"); - if(dup(fd) == -1) // stderr - log_printf(WARNING, "can't open stderr"); - } - execl("/bin/sh", "/bin/sh", script, ifname, NULL); - // if execl return, an error occurred - log_printf(ERROR, "error on executing script: %s", strerror(errno)); - return -1; - } - int status = 0; - waitpid(pid, &status, 0); - if(WIFEXITED(status)) - log_printf(NOTICE, "script '%s' returned %d", script, WEXITSTATUS(status)); - else if(WIFSIGNALED(status)) - log_printf(NOTICE, "script '%s' terminated after signal %d", script, WTERMSIG(status)); - else - log_printf(ERROR, "executing script: unkown error"); - - return status; - -} +int uanytun_exec(const char* script, char* const argv[], char* const evp[]); #endif