Browse Source

Extend v-extract-fs-archive to allow archive testing and extracting only specific paths (for tar)

Robert Zollner 6 years ago
parent
commit
4b4c5a6caa
1 changed files with 29 additions and 11 deletions
  1. 29 11
      bin/v-extract-fs-archive

+ 29 - 11
bin/v-extract-fs-archive

@@ -7,6 +7,8 @@
 user=$1
 src_file=$2
 dst_dir=$3
+selected_dir=$4
+test=$5
 
 # Includes
 source $HESTIA/func/main.sh
@@ -15,7 +17,7 @@ source $HESTIA/func/main.sh
 #                    Verifications                         #
 #----------------------------------------------------------#
 
-check_args '3' "$#" 'USER ARCHIVE DIRECTORY'
+check_args '3' "$#" 'USER ARCHIVE DIRECTORY [SELECTED_DIR] [TEST]'
 is_format_valid 'user'
 is_object_valid 'user' 'USER' "$user"
 
@@ -34,7 +36,7 @@ fi
 
 # Checking source path
 rpath=$(readlink -f "$src_file")
-if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then
+if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir|^$BACKUP/$user\.|^$BACKUP/tmp\.")" ]; then
     echo "Error: invalid source path $src_file"
     exit 2
 fi
@@ -49,17 +51,28 @@ fi
 # Extracting gziped archive
 if [ ! -z "$(echo $src_file |egrep -i  '.tgz|.tar.gz')" ]; then
     x='yes'
-    sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
-    sudo -u $user -- tar -xzf "$src_file" -C "$dst_dir" >/dev/null 2>&1
-    rc=$?
+    if [ -z "$test" ] || [ "$test" = "no" ]; then
+        sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
+        sudo -u $user -- tar -xzf "$src_file" -C "$dst_dir" --no-wildcards "$selected_dir" >/dev/null 2>&1
+        rc=$?
+    else
+        sudo -u $user -- tar -tf "$src_file" --no-wildcards "$selected_dir" >/dev/null 2>&1
+        rc=$?
+    fi
+
 fi
 
 # Extracting bziped archive
 if [ ! -z "$(echo $src_file |egrep -i  '.tbz|.tar.bz')" ]; then
     x='yes'
-    sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
-    sudo -u $user -- tar -xjf "$src_file" -C "$dst_dir" >/dev/null 2>&1
-    rc=$?
+    if [ -z "$test" ] || [ "$test" = "no" ]; then
+        sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
+        sudo -u $user -- tar -xjf "$src_file" -C "$dst_dir" --no-wildcards "$selected_dir" >/dev/null 2>&1
+        rc=$?
+    else
+        sudo -u $user -- tar -tf "$src_file" --no-wildcards "$selected_dir" >/dev/null 2>&1
+        rc=$?
+    fi
 fi
 
 # Extracting gziped file
@@ -96,9 +109,14 @@ fi
 # Extracting tared archive
 if [ ! -z "$(echo $src_file |grep -i '.tar')" ] && [ -z "$x" ]; then
     x='yes'
-    sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
-    sudo -u $user -- tar -xf "$src_file" -C "$dst_dir" >/dev/null 2>&1
-    rc=$?
+    if [ -z "$test" ] || [ "$test" = "no" ]; then
+        sudo -u $user -- mkdir -p "$dst_dir" >/dev/null 2>&1
+        sudo -u $user -- tar -xf "$src_file" -C "$dst_dir" --no-wildcards "$selected_dir" >/dev/null 2>&1
+        rc=$?
+    else
+        sudo -u $user -- tar -tf "$src_file" --no-wildcards "$selected_dir" >/dev/null 2>&1
+        rc=$?
+    fi
 fi
 
 # Extracting rared archive