From 5f82116f51ffe2fc4b44abe606f87d576b9b4c9d Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sun, 4 Oct 2009 14:27:58 +0000 Subject: added improved script execution --- src/sysexec.hpp | 74 --------------------------------------------------------- 1 file changed, 74 deletions(-) delete mode 100644 src/sysexec.hpp (limited to 'src/sysexec.hpp') diff --git a/src/sysexec.hpp b/src/sysexec.hpp deleted file mode 100644 index 90bde90..0000000 --- a/src/sysexec.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - * anytun - * - * The secure anycast tunneling protocol (satp) defines a protocol used - * for communication between any combination of unicast and anycast - * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel - * mode and allows tunneling of every ETHER TYPE protocol (e.g. - * ethernet, ip, arp ...). satp directly includes cryptography and - * message authentication based on the methodes used by SRTP. It is - * intended to deliver a generic, scaleable and secure solution for - * tunneling and relaying of packets of any protocol. - * - * - * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl, - * Christian Pointner - * - * This file is part of Anytun. - * - * Anytun 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. - * - * Anytun is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with anytun. If not, see . - */ - -#ifndef _SYSEXEC_HPP -#define _SYSEXEC_HPP -#ifndef NO_EXEC - -int execScript(std::string const& script, std::string const& ifname, std::string const& ifnode) -{ - 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) - cLog.msg(Log::PRIO_WARNING) << "can't open stdin"; - else { - if(dup(fd) == -1) // stdout - cLog.msg(Log::PRIO_WARNING) << "can't open stdout"; - if(dup(fd) == -1) // stderr - cLog.msg(Log::PRIO_WARNING) << "can't open stderr"; - } - execl("/bin/sh", "/bin/sh", script.c_str(), ifname.c_str(), ifnode.c_str(), (char*)NULL); - // if execl return, an error occurred - cLog.msg(Log::PRIO_ERROR) << "error on executing script: " << AnytunErrno(errno); - return -1; - } - int status = 0; - waitpid(pid, &status, 0); - if(WIFEXITED(status)) - cLog.msg(Log::PRIO_NOTICE) << "script '" << script << "' returned " << WEXITSTATUS(status); - else if(WIFSIGNALED(status)) - cLog.msg(Log::PRIO_NOTICE) << "script '" << script << "' terminated after signal " << WTERMSIG(status); - else - cLog.msg(Log::PRIO_ERROR) << "executing script: unkown error"; - - return status; -} - - -#endif -#endif - -- cgit v1.2.3