# # $Date: 2005/10/13 17:02:34 $ # # Functions that wrap the execution of tools so that they are logged # # Brian Carrier [carrier@sleuthkit.org] # Copyright (c) 2001-2005 by Brian Carrier. All rights reserved # # This file is part of the Autopsy Forensic Browser (Autopsy) # # Autopsy is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # Autopsy 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 Autopsy; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR PURPOSE. # IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, OR PROFITS OR # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. package Exec; # exec_pipe(HANDLE, CMD); sub exec_pipe { my $handle = shift(@_); my $cmd = shift(@_); die "Can't open pipe for exec_pipe" unless defined(my $pid = open($handle, '-|')); if ($pid) { return $handle; } else { $| = 1; Print::log_host_inv_exec("$cmd"); exec("$cmd") or die "Can't exec program: $!"; } } sub read_pipe_line { my $handle = shift(@_); my $out; # for (my $i = 0; ($len = read ($handle, $$buf, $size)) && (!defined $len); $i++) { for (my $i = 0; $i < 100; $i++) { $out = <$handle>; return $out if (defined $out); } return $out; } sub read_pipe_data { my $handle = shift(@_); my $size = shift(@_); my $out; my $len; for ( my $i = 0; ($len = read($handle, $out, $size)) && (!defined $len) && ($i < 100); $i++ ) { } return $out; } sub exec_sys { my $cmd = shift(@_); Print::log_host_inv_exec("$cmd"); system($cmd); return; } 1;